< prev index next >
test/jdk/java/lang/invoke/VarHandles/VarHandleTestMethodHandleAccessByte.java
Print this page
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2018, 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.
@@ -21,11 +21,11 @@
* questions.
*/
/*
* @test
- * @run testng/othervm -Diters=20000 VarHandleTestMethodHandleAccessByte
+ * @run testng/othervm -Xint -Diters=2000 VarHandleTestMethodHandleAccessByte
*/
import org.testng.annotations.BeforeClass;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
@@ -55,10 +55,12 @@
VarHandle vhStaticFinalField;
VarHandle vhArray;
+ VarHandle vhValueTypeField;
+
@BeforeClass
public void setup() throws Exception {
vhFinalField = MethodHandles.lookup().findVarHandle(
VarHandleTestMethodHandleAccessByte.class, "final_v", byte.class);
@@ -70,10 +72,13 @@
vhStaticField = MethodHandles.lookup().findStaticVarHandle(
VarHandleTestMethodHandleAccessByte.class, "static_v", byte.class);
vhArray = MethodHandles.arrayElementVarHandle(byte[].class);
+
+ vhValueTypeField = MethodHandles.lookup().findVarHandle(
+ Value.class, "byte_v", byte.class);
}
@DataProvider
public Object[][] accessTestCaseProvider() throws Exception {
@@ -98,10 +103,15 @@
vhArray, f, VarHandleTestMethodHandleAccessByte::testArrayUnsupported,
false));
cases.add(new MethodHandleAccessTestCase("Array index out of bounds",
vhArray, f, VarHandleTestMethodHandleAccessByte::testArrayIndexOutOfBounds,
false));
+ cases.add(new MethodHandleAccessTestCase("Value type field",
+ vhValueTypeField, f, hs -> testValueTypeField(Value.VT, hs)));
+ cases.add(new MethodHandleAccessTestCase("Value type field unsupported",
+ vhValueTypeField, f, hs -> testValueTypeFieldUnsupported(Value.VT, hs),
+ false));
}
// Work around issue with jtreg summary reporting which truncates
// the String result of Object.toString to 30 characters, hence
// the first dummy argument
@@ -371,10 +381,28 @@
static void testInstanceFieldUnsupported(VarHandleTestMethodHandleAccessByte recv, Handles hs) throws Throwable {
}
+ static void testValueTypeField(Value recv, Handles hs) throws Throwable {
+ // Plain
+ {
+ byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(recv);
+ assertEquals(x, (byte)0x01, "get byte value");
+ }
+ }
+
+ static void testValueTypeFieldUnsupported(Value recv, Handles hs) throws Throwable {
+ // Plain
+ for (TestAccessMode am : testAccessModesOfType(TestAccessType.SET)) {
+ checkUOE(am, () -> {
+ hs.get(am).invokeExact(recv, (byte)0x01);
+ });
+ }
+
+
+ }
static void testStaticField(Handles hs) throws Throwable {
// Plain
{
hs.get(TestAccessMode.SET).invokeExact((byte)0x01);
< prev index next >