| /* | |
| * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. | |
| * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| * | |
| * This code is free software; you can redistribute it and/or modify it | |
| * under the terms of the GNU General Public License version 2 only, as | |
| * published by the Free Software Foundation. | |
| * | |
| * This code is distributed in the hope that it will be useful, but WITHOUT | |
| * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| * version 2 for more details (a copy is included in the LICENSE file that | |
| * accompanied this code). | |
| * | |
| * You should have received a copy of the GNU General Public License version | |
| * 2 along with this work; if not, write to the Free Software Foundation, | |
| * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| * | |
| * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| * or visit www.oracle.com if you need additional information or have any | |
| * questions. | |
| */ | |
| /* | |
| * Test Data used for testing default/static method | |
| * | |
| * @author Yong Lu | |
| */ | |
| import java.util.Arrays; | |
| import java.util.List; | |
| import org.testng.annotations.DataProvider; | |
| import org.testng.collections.Lists; | |
| import static helper.Mod.*; | |
| import static helper.Declared.*; | |
| import helper.Mod; | |
| import helper.Declared; | |
| import java.lang.annotation.Repeatable; | |
| import java.lang.annotation.Retention; | |
| import java.lang.annotation.RetentionPolicy; | |
| @MethodDesc(name = "defaultMethod", retval = "TestIF1.defaultMethod", mod = DEFAULT, declared = YES) | |
| interface TestIF1 { | |
| default String defaultMethod() { | |
| return "TestIF1.defaultMethod"; | |
| } | |
| } | |
| @MethodDesc(name = "defaultMethod", retval = "TestIF1.defaultMethod", mod = DEFAULT, declared = NO) | |
| class TestClass1 implements TestIF1 { | |
| } | |
| @MethodDesc(name = "staticMethod", retval = "TestIF2.staticMethod", mod = STATIC, declared = YES) | |
| interface TestIF2 { | |
| static String staticMethod() { | |
| return "TestIF2.staticMethod"; | |
| } | |
| } | |
| @MethodDesc(name = "method", retval = "TestIF2.staticMethod", mod = REGULAR, declared = YES) | |
| class TestClass2 implements TestIF2 { | |
| public String method() { | |
| return TestIF2.staticMethod(); | |
| } | |
| } | |
| @MethodDesc(name = "defaultMethod", retval = "TestIF3.defaultMethod", mod = DEFAULT, declared = YES) | |
| @MethodDesc(name = "method", retval = "", mod = ABSTRACT, declared = YES) | |
| interface TestIF3 { | |
| String method(); | |
| default String defaultMethod() { | |
| return "TestIF3.defaultMethod"; | |
| } | |
| } | |
| @MethodDesc(name = "defaultMethod", retval = "TestIF3.defaultMethod", mod = DEFAULT, declared = NO) | |
| @MethodDesc(name = "method", retval = "TestClass3.method", mod = REGULAR, declared = YES) | |
| class TestClass3 implements TestIF3 { | |
| public String method() { | |
| return "TestClass3.method"; | |
| } | |
| } | |
| @MethodDesc(name = "staticMethod", retval = "TestIF4.staticMethod", mod = STATIC, declared = YES) | |
| @MethodDesc(name = "method", retval = "", mod = ABSTRACT, declared = YES) | |
| interface TestIF4 { | |
| String method(); | |
| static String staticMethod() { | |
| return "TestIF4.staticMethod"; | |
| } | |
| } | |
| @MethodDesc(name = "method", retval = "TestClass4.method", mod = REGULAR, declared = YES) | |
| class TestClass4 implements TestIF4 { | |
| public String method() { | |
| return "TestClass4.method"; | |
| } | |
| } | |
| @MethodDesc(name = "defaultMethod", retval = "TestIF5.defaultMethod", mod = DEFAULT, declared = YES) | |
| @MethodDesc(name = "staticMethod", retval = "TestIF5.staticMethod", mod = STATIC, declared = YES) | |
| interface TestIF5 { | |
| default String defaultMethod() { | |
| return "TestIF5.defaultMethod"; | |
| } | |
| static String staticMethod() { | |
| return "TestIF5.staticMethod"; | |
| } | |
| } | |
| @MethodDesc(name = "defaultMethod", retval = "TestIF5.defaultMethod", mod = DEFAULT, declared = NO) | |
| class TestClass5 implements TestIF5 { | |
| } | |
| @MethodDesc(name = "defaultMethod", retval = "TestIF6.defaultMethod", mod = DEFAULT, declared = YES) | |
| @MethodDesc(name = "staticMethod", retval = "TestIF6.staticMethod", mod = STATIC, declared = YES) | |
| @MethodDesc(name = "method", retval = "", mod = ABSTRACT, declared = YES) | |
| interface TestIF6 { | |
| String method(); | |
| default String defaultMethod() { | |
| return "TestIF6.defaultMethod"; | |
| } | |
| static String staticMethod() { | |
| return "TestIF6.staticMethod"; | |
| } | |
| } | |
| @MethodDesc(name = "defaultMethod", retval = "TestIF6.defaultMethod", mod = DEFAULT, declared = NO) | |
| @MethodDesc(name = "method", retval = "TestClass6.method", mod = REGULAR, declared = YES) | |
| class TestClass6 implements TestIF6 { | |
| public String method() { | |
| return "TestClass6.method"; | |
| } | |
| } | |
| @MethodDesc(name = "defaultMethod", retval = "TestIF7.TestClass7", mod = DEFAULT, declared = YES) | |
| interface TestIF7<T> { | |
| default T defaultMethod(T t) { | |
| return t; | |
| } | |
| } | |
| @MethodDesc(name = "defaultMethod", retval = "TestIF7.TestClass7", mod = DEFAULT, declared = NO) | |
| class TestClass7<T> implements TestIF7<T> { | |
| } | |
| @MethodDesc(name = "defaultMethod", retval = "TestIF8.TestClass8", mod = DEFAULT, declared = YES) | |
| interface TestIF8<E> { | |
| default <E> E defaultMethod(E e) { | |
| return e; | |
| } | |
| } | |
| @MethodDesc(name = "defaultMethod", retval = "TestIF8.TestClass8", mod = DEFAULT, declared = NO) | |
| class TestClass8<T> implements TestIF8<T> { | |
| } | |
| @MethodDesc(name = "defaultMethod", retval = "TestIF9.defaultMethod", mod = DEFAULT, declared = YES) | |
| interface TestIF9 extends TestIF1 { | |
| default String defaultMethod() { | |
| return "TestIF9.defaultMethod"; | |
| } | |
| } | |
| @MethodDesc(name = "defaultMethod", retval = "TestIF9.defaultMethod", mod = DEFAULT, declared = NO) | |
| class TestClass9 implements TestIF9 { | |
| } | |
| @MethodDesc(name = "defaultMethod", retval = "TestIF9.defaultMethod", mod = DEFAULT, declared = NO) | |
| @MethodDesc(name = "method", retval = "TestIF9.defaultMethod", mod = REGULAR, declared = YES) | |
| class TestClass91 implements TestIF9, TestIF1 { | |
| public String method() { | |
| return defaultMethod(); | |
| } | |
| } | |
| @MethodDesc(name = "staticMethod", retval = "TestIF10.staticMethod", mod = STATIC, declared = YES) | |
| interface TestIF10 extends TestIF2 { | |
| static String staticMethod() { | |
| return "TestIF10.staticMethod"; | |
| } | |
| } | |
| @MethodDesc(name = "staticMethod", retval = "TestIF11.staticMethod", mod = STATIC, declared = YES) | |
| @MethodDesc(name = "defaultMethod", retval = "TestIF1.defaultMethod", mod = DEFAULT, declared = NO) | |
| interface TestIF11 extends TestIF1 { | |
| static String staticMethod() { | |
| return "TestIF11.staticMethod"; | |
| } | |
| } | |
| @MethodDesc(name = "defaultMethod", retval = "TestIF1.defaultMethod", mod = DEFAULT, declared = NO) | |
| class TestClass11 implements TestIF11 { | |
| } | |
| @MethodDesc(name = "defaultMethod", retval = "TestIF12.defaultMethod", mod = DEFAULT, declared = YES) | |
| interface TestIF12 extends TestIF2 { | |
| default String defaultMethod() { | |
| return "TestIF12.defaultMethod"; | |
| } | |
| } | |
| @MethodDesc(name = "defaultMethod", retval = "TestIF12.defaultMethod", mod = DEFAULT, declared = NO) | |
| class TestClass12 implements TestIF12 { | |
| } | |
| //Diamond Case | |
| @MethodDesc(name = "defaultMethod", retval = "TestIF1.defaultMethod", mod = DEFAULT, declared = NO) | |
| interface TestIF1A extends TestIF1 { | |
| } | |
| @MethodDesc(name = "defaultMethod", retval = "TestIF1.defaultMethod", mod = DEFAULT, declared = NO) | |
| interface TestIF1B extends TestIF1 { | |
| } | |
| @MethodDesc(name = "defaultMethod", retval = "TestIF1.defaultMethod", mod = DEFAULT, declared = NO) | |
| class TestClass13 implements TestIF1A, TestIF1B { | |
| } | |
| //Diamond Override Case | |
| @MethodDesc(name = "defaultMethod", retval = "TestIF1C.defaultMethod", mod = DEFAULT, declared = YES) | |
| interface TestIF1C extends TestIF1 { | |
| default String defaultMethod() { | |
| return "TestIF1C.defaultMethod"; | |
| } | |
| } | |
| @MethodDesc(name = "defaultMethod", retval = "TestIF1D.defaultMethod", mod = DEFAULT, declared = YES) | |
| interface TestIF1D extends TestIF1 { | |
| default String defaultMethod() { | |
| return "TestIF1D.defaultMethod"; | |
| } | |
| } | |
| @MethodDesc(name = "defaultMethod", retval = "TestClass14.defaultMethod", mod = REGULAR, declared = YES) | |
| class TestClass14 implements TestIF1C, TestIF1D { | |
| public String defaultMethod() { | |
| return "TestClass14.defaultMethod"; | |
| } | |
| } | |
| @MethodDesc(name = "defaultMethod", retval = "", mod = ABSTRACT, declared = YES) | |
| interface TestIF15 extends TestIF1 { | |
| String defaultMethod(); | |
| } | |
| @MethodDesc(name = "defaultMethod", retval = "TestClass15.defaultMethod", mod = REGULAR, declared = YES) | |
| class TestClass15 implements TestIF15 { | |
| public String defaultMethod() { | |
| return "TestClass15.defaultMethod"; | |
| } | |
| } | |
| interface FuncInterface<T> { | |
| String test(T t); | |
| } | |
| @MethodDesc(name = "defaultMethod", retval = "TestIF16.defaultMethod", mod = DEFAULT, declared = YES) | |
| interface TestIF16 { | |
| default String defaultMethod() { | |
| FuncInterface<Object> fi = o -> o.toString(); | |
| Object o = "TestIF16.defaultMethod"; | |
| return fi.test(o); | |
| } | |
| } | |
| @MethodDesc(name = "defaultMethod", retval = "TestIF16.defaultMethod", mod = DEFAULT, declared = NO) | |
| class TestClass16 implements TestIF16 { | |
| } | |
| @MethodDesc(name = "defaultMethod", retval = "TestIF17.defaultMethod", mod = DEFAULT, declared = YES) | |
| @MethodDesc(name = "staticMethod", retval = "TestIF17.staticMethod", mod = STATIC, declared = YES) | |
| interface TestIF17 { | |
| default String defaultMethod() { | |
| return staticMethod().replace("staticMethod", "defaultMethod"); | |
| } | |
| public static String staticMethod() { | |
| return "TestIF17.staticMethod"; | |
| } | |
| } | |
| @MethodDesc(name = "defaultMethod", retval = "TestIF17.defaultMethod", mod = DEFAULT, declared = NO) | |
| class TestClass17 implements TestIF17 { | |
| } | |
| @MethodDesc(name = "defaultMethod", retval = "TestIF17.defaultMethod", mod = DEFAULT, declared = NO) | |
| class TestClass18 extends TestClass17 { | |
| } | |
| @Retention(RetentionPolicy.RUNTIME) | |
| @Repeatable(MethodDescs.class) | |
| @interface MethodDesc { | |
| String name(); | |
| String retval(); | |
| Mod mod(); | |
| Declared declared(); | |
| } | |
| @Retention(RetentionPolicy.RUNTIME) | |
| @interface MethodDescs { | |
| MethodDesc[] value(); | |
| } | |
| //Diamond Case for static method | |
| @MethodDesc(name = "staticMethod", retval = "TestIF2A.staticMethod", mod = STATIC, declared = YES) | |
| interface TestIF2A extends TestIF2 { | |
| static String staticMethod() { | |
| return "TestIF2A.staticMethod"; | |
| } | |
| } | |
| @MethodDesc(name = "method", retval = "", mod = ABSTRACT, declared = YES) | |
| interface TestIF2B extends TestIF2 { | |
| String method(); | |
| } | |
| @MethodDesc(name = "method", retval = "", mod = ABSTRACT, declared = YES) | |
| interface TestIF18 extends TestIF10, TestIF2A { | |
| String method(); | |
| } | |
| @MethodDesc(name = "method", retval = "", mod = ABSTRACT, declared = NO) | |
| @MethodDesc(name = "defaultMethod", retval = "TestIF12.defaultMethod", mod = DEFAULT, declared = NO) | |
| interface TestIF19 extends TestIF12, TestIF2B { | |
| } | |
| @MethodDesc(name = "staticMethod", retval = "TestIF20.staticMethod", mod = STATIC, declared = YES) | |
| @MethodDesc(name = "defaultMethod", retval = "TestIF12.defaultMethod", mod = DEFAULT, declared = NO) | |
| interface TestIF20 extends TestIF12, TestIF2A { | |
| static String staticMethod() { | |
| return "TestIF20.staticMethod"; | |
| } | |
| } | |
| @MethodDesc(name = "method", retval = "", mod = ABSTRACT, declared = NO) | |
| interface TestIF21 extends TestIF2A, TestIF2B { | |
| } | |
| public class DefaultStaticTestData { | |
| /** | |
| * Test data for DefaultStaticInvokeTest The format of inner array is: First | |
| * data is the name of the class under test Second data used in test as the | |
| * arguments used for the method call. | |
| */ | |
| @DataProvider | |
| static Object[][] testClasses() { | |
| return new Object[][]{ | |
| {"TestClass1", null}, | |
| {"TestClass2", null}, | |
| {"TestClass3", null}, | |
| {"TestClass4", null}, | |
| {"TestClass5", null}, | |
| {"TestClass6", null}, | |
| {"TestClass7", "TestIF7.TestClass7"}, | |
| {"TestClass8", "TestIF8.TestClass8"}, | |
| {"TestClass9", null}, | |
| {"TestClass91", null}, | |
| {"TestClass11", null}, | |
| {"TestClass12", null}, | |
| {"TestClass13", null}, | |
| {"TestClass14", null}, | |
| {"TestClass15", null}, | |
| {"TestClass16", null}, | |
| {"TestClass17", null}, | |
| {"TestClass18", null}, | |
| }; | |
| } | |
| /** | |
| * Test data for DefaultStaticInvokeTest The format of inner array is: First | |
| * data is the name of the interface under test Second data used in test as | |
| * the arguments used for the method call. | |
| */ | |
| @DataProvider | |
| static Object[][] testInterfaces() { | |
| return new Object[][]{ | |
| {"TestIF1", null}, | |
| {"TestIF2", null}, | |
| {"TestIF2A", null}, | |
| {"TestIF2B", null}, | |
| {"TestIF3", null}, | |
| {"TestIF4", null}, | |
| {"TestIF5", null}, | |
| {"TestIF6", null}, | |
| {"TestIF7", "TestIF7.TestClass7"}, | |
| {"TestIF8", "TestIF8.TestClass8"}, | |
| {"TestIF9", null}, | |
| {"TestIF10", null}, | |
| {"TestIF11", null}, | |
| {"TestIF12", null}, | |
| {"TestIF1A", null}, | |
| {"TestIF1B", null}, | |
| {"TestIF1C", null}, | |
| {"TestIF1D", null}, | |
| {"TestIF15", null}, | |
| {"TestIF16", null}, | |
| {"TestIF17", null}, | |
| {"TestIF18", null}, | |
| {"TestIF19", null}, | |
| {"TestIF20", null}, | |
| {"TestIF21", null}, | |
| }; | |
| } | |
| @DataProvider | |
| static Object[][] testCasesAll() { | |
| List<Object[]> result = Lists.newArrayList(); | |
| result.addAll(Arrays.asList(testClasses())); | |
| result.addAll(Arrays.asList(testInterfaces())); | |
| return result.toArray(new Object[result.size()][]); | |
| } | |
| } |