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 MethodReferenceTestInnerVarArgsThis { 35 36 interface NsII { 37 m(Integer a, Integer b)38 String m(Integer a, Integer b); 39 } 40 41 interface Nsiii { 42 m(int a, int b, int c)43 String m(int a, int b, int c); 44 } 45 46 interface Nsi { 47 m(int a)48 String m(int a); 49 } 50 51 interface NsaO { 52 m(Object[] a)53 String m(Object[] a); 54 } 55 56 interface Nsai { 57 m(int[] a)58 String m(int[] a); 59 } 60 61 interface Nsvi { 62 m(int... va)63 String m(int... va); 64 } 65 66 class CIA { 67 xvI(Integer... vi)68 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 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 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 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 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 123 public class CIB { 124 125 // These should be processed as var args testVarArgsNsSuperclass()126 public void testVarArgsNsSuperclass() { 127 NsII q; 128 129 q = CIA.this::xvO; 130 assertEquals(q.m(55, 66), "xvO:55*66*"); 131 } 132 testVarArgsNsArray()133 public void testVarArgsNsArray() { 134 Nsai q; 135 136 q = CIA.this::xvO; 137 assertEquals(q.m(new int[]{55, 66}), "xvO:[55,66,]*"); 138 } 139 testVarArgsNsII()140 public void testVarArgsNsII() { 141 NsII q; 142 143 q = CIA.this::xvI; 144 assertEquals(q.m(33, 7), "xvI:33-7-"); 145 146 q = CIA.this::xIvI; 147 assertEquals(q.m(50, 40), "xIvI:5040-"); 148 149 q = CIA.this::xvi; 150 assertEquals(q.m(100, 23), "xvi:123"); 151 152 q = CIA.this::xIvi; 153 assertEquals(q.m(9, 21), "xIvi:(9)21"); 154 } 155 testVarArgsNsiii()156 public void testVarArgsNsiii() { 157 Nsiii q; 158 159 q = CIA.this::xvI; 160 assertEquals(q.m(3, 2, 1), "xvI:3-2-1-"); 161 162 q = CIA.this::xIvI; 163 assertEquals(q.m(888, 99, 2), "xIvI:88899-2-"); 164 165 q = CIA.this::xvi; 166 assertEquals(q.m(900, 80, 7), "xvi:987"); 167 168 q = CIA.this::xIvi; 169 assertEquals(q.m(333, 27, 72), "xIvi:(333)99"); 170 } 171 testVarArgsNsi()172 public void testVarArgsNsi() { 173 Nsi q; 174 175 q = CIA.this::xvI; 176 assertEquals(q.m(3), "xvI:3-"); 177 178 q = CIA.this::xIvI; 179 assertEquals(q.m(888), "xIvI:888"); 180 181 q = CIA.this::xvi; 182 assertEquals(q.m(900), "xvi:900"); 183 184 q = CIA.this::xIvi; 185 assertEquals(q.m(333), "xIvi:(333)0"); 186 } 187 188 // These should NOT be processed as var args testVarArgsNsaO()189 public void testVarArgsNsaO() { 190 NsaO q; 191 192 q = CIA.this::xvO; 193 assertEquals(q.m(new String[]{"yo", "there", "dude"}), "xvO:yo*there*dude*"); 194 } 195 } 196 cib()197 CIB cib() { 198 return new CIB(); 199 } 200 201 class E { 202 xI(Integer i)203 String xI(Integer i) { 204 return "ExI:" + i; 205 } 206 } 207 } 208 cia()209 CIA cia() { 210 return new CIA(); 211 } 212 213 // These should be processed as var args testVarArgsNsSuperclass()214 public void testVarArgsNsSuperclass() { 215 cia().cib().testVarArgsNsSuperclass(); 216 } 217 testVarArgsNsArray()218 public void testVarArgsNsArray() { 219 cia().cib().testVarArgsNsArray(); 220 } 221 testVarArgsNsII()222 public void testVarArgsNsII() { 223 cia().cib().testVarArgsNsII(); 224 } 225 testVarArgsNsiii()226 public void testVarArgsNsiii() { 227 cia().cib().testVarArgsNsiii(); 228 } 229 testVarArgsNsi()230 public void testVarArgsNsi() { 231 cia().cib().testVarArgsNsi(); 232 } 233 234 // These should NOT be processed as var args 235 testVarArgsNsaO()236 public void testVarArgsNsaO() { 237 cia().cib().testVarArgsNsaO(); 238 } 239 240 241 } 242