1 /* 2 * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24 import org.testng.annotations.Test; 25 import java.lang.reflect.Array; 26 27 import static org.testng.Assert.assertEquals; 28 29 /** 30 * @author Robert Field 31 */ 32 33 @Test 34 public class MethodReferenceTestVarArgs { 35 36 interface SII { 37 m(Integer a, Integer b)38 String m(Integer a, Integer b); 39 } 40 41 interface Siii { 42 m(int a, int b, int c)43 String m(int a, int b, int c); 44 } 45 46 interface Si { 47 m(int a)48 String m(int a); 49 } 50 51 interface SaO { 52 m(Object[] a)53 String m(Object[] a); 54 } 55 56 interface Sai { 57 m(int[] a)58 String m(int[] a); 59 } 60 61 interface Svi { 62 m(int... va)63 String m(int... va); 64 } 65 66 // These should be processed as var args 67 xvI(Integer... vi)68 static String xvI(Integer... vi) { 69 StringBuilder sb = new StringBuilder("xvI:"); 70 for (Integer i : vi) { 71 sb.append(i); 72 sb.append("-"); 73 } 74 return sb.toString(); 75 } 76 xIvI(Integer f, Integer... vi)77 static String xIvI(Integer f, Integer... vi) { 78 StringBuilder sb = new StringBuilder("xIvI:"); 79 sb.append(f); 80 for (Integer i : vi) { 81 sb.append(i); 82 sb.append("-"); 83 } 84 return sb.toString(); 85 } 86 xvi(int... vi)87 static String xvi(int... vi) { 88 int sum = 0; 89 for (int i : vi) { 90 sum += i; 91 } 92 return "xvi:" + sum; 93 } 94 xIvi(Integer f, int... vi)95 static String xIvi(Integer f, int... vi) { 96 int sum = 0; 97 for (int i : vi) { 98 sum += i; 99 } 100 return "xIvi:(" + f + ")" + sum; 101 } 102 xvO(Object... vi)103 static String xvO(Object... vi) { 104 StringBuilder sb = new StringBuilder("xvO:"); 105 for (Object i : vi) { 106 if (i.getClass().isArray()) { 107 sb.append("["); 108 int len = Array.getLength(i); 109 for (int x = 0; x < len; ++x) { 110 sb.append(Array.get(i, x)); 111 sb.append(","); 112 } 113 sb.append("]"); 114 115 } else { 116 sb.append(i); 117 } 118 sb.append("*"); 119 } 120 return sb.toString(); 121 } 122 testVarArgsSuperclass()123 public void testVarArgsSuperclass() { 124 SII q; 125 126 q = MethodReferenceTestVarArgs::xvO; 127 assertEquals(q.m(55,66), "xvO:55*66*"); 128 } 129 testVarArgsArray()130 public void testVarArgsArray() { 131 Sai q; 132 133 q = MethodReferenceTestVarArgs::xvO; 134 assertEquals(q.m(new int[] { 55,66 } ), "xvO:[55,66,]*"); 135 } 136 testVarArgsII()137 public void testVarArgsII() { 138 SII q; 139 140 q = MethodReferenceTestVarArgs::xvI; 141 assertEquals(q.m(33,7), "xvI:33-7-"); 142 143 q = MethodReferenceTestVarArgs::xIvI; 144 assertEquals(q.m(50,40), "xIvI:5040-"); 145 146 q = MethodReferenceTestVarArgs::xvi; 147 assertEquals(q.m(100,23), "xvi:123"); 148 149 q = MethodReferenceTestVarArgs::xIvi; 150 assertEquals(q.m(9,21), "xIvi:(9)21"); 151 } 152 testVarArgsiii()153 public void testVarArgsiii() { 154 Siii q; 155 156 q = MethodReferenceTestVarArgs::xvI; 157 assertEquals(q.m(3, 2, 1), "xvI:3-2-1-"); 158 159 q = MethodReferenceTestVarArgs::xIvI; 160 assertEquals(q.m(888, 99, 2), "xIvI:88899-2-"); 161 162 q = MethodReferenceTestVarArgs::xvi; 163 assertEquals(q.m(900,80,7), "xvi:987"); 164 165 q = MethodReferenceTestVarArgs::xIvi; 166 assertEquals(q.m(333,27, 72), "xIvi:(333)99"); 167 } 168 testVarArgsi()169 public void testVarArgsi() { 170 Si q; 171 172 q = MethodReferenceTestVarArgs::xvI; 173 assertEquals(q.m(3), "xvI:3-"); 174 175 q = MethodReferenceTestVarArgs::xIvI; 176 assertEquals(q.m(888), "xIvI:888"); 177 178 q = MethodReferenceTestVarArgs::xvi; 179 assertEquals(q.m(900), "xvi:900"); 180 181 q = MethodReferenceTestVarArgs::xIvi; 182 assertEquals(q.m(333), "xIvi:(333)0"); 183 } 184 185 // These should NOT be processed as var args 186 testVarArgsaO()187 public void testVarArgsaO() { 188 SaO q; 189 190 q = MethodReferenceTestVarArgs::xvO; 191 assertEquals(q.m(new String[] { "yo", "there", "dude" }), "xvO:yo*there*dude*"); 192 } 193 194 195 } 196