test/tools/javac/lambda/methodReferenceExecution/MethodReferenceTestKinds.java

Fri, 30 Nov 2012 15:14:25 +0000

author
mcimadamore
date
Fri, 30 Nov 2012 15:14:25 +0000
changeset 1434
34d1ebaf4645
parent 1422
d898d9ee352f
child 1435
9b26c96f5138
permissions
-rw-r--r--

8004102: Add support for generic functional descriptors
Summary: Method references are allowed to have a generic functional interface descriptor target
Reviewed-by: jjg

rfield@1422 1 /*
rfield@1422 2 * Copyright (c) 2012 Oracle and/or its affiliates. All rights reserved.
rfield@1422 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
rfield@1422 4 *
rfield@1422 5 * This code is free software; you can redistribute it and/or modify it
rfield@1422 6 * under the terms of the GNU General Public License version 2 only, as
rfield@1422 7 * published by the Free Software Foundation. Oracle designates this
rfield@1422 8 * particular file as subject to the "Classpath" exception as provided
rfield@1422 9 * by Oracle in the LICENSE file that accompanied this code.
rfield@1422 10 *
rfield@1422 11 * This code is distributed in the hope that it will be useful, but WITHOUT
rfield@1422 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
rfield@1422 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
rfield@1422 14 * version 2 for more details (a copy is included in the LICENSE file that
rfield@1422 15 * accompanied this code).
rfield@1422 16 *
rfield@1422 17 * You should have received a copy of the GNU General Public License version
rfield@1422 18 * 2 along with this work; if not, write to the Free Software Foundation,
rfield@1422 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
rfield@1422 20 *
rfield@1422 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
rfield@1422 22 * or visit www.oracle.com if you need additional information or have any
rfield@1422 23 * questions.
rfield@1422 24 */
rfield@1422 25
rfield@1422 26 /**
rfield@1422 27 * @test
rfield@1422 28 * @bug 8003639
rfield@1422 29 * @summary convert lambda testng tests to jtreg and add them
rfield@1422 30 * @run testng MethodReferenceTestKinds
rfield@1422 31 */
rfield@1422 32
rfield@1422 33 import org.testng.annotations.Test;
rfield@1422 34
rfield@1422 35 import static org.testng.Assert.assertEquals;
rfield@1422 36
rfield@1422 37 /**
rfield@1422 38 * @author Robert Field
rfield@1422 39 */
rfield@1422 40
rfield@1422 41 @Test
rfield@1422 42 public class MethodReferenceTestKinds extends MethodReferenceTestKindsSup {
rfield@1422 43
rfield@1422 44 interface S0 { String get(); }
rfield@1422 45 interface S1 { String get(MethodReferenceTestKinds x); }
rfield@1422 46 interface S2 { String get(MethodReferenceTestKinds x, MethodReferenceTestKinds y); }
rfield@1422 47
rfield@1422 48 interface SXN0 { MethodReferenceTestKindsBase make(MethodReferenceTestKinds x); }
rfield@1422 49 interface SXN1 { MethodReferenceTestKindsBase make(MethodReferenceTestKinds x, String str); }
rfield@1422 50
rfield@1422 51 interface SN0 { MethodReferenceTestKindsBase make(); }
rfield@1422 52 interface SN1 { MethodReferenceTestKindsBase make(String x); }
rfield@1422 53
rfield@1422 54 class In extends MethodReferenceTestKindsBase {
rfield@1422 55 In(String val) {
rfield@1422 56 this.val = val;
rfield@1422 57 }
rfield@1422 58
rfield@1422 59 In() {
rfield@1422 60 this("blank");
rfield@1422 61 }
rfield@1422 62 }
rfield@1422 63
rfield@1422 64 String instanceMethod0() { return "IM:0-" + this; }
rfield@1422 65 String instanceMethod1(MethodReferenceTestKinds x) { return "IM:1-" + this + x; }
rfield@1422 66
rfield@1422 67 static String staticMethod0() { return "SM:0"; }
rfield@1422 68 static String staticMethod1(MethodReferenceTestKinds x) { return "SM:1-" + x; }
rfield@1422 69
rfield@1422 70 MethodReferenceTestKinds(String val) {
rfield@1422 71 super(val);
rfield@1422 72 }
rfield@1422 73
rfield@1422 74 MethodReferenceTestKinds() {
rfield@1422 75 super("blank");
rfield@1422 76 }
rfield@1422 77
rfield@1422 78 MethodReferenceTestKinds inst(String val) {
rfield@1422 79 return new MethodReferenceTestKinds(val);
rfield@1422 80 }
rfield@1422 81
rfield@1422 82 public void testMRBound() {
rfield@1422 83 S0 var = this::instanceMethod0;
rfield@1422 84 assertEquals(var.get(), "IM:0-MethodReferenceTestKinds(blank)");
rfield@1422 85 }
rfield@1422 86
rfield@1422 87 public void testMRBoundArg() {
rfield@1422 88 S1 var = this::instanceMethod1;
rfield@1422 89 assertEquals(var.get(inst("arg")), "IM:1-MethodReferenceTestKinds(blank)MethodReferenceTestKinds(arg)");
rfield@1422 90 }
rfield@1422 91
rfield@1422 92 public void testMRUnbound() {
rfield@1422 93 S1 var = MethodReferenceTestKinds::instanceMethod0;
rfield@1422 94 assertEquals(var.get(inst("rcvr")), "IM:0-MethodReferenceTestKinds(rcvr)");
rfield@1422 95 }
rfield@1422 96
rfield@1422 97 public void testMRUnboundArg() {
rfield@1422 98 S2 var = MethodReferenceTestKinds::instanceMethod1;
rfield@1422 99 assertEquals(var.get(inst("rcvr"), inst("arg")), "IM:1-MethodReferenceTestKinds(rcvr)MethodReferenceTestKinds(arg)");
rfield@1422 100 }
rfield@1422 101
rfield@1422 102 public void testMRSuper() {
rfield@1422 103 S0 var = super::instanceMethod0;
rfield@1422 104 assertEquals(var.get(), "SIM:0-MethodReferenceTestKinds(blank)");
rfield@1422 105 }
rfield@1422 106
rfield@1422 107 public void testMRSuperArg() {
rfield@1422 108 S1 var = super::instanceMethod1;
rfield@1422 109 assertEquals(var.get(inst("arg")), "SIM:1-MethodReferenceTestKinds(blank)MethodReferenceTestKinds(arg)");
rfield@1422 110 }
rfield@1422 111
rfield@1422 112 public void testMRStatic() {
rfield@1422 113 S0 var = MethodReferenceTestKinds::staticMethod0;
rfield@1422 114 assertEquals(var.get(), "SM:0");
rfield@1422 115 }
rfield@1422 116
rfield@1422 117 public void testMRStaticArg() {
rfield@1422 118 S1 var = MethodReferenceTestKinds::staticMethod1;
rfield@1422 119 assertEquals(var.get(inst("arg")), "SM:1-MethodReferenceTestKinds(arg)");
rfield@1422 120 }
rfield@1422 121
rfield@1422 122 public void testMRStaticEval() {
rfield@1422 123 MethodReferenceTestKinds evalCheck;
rfield@1422 124 S0 var = (evalCheck = inst("discard"))::staticMethod0;
rfield@1422 125 assertEquals(evalCheck.toString(), "MethodReferenceTestKinds(discard)");
rfield@1422 126 assertEquals(var.get(), "SM:0");
rfield@1422 127 }
rfield@1422 128
rfield@1422 129 public void testMRStaticEvalArg() {
rfield@1422 130 MethodReferenceTestKinds evalCheck;
rfield@1422 131 S1 var = (evalCheck = inst("discard"))::staticMethod1;
rfield@1422 132 assertEquals(evalCheck.toString(), "MethodReferenceTestKinds(discard)");
rfield@1422 133 assertEquals(var.get(inst("arg")), "SM:1-MethodReferenceTestKinds(arg)");
rfield@1422 134 }
rfield@1422 135
rfield@1422 136 public void testMRTopLevel() {
rfield@1422 137 SN0 var = MethodReferenceTestKindsBase::new;
rfield@1422 138 assertEquals(var.make().toString(), "MethodReferenceTestKindsBase(blank)");
rfield@1422 139 }
rfield@1422 140
rfield@1422 141 public void testMRTopLevelArg() {
rfield@1422 142 SN1 var = MethodReferenceTestKindsBase::new;
rfield@1422 143 assertEquals(var.make("name").toString(), "MethodReferenceTestKindsBase(name)");
rfield@1422 144 }
rfield@1422 145 /* unbound inner case not supported anymore (dropped by EG)
rfield@1422 146 public void testMRUnboundInner() {
rfield@1422 147 SXN0 var = MethodReferenceTestKinds.In::new;
rfield@1422 148 assertEquals(var.make(inst("out")).toString(), "In(blank)");
rfield@1422 149 }
rfield@1422 150
rfield@1422 151 public void testMRUnboundInnerArg() {
rfield@1422 152 SXN1 var = MethodReferenceTestKinds.In::new;
rfield@1422 153 assertEquals(var.make(inst("out"), "name").toString(), "In(name)");
rfield@1422 154 }
rfield@1422 155 */
rfield@1422 156 public void testMRImplicitInner() {
rfield@1422 157 SN0 var = MethodReferenceTestKinds.In::new;
rfield@1422 158 assertEquals(var.make().toString(), "In(blank)");
rfield@1422 159 }
rfield@1422 160
rfield@1422 161 public void testMRImplicitInnerArg() {
rfield@1422 162 SN1 var = MethodReferenceTestKinds.In::new;
rfield@1422 163 assertEquals(var.make("name").toString(), "In(name)");
rfield@1422 164 }
rfield@1422 165
rfield@1422 166 }
rfield@1422 167
rfield@1422 168
rfield@1422 169 class MethodReferenceTestKindsBase {
rfield@1422 170 String val = "unset";
rfield@1422 171
rfield@1422 172 public String toString() {
rfield@1422 173 return getClass().getSimpleName() + "(" + val + ")";
rfield@1422 174 }
rfield@1422 175
rfield@1422 176 MethodReferenceTestKindsBase(String val) {
rfield@1422 177 this.val = val;
rfield@1422 178 }
rfield@1422 179
rfield@1422 180 MethodReferenceTestKindsBase() {
rfield@1422 181 this("blank");
rfield@1422 182 }
rfield@1422 183
rfield@1422 184 }
rfield@1422 185
rfield@1422 186 class MethodReferenceTestKindsSup extends MethodReferenceTestKindsBase {
rfield@1422 187 String instanceMethod0() { return "SIM:0-" + this; }
rfield@1422 188 String instanceMethod1(MethodReferenceTestKinds x) { return "SIM:1-" + this + x; }
rfield@1422 189
rfield@1422 190 MethodReferenceTestKindsSup(String val) {
rfield@1422 191 super(val);
rfield@1422 192 }
rfield@1422 193
rfield@1422 194 }

mercurial