HotSpotConstantReflectionProviderTest.java revision 12651:6ef01bd40ce2
1238104Sdes/*
2238104Sdes * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
3238104Sdes * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4238104Sdes *
5238104Sdes * This code is free software; you can redistribute it and/or modify it
6238104Sdes * under the terms of the GNU General Public License version 2 only, as
7238104Sdes * published by the Free Software Foundation.
8238104Sdes *
9238104Sdes * This code is distributed in the hope that it will be useful, but WITHOUT
10238104Sdes * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11238104Sdes * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12238104Sdes * version 2 for more details (a copy is included in the LICENSE file that
13238104Sdes * accompanied this code).
14238104Sdes *
15238104Sdes * You should have received a copy of the GNU General Public License version
16238104Sdes * 2 along with this work; if not, write to the Free Software Foundation,
17238104Sdes * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18238104Sdes *
19238104Sdes * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20238104Sdes * or visit www.oracle.com if you need additional information or have any
21238104Sdes * questions.
22238104Sdes */
23238104Sdes
24238104Sdes/*
25238104Sdes * @test jdk.vm.ci.hotspot.test.HotSpotConstantReflectionProviderTest
26238104Sdes * @requires vm.jvmci
27238104Sdes * @modules jdk.internal.vm.ci/jdk.vm.ci.runtime
28238104Sdes *          jdk.internal.vm.ci/jdk.vm.ci.meta
29238104Sdes *          jdk.internal.vm.ci/jdk.vm.ci.hotspot
30238104Sdes *          java.base/jdk.internal.vm.annotation
31238104Sdes *          java.base/jdk.internal.misc
32238104Sdes * @library /test/lib /compiler/jvmci/jdk.vm.ci.hotspot.test/src
33238104Sdes * @build jdk.vm.ci.hotspot.test.DummyClass
34238104Sdes * @run driver ClassFileInstaller jdk.vm.ci.hotspot.test.DummyClass
35246827Sdes * @run testng/othervm/timeout=300 -Xbootclasspath/a:.
36238104Sdes *      -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI
37238104Sdes *       jdk.vm.ci.hotspot.test.HotSpotConstantReflectionProviderTest
38238104Sdes */
39238104Sdes
40238104Sdespackage jdk.vm.ci.hotspot.test;
41238104Sdes
42238104Sdesimport jdk.vm.ci.meta.Constant;
43238104Sdesimport jdk.vm.ci.meta.JavaConstant;
44238104Sdesimport jdk.vm.ci.meta.MemoryAccessProvider;
45238104Sdesimport jdk.vm.ci.meta.MethodHandleAccessProvider;
46238104Sdesimport jdk.vm.ci.meta.ResolvedJavaField;
47238104Sdesimport jdk.vm.ci.meta.ResolvedJavaType;
48238104Sdesimport org.testng.Assert;
49238104Sdesimport org.testng.annotations.Test;
50238104Sdes
51238104Sdesimport static jdk.vm.ci.hotspot.test.TestHelper.CONSTANT_REFLECTION_PROVIDER;
52238104Sdes
53238104Sdespublic class HotSpotConstantReflectionProviderTest {
54238104Sdes
55238104Sdes    @Test(dataProvider = "forObjectDataProvider", dataProviderClass = ForObjectDataProvider.class)
56238104Sdes    public void testForObject(Object obj, String expected) {
57238104Sdes        JavaConstant jConst = TestHelper.CONSTANT_REFLECTION_PROVIDER.forObject(obj);
58238104Sdes        Assert.assertNotNull(jConst,
59238104Sdes                        "An instance of JavaConstant returned by" + " \"forObject\" method should not be null");
60238104Sdes        Assert.assertEquals(jConst.toString(), expected, "Unexpected result:");
61238104Sdes    }
62238104Sdes
63238104Sdes    @Test(dataProvider = "forStringDataProvider", dataProviderClass = ForStringDataProvider.class)
64238104Sdes    public void testForString(String string, String expected) {
65238104Sdes        JavaConstant jConst = CONSTANT_REFLECTION_PROVIDER.forString(string);
66238104Sdes        Assert.assertNotNull(jConst,
67238104Sdes                        "An instance of JavaConstant returned by" + " \"forString\" method should not be null");
68238104Sdes        Assert.assertEquals(jConst.toString(), expected, "Unexpected result:");
69238104Sdes    }
70238104Sdes
71238104Sdes    @Test(dataProvider = "constantEqualsDataProvider", dataProviderClass = ConstantEqualsDataProvider.class)
72238104Sdes    public void testConstantEquals(Constant const1, Constant const2, Boolean expected) {
73238104Sdes        Assert.assertEquals(CONSTANT_REFLECTION_PROVIDER.constantEquals(const1, const2), expected,
74238104Sdes                        "Unexpected result:");
75238104Sdes    }
76238104Sdes
77238104Sdes    @Test(dataProvider = "readArrayLengthDataProvider", dataProviderClass = ReadArrayLengthDataProvider.class)
78238104Sdes    public void testReadArrayLength(JavaConstant array, Integer expected) {
79238104Sdes        Assert.assertEquals(CONSTANT_REFLECTION_PROVIDER.readArrayLength(array), expected,
80238104Sdes                        "Unexpected result:");
81238104Sdes    }
82238104Sdes
83238104Sdes    @Test(dataProvider = "readArrayElementDataProvider", dataProviderClass = ReadArrayElementDataProvider.class)
84238104Sdes    public void testReadArrayElement(JavaConstant array, int index, Object expected) {
85238104Sdes        Assert.assertEquals(CONSTANT_REFLECTION_PROVIDER.readArrayElement(array, index), expected,
86238104Sdes                        "Unexpected result:");
87238104Sdes    }
88238104Sdes
89238104Sdes    @Test(dataProvider = "readFieldValueDataProvider", dataProviderClass = ReadFieldValueDataProvider.class)
90238104Sdes    public void testReadFieldValue(ResolvedJavaField field, JavaConstant receiver, JavaConstant expected) {
91238104Sdes        JavaConstant actual = CONSTANT_REFLECTION_PROVIDER.readFieldValue(field, receiver);
92238104Sdes        Assert.assertEquals(actual == null ? "null" : actual.toString(),
93238104Sdes                        expected == null ? "null" : expected.toString(), "Unexpected result:");
94238104Sdes    }
95238104Sdes
96238104Sdes    @Test(dataProvider = "readFieldValueNegativeDataProvider", dataProviderClass = ReadFieldValueDataProvider.class, expectedExceptions = {NullPointerException.class})
97238104Sdes    public void testNegativeReadFieldValue(ResolvedJavaField field, JavaConstant receiver) {
98238104Sdes        CONSTANT_REFLECTION_PROVIDER.readFieldValue(field, receiver);
99238104Sdes    }
100238104Sdes
101238104Sdes    @Test(dataProvider = "asJavaTypeDataProvider", dataProviderClass = AsJavaTypeDataProvider.class)
102238104Sdes    public void testAsJavaType(JavaConstant constant, String expected) {
103238104Sdes        ResolvedJavaType actual = CONSTANT_REFLECTION_PROVIDER.asJavaType(constant);
104238104Sdes        Assert.assertEquals(actual == null ? "null" : actual.toJavaName(),
105238104Sdes                        expected == null ? "null" : expected,
106238104Sdes                        "Unexpected result, wrong type returned:");
107238104Sdes    }
108238104Sdes
109238104Sdes    @Test(dataProvider = "boxPrimitiveDataProvider", dataProviderClass = BoxPrimitiveDataProvider.class)
110238104Sdes    public void testBoxPrimitive(JavaConstant constant, JavaConstant expected) {
111238104Sdes        JavaConstant actual = CONSTANT_REFLECTION_PROVIDER.boxPrimitive(constant);
112238104Sdes        Assert.assertEquals(actual, expected, "Unexpected result:");
113238104Sdes    }
114238104Sdes
115238104Sdes    @Test(dataProvider = "unboxPrimitiveDataProvider", dataProviderClass = UnboxPrimitiveDataProvider.class)
116238104Sdes    public void testUnboxPrimitive(JavaConstant constant, JavaConstant expected) {
117238104Sdes        JavaConstant actual = CONSTANT_REFLECTION_PROVIDER.unboxPrimitive(constant);
118238104Sdes        Assert.assertEquals(actual, expected, "Unexpected result:");
119238104Sdes    }
120238104Sdes
121238104Sdes    @Test
122238104Sdes    public void testGetMemoryAccessProvider() {
123238104Sdes        MemoryAccessProvider actual = CONSTANT_REFLECTION_PROVIDER.getMemoryAccessProvider();
124238104Sdes        Assert.assertNotNull(actual, "Returned MemoryAccessProvider instance should not be null");
125238104Sdes    }
126238104Sdes
127238104Sdes    @Test
128238104Sdes    public void testGetMethodHandleAccess() {
129238104Sdes        MethodHandleAccessProvider actual = CONSTANT_REFLECTION_PROVIDER.getMethodHandleAccess();
130238104Sdes        Assert.assertNotNull(actual,
131238104Sdes                        "Returned MethodHandleAccessProvider instance should not be null");
132238104Sdes    }
133238104Sdes}
134238104Sdes