jdk/test/jdk/lambda/MethodReferenceTestKinds.java
changeset 29784 b9220497eb43
parent 29783 db33e568f107
parent 29770 6415d011ad02
child 29785 da950f343762
equal deleted inserted replaced
29783:db33e568f107 29784:b9220497eb43
     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 
       
    25 import org.testng.annotations.Test;
       
    26 
       
    27 import static org.testng.Assert.assertEquals;
       
    28 
       
    29 /**
       
    30  * @author Robert Field
       
    31  */
       
    32 
       
    33 @Test
       
    34 public class MethodReferenceTestKinds extends MethodReferenceTestKindsSup {
       
    35 
       
    36     interface S0 { String get(); }
       
    37     interface S1 { String get(MethodReferenceTestKinds x); }
       
    38     interface S2 { String get(MethodReferenceTestKinds x, MethodReferenceTestKinds y); }
       
    39 
       
    40     interface SXN0 { MethodReferenceTestKindsBase make(MethodReferenceTestKinds x); }
       
    41     interface SXN1 { MethodReferenceTestKindsBase make(MethodReferenceTestKinds x, String str); }
       
    42 
       
    43     interface SN0 { MethodReferenceTestKindsBase make(); }
       
    44     interface SN1 { MethodReferenceTestKindsBase make(String x); }
       
    45 
       
    46     class In extends MethodReferenceTestKindsBase {
       
    47         In(String val) {
       
    48             this.val = val;
       
    49         }
       
    50 
       
    51         In() {
       
    52             this("blank");
       
    53         }
       
    54     }
       
    55 
       
    56     String instanceMethod0() { return "IM:0-" + this; }
       
    57     String instanceMethod1(MethodReferenceTestKinds x) { return "IM:1-" + this + x; }
       
    58 
       
    59     static String staticMethod0() { return "SM:0"; }
       
    60     static String staticMethod1(MethodReferenceTestKinds x) { return "SM:1-" + x; }
       
    61 
       
    62     MethodReferenceTestKinds(String val) {
       
    63         super(val);
       
    64     }
       
    65 
       
    66     MethodReferenceTestKinds() {
       
    67         super("blank");
       
    68     }
       
    69 
       
    70     MethodReferenceTestKinds inst(String val) {
       
    71         return new MethodReferenceTestKinds(val);
       
    72     }
       
    73 
       
    74     public void testMRBound() {
       
    75         S0 var = this::instanceMethod0;
       
    76         assertEquals(var.get(), "IM:0-MethodReferenceTestKinds(blank)");
       
    77     }
       
    78 
       
    79     public void testMRBoundArg() {
       
    80         S1 var = this::instanceMethod1;
       
    81         assertEquals(var.get(inst("arg")), "IM:1-MethodReferenceTestKinds(blank)MethodReferenceTestKinds(arg)");
       
    82     }
       
    83 
       
    84     public void testMRUnbound() {
       
    85         S1 var = MethodReferenceTestKinds::instanceMethod0;
       
    86         assertEquals(var.get(inst("rcvr")), "IM:0-MethodReferenceTestKinds(rcvr)");
       
    87     }
       
    88 
       
    89     public void testMRUnboundArg() {
       
    90         S2 var = MethodReferenceTestKinds::instanceMethod1;
       
    91         assertEquals(var.get(inst("rcvr"), inst("arg")), "IM:1-MethodReferenceTestKinds(rcvr)MethodReferenceTestKinds(arg)");
       
    92     }
       
    93 
       
    94     public void testMRSuper() {
       
    95         S0 var = super::instanceMethod0;
       
    96         assertEquals(var.get(), "SIM:0-MethodReferenceTestKinds(blank)");
       
    97     }
       
    98 
       
    99     public void testMRSuperArg() {
       
   100         S1 var = super::instanceMethod1;
       
   101         assertEquals(var.get(inst("arg")), "SIM:1-MethodReferenceTestKinds(blank)MethodReferenceTestKinds(arg)");
       
   102     }
       
   103 
       
   104     public void testMRStatic() {
       
   105         S0 var = MethodReferenceTestKinds::staticMethod0;
       
   106         assertEquals(var.get(), "SM:0");
       
   107     }
       
   108 
       
   109     public void testMRStaticArg() {
       
   110         S1 var = MethodReferenceTestKinds::staticMethod1;
       
   111         assertEquals(var.get(inst("arg")), "SM:1-MethodReferenceTestKinds(arg)");
       
   112     }
       
   113 
       
   114     public void testMRTopLevel() {
       
   115         SN0 var = MethodReferenceTestKindsBase::new;
       
   116         assertEquals(var.make().toString(), "MethodReferenceTestKindsBase(blank)");
       
   117     }
       
   118 
       
   119     public void testMRTopLevelArg() {
       
   120         SN1 var = MethodReferenceTestKindsBase::new;
       
   121         assertEquals(var.make("name").toString(), "MethodReferenceTestKindsBase(name)");
       
   122     }
       
   123 /* unbound inner case not supported anymore (dropped by EG)
       
   124     public void testMRUnboundInner() {
       
   125         SXN0 var = MethodReferenceTestKinds.In::new;
       
   126         assertEquals(var.make(inst("out")).toString(), "In(blank)");
       
   127     }
       
   128 
       
   129    public void testMRUnboundInnerArg() {
       
   130         SXN1 var = MethodReferenceTestKinds.In::new;
       
   131         assertEquals(var.make(inst("out"), "name").toString(), "In(name)");
       
   132     }
       
   133 */
       
   134     public void testMRImplicitInner() {
       
   135         SN0 var = MethodReferenceTestKinds.In::new;
       
   136         assertEquals(var.make().toString(), "In(blank)");
       
   137     }
       
   138 
       
   139     public void testMRImplicitInnerArg() {
       
   140         SN1 var = MethodReferenceTestKinds.In::new;
       
   141         assertEquals(var.make("name").toString(), "In(name)");
       
   142     }
       
   143 
       
   144 }
       
   145 
       
   146 
       
   147 class MethodReferenceTestKindsBase {
       
   148     String val = "unset";
       
   149 
       
   150     public String toString() {
       
   151         return getClass().getSimpleName() + "(" + val + ")";
       
   152     }
       
   153 
       
   154     MethodReferenceTestKindsBase(String val) {
       
   155         this.val = val;
       
   156     }
       
   157 
       
   158     MethodReferenceTestKindsBase() {
       
   159         this("blank");
       
   160     }
       
   161 
       
   162 }
       
   163 
       
   164 class MethodReferenceTestKindsSup extends MethodReferenceTestKindsBase {
       
   165     String instanceMethod0() { return "SIM:0-" + this; }
       
   166     String instanceMethod1(MethodReferenceTestKinds x) { return "SIM:1-" + this + x; }
       
   167 
       
   168     MethodReferenceTestKindsSup(String val) {
       
   169         super(val);
       
   170     }
       
   171 
       
   172 }
       
   173