Search in sources :

Example 31 with PackageExamples

use of examples.PackageExamples in project openj9 by eclipse.

the class LookupAPITests_Bind method test_Bind_Virtual_Protected_CrossPackage_Overridden_SubclassLookup.

/**
 * Negative test : Lookup.bind() test with a protected method belonging to a super-class(receiver) that is on a different package than the lookup class.
 * @throws Throwable
 */
@Test(groups = { "level.extended" })
public void test_Bind_Virtual_Protected_CrossPackage_Overridden_SubclassLookup() throws Throwable {
    boolean iaeThrown = false;
    try {
        PackageExamples g = new PackageExamples();
        MethodHandles.lookup().bind(g, "addProtected", MethodType.methodType(int.class, int.class, int.class));
    } catch (IllegalAccessException e) {
        iaeThrown = true;
    }
    AssertJUnit.assertTrue(iaeThrown);
}
Also used : PackageExamples(examples.PackageExamples) Test(org.testng.annotations.Test)

Example 32 with PackageExamples

use of examples.PackageExamples in project openj9 by eclipse.

the class LookupAPITests_Bind method test_Bind_Virtual_Private_CrossPackage.

/*private methods ( cross package )*/
/**
 * Lookup.bind() test with a private method belonging to a different class than the lookup class
 * @throws Throwable
 */
@Test(groups = { "level.extended" })
public void test_Bind_Virtual_Private_CrossPackage() throws Throwable {
    boolean illegalAccessExceptionThrown = false;
    try {
        PackageExamples g = new PackageExamples();
        MethodHandles.lookup().bind(g, "addPrivate", MethodType.methodType(int.class, int.class, int.class));
    } catch (IllegalAccessException e) {
        illegalAccessExceptionThrown = true;
    }
    AssertJUnit.assertTrue(illegalAccessExceptionThrown);
}
Also used : PackageExamples(examples.PackageExamples) Test(org.testng.annotations.Test)

Example 33 with PackageExamples

use of examples.PackageExamples in project openj9 by eclipse.

the class Find_InvokeTracker method test_FindVirtual_Public_CrossPackage_SubclassLookup.

/**
 * findVirtual test with a public method in a super-class on a different package than the lookup ( sub ) class
 * @throws Throwable
 */
@Test(groups = { "level.extended" })
public void test_FindVirtual_Public_CrossPackage_SubclassLookup() throws Throwable {
    MethodHandle example = CrossPackageExampleSubclass.getLookup().findVirtual(PackageExamples.class, "addPublic", MethodType.methodType(int.class, int.class, int.class));
    PackageExamples g = new PackageExamples();
    int s = (int) example.invokeExact(g, 1, 2);
    AssertJUnit.assertEquals(3, s);
}
Also used : PackageExamples(examples.PackageExamples) MethodHandle(java.lang.invoke.MethodHandle) Test(org.testng.annotations.Test)

Example 34 with PackageExamples

use of examples.PackageExamples in project openj9 by eclipse.

the class MethodHandleProxiesTest method test_wrapperInstanceType_VirtualMethod.

/**
 ********************************
 * Tests for wrapperInstanceType
 * ******************************
 */
/**
 * Tests wrapperInstanceType using public virtual wrappers and single method interfaces from same package and cross-package.
 * @throws Throwable
 */
@Test(groups = { "level.extended" })
public void test_wrapperInstanceType_VirtualMethod() throws Throwable {
    // same package test
    MethodHandle mh = MethodHandles.lookup().findVirtual(SamePackageExample.class, "addPublic", MethodType.methodType(int.class, int.class, int.class));
    mh = mh.bindTo(new SamePackageExample());
    SamePackageSingleMethodInterfaceExample interfaceInstance = MethodHandleProxies.asInterfaceInstance(SamePackageSingleMethodInterfaceExample.class, mh);
    Class<?> retrievedTargetType = MethodHandleProxies.wrapperInstanceType(interfaceInstance);
    AssertJUnit.assertEquals(SamePackageSingleMethodInterfaceExample.class, retrievedTargetType);
    // cross package test
    MethodHandle mh2 = MethodHandles.lookup().findVirtual(PackageExamples.class, "addPublic", MethodType.methodType(int.class, int.class, int.class));
    mh2 = mh2.bindTo(new PackageExamples());
    CrossPackageSingleMethodInterfaceExample interfaceInstanceCrossPackage = MethodHandleProxies.asInterfaceInstance(CrossPackageSingleMethodInterfaceExample.class, mh2);
    Class<?> retrievedTargetType2 = MethodHandleProxies.wrapperInstanceType(interfaceInstanceCrossPackage);
    AssertJUnit.assertEquals(CrossPackageSingleMethodInterfaceExample.class, retrievedTargetType2);
}
Also used : CrossPackageSingleMethodInterfaceExample(examples.CrossPackageSingleMethodInterfaceExample) PackageExamples(examples.PackageExamples) MethodHandle(java.lang.invoke.MethodHandle) Test(org.testng.annotations.Test)

Example 35 with PackageExamples

use of examples.PackageExamples in project openj9 by eclipse.

the class MethodHandleProxiesTest method test_wrapperInstanceType_InnerClass.

/**
 * Tests wrapperInstanceType using inner-class wrappers and single method interfaces from same package and cross-package.
 * @throws Throwable
 */
@Test(groups = { "level.extended" })
public void test_wrapperInstanceType_InnerClass() throws Throwable {
    // same package test
    MethodHandle mh = MethodHandles.lookup().findVirtual(SamePackageExample.SamePackageInnerClass.class, "addPublicInner", MethodType.methodType(int.class, int.class, int.class));
    SamePackageExample x = new SamePackageExample();
    SamePackageExample.SamePackageInnerClass i = x.new SamePackageInnerClass();
    mh = mh.bindTo(i);
    SamePackageSingleMethodInterfaceExample interfaceInstance = MethodHandleProxies.asInterfaceInstance(SamePackageSingleMethodInterfaceExample.class, mh);
    Class<?> retrievedTargetType = MethodHandleProxies.wrapperInstanceType(interfaceInstance);
    AssertJUnit.assertEquals(SamePackageSingleMethodInterfaceExample.class, retrievedTargetType);
    // cross package test
    MethodHandle mh2 = MethodHandles.lookup().findVirtual(PackageExamples.CrossPackageInnerClass.class, "addPublicInner", MethodType.methodType(int.class, int.class, int.class));
    PackageExamples y = new PackageExamples();
    mh2 = mh2.bindTo(y.new CrossPackageInnerClass());
    CrossPackageSingleMethodInterfaceExample interfaceInstanceCrossPackage = MethodHandleProxies.asInterfaceInstance(CrossPackageSingleMethodInterfaceExample.class, mh2);
    Class<?> retrievedTargetType2 = MethodHandleProxies.wrapperInstanceType(interfaceInstanceCrossPackage);
    AssertJUnit.assertEquals(CrossPackageSingleMethodInterfaceExample.class, retrievedTargetType2);
}
Also used : CrossPackageSingleMethodInterfaceExample(examples.CrossPackageSingleMethodInterfaceExample) PackageExamples(examples.PackageExamples) MethodHandle(java.lang.invoke.MethodHandle) Test(org.testng.annotations.Test)

Aggregations

PackageExamples (examples.PackageExamples)46 Test (org.testng.annotations.Test)46 MethodHandle (java.lang.invoke.MethodHandle)41 CrossPackageSingleMethodInterfaceExample (examples.CrossPackageSingleMethodInterfaceExample)8 Lookup (java.lang.invoke.MethodHandles.Lookup)7 Method (java.lang.reflect.Method)6 Constructor (java.lang.reflect.Constructor)2 Field (java.lang.reflect.Field)2 SamePackageInnerClass (com.ibm.j9.jsr292.SamePackageExample.SamePackageInnerClass)1 CrossPackageInnerClass (examples.PackageExamples.CrossPackageInnerClass)1 ArrayList (java.util.ArrayList)1