Search in sources :

Example 16 with PackageExamples

use of examples.PackageExamples in project openj9 by eclipse.

the class HelperConstructorClass method test_asVarargsCollector_CrossPackage_Virtual_WrongType.

/**
 * Negative test : asVarargsCollector test using wrong type and a virtual method belonging to a class in a different package
 * @throws Throwable
 */
@Test(expectedExceptions = IllegalArgumentException.class, groups = { "level.extended" })
public void test_asVarargsCollector_CrossPackage_Virtual_WrongType() throws Throwable {
    MethodHandle mh = MethodHandles.lookup().findVirtual(PackageExamples.class, "getLength", MethodType.methodType(int.class, String[].class));
    PackageExamples g = new PackageExamples();
    mh = mh.bindTo(g);
    mh = mh.asVarargsCollector(int[].class);
    Assert.fail("The test case failed to throw an IllegalArgumentException in the case of the wrong method type");
}
Also used : PackageExamples(examples.PackageExamples) MethodHandle(java.lang.invoke.MethodHandle) Test(org.testng.annotations.Test)

Example 17 with PackageExamples

use of examples.PackageExamples in project openj9 by eclipse.

the class MethodHandleProxiesTest method test_isWrapperInstance_VirtualMethod.

/**
 ****************************
 *Tests for isWrapperInstance
 *****************************
 */
/**
 * Tests isWrapperInstance using a public single method interface from the same package and followed by one from a different package.
 * Wrapper is a public virtual method defined in an inner class from same package and cross-package respectively.
 * @throws Throwable
 */
@Test(groups = { "level.extended" })
public void test_isWrapperInstance_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);
    AssertJUnit.assertTrue(MethodHandleProxies.isWrapperInstance(interfaceInstance));
    // 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);
    AssertJUnit.assertTrue(MethodHandleProxies.isWrapperInstance(interfaceInstanceCrossPackage));
}
Also used : CrossPackageSingleMethodInterfaceExample(examples.CrossPackageSingleMethodInterfaceExample) PackageExamples(examples.PackageExamples) MethodHandle(java.lang.invoke.MethodHandle) Test(org.testng.annotations.Test)

Example 18 with PackageExamples

use of examples.PackageExamples in project openj9 by eclipse.

the class MethodHandleProxiesTest method test_wrapperInstanceTarget_VirtualMethod.

/**
 **************************************
 * Tests for wrapperInstanceTarget
 * ************************************
 */
/**
 * Tests wrapperInstanceTarget using single method interface and wrapper types from same package and cross-package
 * @throws Throwable
 */
@Test(groups = { "level.extended" })
public void test_wrapperInstanceTarget_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);
    MethodHandle retrievedTarget = MethodHandleProxies.wrapperInstanceTarget(interfaceInstance);
    AssertJUnit.assertEquals(4, (int) retrievedTarget.invokeExact(1, 3));
    // 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);
    MethodHandle retrievedTarget2 = MethodHandleProxies.wrapperInstanceTarget(interfaceInstanceCrossPackage);
    AssertJUnit.assertEquals(4, retrievedTarget2.invoke(1, 3));
}
Also used : CrossPackageSingleMethodInterfaceExample(examples.CrossPackageSingleMethodInterfaceExample) PackageExamples(examples.PackageExamples) MethodHandle(java.lang.invoke.MethodHandle) Test(org.testng.annotations.Test)

Example 19 with PackageExamples

use of examples.PackageExamples in project openj9 by eclipse.

the class HelperConstructorClass method test_asCollector_CrossPackage_Virtual_WrongType_nonArrayTarget.

/**
 * Negative test :  asCollector using wrong type on a MH that has no array argument , obtained through a findVirtual call to a class in a different package
 * @throws Throwable
 */
@Test(expectedExceptions = IllegalArgumentException.class, groups = { "level.extended" })
public void test_asCollector_CrossPackage_Virtual_WrongType_nonArrayTarget() throws Throwable {
    MethodHandle mh = MethodHandles.lookup().findVirtual(PackageExamples.class, "addPublic", MethodType.methodType(int.class, int.class, int.class));
    PackageExamples g = new PackageExamples();
    mh = mh.bindTo(g);
    mh = mh.asCollector(int[].class, 2);
    Assert.fail("The test case failed to throw an IllegalArgumentException in the case of the wrong method type");
}
Also used : PackageExamples(examples.PackageExamples) MethodHandle(java.lang.invoke.MethodHandle) Test(org.testng.annotations.Test)

Example 20 with PackageExamples

use of examples.PackageExamples in project openj9 by eclipse.

the class Unreflect_InvokeTracker method test_Unreflect_Public_CrossPackage_Overridden.

/**
 * Test to unreflect a public overridden method belonging to a different package than the Lookup class.
 * @throws Throwable
 */
@Test(groups = { "level.extended" })
@SuppressWarnings({ "rawtypes", "unchecked" })
public void test_Unreflect_Public_CrossPackage_Overridden() throws Throwable {
    Class clazz = Class.forName("com.ibm.j9.jsr292.CrossPackageExampleSubclass");
    Method m = clazz.getDeclaredMethod("addPublic", int.class, int.class);
    MethodHandle mh = MethodHandles.lookup().unreflect(m);
    PackageExamples g = new CrossPackageExampleSubclass();
    int out = (int) mh.invoke(g, 1, 2);
    AssertJUnit.assertEquals(5, out);
}
Also used : Method(java.lang.reflect.Method) 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