rfield@1422: /* katleman@1448: * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. rfield@1422: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. rfield@1422: * rfield@1422: * This code is free software; you can redistribute it and/or modify it rfield@1422: * under the terms of the GNU General Public License version 2 only, as rfield@1422: * published by the Free Software Foundation. Oracle designates this rfield@1422: * particular file as subject to the "Classpath" exception as provided rfield@1422: * by Oracle in the LICENSE file that accompanied this code. rfield@1422: * rfield@1422: * This code is distributed in the hope that it will be useful, but WITHOUT rfield@1422: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or rfield@1422: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License rfield@1422: * version 2 for more details (a copy is included in the LICENSE file that rfield@1422: * accompanied this code). rfield@1422: * rfield@1422: * You should have received a copy of the GNU General Public License version rfield@1422: * 2 along with this work; if not, write to the Free Software Foundation, rfield@1422: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. rfield@1422: * rfield@1422: * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA rfield@1422: * or visit www.oracle.com if you need additional information or have any rfield@1422: * questions. rfield@1422: */ rfield@1422: rfield@1422: /** rfield@1422: * @test rfield@1422: * @bug 8003639 rfield@1422: * @summary convert lambda testng tests to jtreg and add them rfield@1422: * @run testng MethodReferenceTestKinds rfield@1422: */ rfield@1422: rfield@1422: import org.testng.annotations.Test; rfield@1422: rfield@1422: import static org.testng.Assert.assertEquals; rfield@1422: rfield@1422: /** rfield@1422: * @author Robert Field rfield@1422: */ rfield@1422: rfield@1422: @Test rfield@1422: public class MethodReferenceTestKinds extends MethodReferenceTestKindsSup { rfield@1422: rfield@1422: interface S0 { String get(); } rfield@1422: interface S1 { String get(MethodReferenceTestKinds x); } rfield@1422: interface S2 { String get(MethodReferenceTestKinds x, MethodReferenceTestKinds y); } rfield@1422: rfield@1422: interface SXN0 { MethodReferenceTestKindsBase make(MethodReferenceTestKinds x); } rfield@1422: interface SXN1 { MethodReferenceTestKindsBase make(MethodReferenceTestKinds x, String str); } rfield@1422: rfield@1422: interface SN0 { MethodReferenceTestKindsBase make(); } rfield@1422: interface SN1 { MethodReferenceTestKindsBase make(String x); } rfield@1422: rfield@1422: class In extends MethodReferenceTestKindsBase { rfield@1422: In(String val) { rfield@1422: this.val = val; rfield@1422: } rfield@1422: rfield@1422: In() { rfield@1422: this("blank"); rfield@1422: } rfield@1422: } rfield@1422: rfield@1422: String instanceMethod0() { return "IM:0-" + this; } rfield@1422: String instanceMethod1(MethodReferenceTestKinds x) { return "IM:1-" + this + x; } rfield@1422: rfield@1422: static String staticMethod0() { return "SM:0"; } rfield@1422: static String staticMethod1(MethodReferenceTestKinds x) { return "SM:1-" + x; } rfield@1422: rfield@1422: MethodReferenceTestKinds(String val) { rfield@1422: super(val); rfield@1422: } rfield@1422: rfield@1422: MethodReferenceTestKinds() { rfield@1422: super("blank"); rfield@1422: } rfield@1422: rfield@1422: MethodReferenceTestKinds inst(String val) { rfield@1422: return new MethodReferenceTestKinds(val); rfield@1422: } rfield@1422: rfield@1422: public void testMRBound() { rfield@1422: S0 var = this::instanceMethod0; rfield@1422: assertEquals(var.get(), "IM:0-MethodReferenceTestKinds(blank)"); rfield@1422: } rfield@1422: rfield@1422: public void testMRBoundArg() { rfield@1422: S1 var = this::instanceMethod1; rfield@1422: assertEquals(var.get(inst("arg")), "IM:1-MethodReferenceTestKinds(blank)MethodReferenceTestKinds(arg)"); rfield@1422: } rfield@1422: rfield@1422: public void testMRUnbound() { rfield@1422: S1 var = MethodReferenceTestKinds::instanceMethod0; rfield@1422: assertEquals(var.get(inst("rcvr")), "IM:0-MethodReferenceTestKinds(rcvr)"); rfield@1422: } rfield@1422: rfield@1422: public void testMRUnboundArg() { rfield@1422: S2 var = MethodReferenceTestKinds::instanceMethod1; rfield@1422: assertEquals(var.get(inst("rcvr"), inst("arg")), "IM:1-MethodReferenceTestKinds(rcvr)MethodReferenceTestKinds(arg)"); rfield@1422: } rfield@1422: rfield@1422: public void testMRSuper() { rfield@1422: S0 var = super::instanceMethod0; rfield@1422: assertEquals(var.get(), "SIM:0-MethodReferenceTestKinds(blank)"); rfield@1422: } rfield@1422: rfield@1422: public void testMRSuperArg() { rfield@1422: S1 var = super::instanceMethod1; rfield@1422: assertEquals(var.get(inst("arg")), "SIM:1-MethodReferenceTestKinds(blank)MethodReferenceTestKinds(arg)"); rfield@1422: } rfield@1422: rfield@1422: public void testMRStatic() { rfield@1422: S0 var = MethodReferenceTestKinds::staticMethod0; rfield@1422: assertEquals(var.get(), "SM:0"); rfield@1422: } rfield@1422: rfield@1422: public void testMRStaticArg() { rfield@1422: S1 var = MethodReferenceTestKinds::staticMethod1; rfield@1422: assertEquals(var.get(inst("arg")), "SM:1-MethodReferenceTestKinds(arg)"); rfield@1422: } rfield@1422: rfield@1422: public void testMRTopLevel() { rfield@1422: SN0 var = MethodReferenceTestKindsBase::new; rfield@1422: assertEquals(var.make().toString(), "MethodReferenceTestKindsBase(blank)"); rfield@1422: } rfield@1422: rfield@1422: public void testMRTopLevelArg() { rfield@1422: SN1 var = MethodReferenceTestKindsBase::new; rfield@1422: assertEquals(var.make("name").toString(), "MethodReferenceTestKindsBase(name)"); rfield@1422: } rfield@1422: rfield@1422: public void testMRImplicitInner() { rfield@1422: SN0 var = MethodReferenceTestKinds.In::new; rfield@1422: assertEquals(var.make().toString(), "In(blank)"); rfield@1422: } rfield@1422: rfield@1422: public void testMRImplicitInnerArg() { rfield@1422: SN1 var = MethodReferenceTestKinds.In::new; rfield@1422: assertEquals(var.make("name").toString(), "In(name)"); rfield@1422: } rfield@1422: rfield@1422: } rfield@1422: rfield@1422: rfield@1422: class MethodReferenceTestKindsBase { rfield@1422: String val = "unset"; rfield@1422: rfield@1422: public String toString() { rfield@1422: return getClass().getSimpleName() + "(" + val + ")"; rfield@1422: } rfield@1422: rfield@1422: MethodReferenceTestKindsBase(String val) { rfield@1422: this.val = val; rfield@1422: } rfield@1422: rfield@1422: MethodReferenceTestKindsBase() { rfield@1422: this("blank"); rfield@1422: } rfield@1422: rfield@1422: } rfield@1422: rfield@1422: class MethodReferenceTestKindsSup extends MethodReferenceTestKindsBase { rfield@1422: String instanceMethod0() { return "SIM:0-" + this; } rfield@1422: String instanceMethod1(MethodReferenceTestKinds x) { return "SIM:1-" + this + x; } rfield@1422: rfield@1422: MethodReferenceTestKindsSup(String val) { rfield@1422: super(val); rfield@1422: } rfield@1422: rfield@1422: }