| /* |
| * 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()][]); |
| } |
| } |