summaryrefslogtreecommitdiff
path: root/jsr166-tests/src/test/java/jsr166/AtomicIntegerFieldUpdaterTest.java
diff options
context:
space:
mode:
authorPrzemyslaw Szczepaniak <pszczepaniak@google.com>2016-03-11 15:59:10 +0000
committerPrzemyslaw Szczepaniak <pszczepaniak@google.com>2016-03-14 15:40:14 +0000
commit5328e07d282bef36ac8b757bbee16a761415b2c4 (patch)
treed7fd9980442e0d647e1454f54f3d037f4b2280e7 /jsr166-tests/src/test/java/jsr166/AtomicIntegerFieldUpdaterTest.java
parent8d28fc1d531b4b39def9598de89311aff112f955 (diff)
JSR-166 update
Adapted from sources taken from CVS using: cvs -d ':pserver:anonymous@gee.cs.oswego.edu/home/jsr166/jsr166' checkout -D "03/03/2016 10:00:00 GMT" jsr166 Bug: 27426599 Change-Id: Ic9ba278929f8747d58b69e7d67ec325064588bff
Diffstat (limited to 'jsr166-tests/src/test/java/jsr166/AtomicIntegerFieldUpdaterTest.java')
-rw-r--r--jsr166-tests/src/test/java/jsr166/AtomicIntegerFieldUpdaterTest.java106
1 files changed, 104 insertions, 2 deletions
diff --git a/jsr166-tests/src/test/java/jsr166/AtomicIntegerFieldUpdaterTest.java b/jsr166-tests/src/test/java/jsr166/AtomicIntegerFieldUpdaterTest.java
index ef75b4633b..c8d3856728 100644
--- a/jsr166-tests/src/test/java/jsr166/AtomicIntegerFieldUpdaterTest.java
+++ b/jsr166-tests/src/test/java/jsr166/AtomicIntegerFieldUpdaterTest.java
@@ -15,8 +15,10 @@ import junit.framework.TestSuite;
public class AtomicIntegerFieldUpdaterTest extends JSR166TestCase {
volatile int x = 0;
+ protected volatile int protectedField;
+ private volatile int privateField;
int w;
- long z;
+ float z;
// android-note: Removed because the CTS runner does a bad job of
// retrying tests that have suite() declarations.
//
@@ -24,7 +26,59 @@ public class AtomicIntegerFieldUpdaterTest extends JSR166TestCase {
// main(suite(), args);
// }
// public static Test suite() {
- // return new TestSuite(...);
+ // return new TestSuite(AtomicIntegerFieldUpdaterTest.class);
+ // }
+
+ // for testing subclass access
+ // android-note: Removed because android doesn't restrict reflection access
+ // static class AtomicIntegerFieldUpdaterTestSubclass extends AtomicIntegerFieldUpdaterTest {
+ // public void checkPrivateAccess() {
+ // try {
+ // AtomicIntegerFieldUpdater<AtomicIntegerFieldUpdaterTest> a =
+ // AtomicIntegerFieldUpdater.newUpdater
+ // (AtomicIntegerFieldUpdaterTest.class, "privateField");
+ // shouldThrow();
+ // } catch (RuntimeException success) {
+ // assertNotNull(success.getCause());
+ // }
+ // }
+
+ // public void checkCompareAndSetProtectedSub() {
+ // AtomicIntegerFieldUpdater<AtomicIntegerFieldUpdaterTest> a =
+ // AtomicIntegerFieldUpdater.newUpdater
+ // (AtomicIntegerFieldUpdaterTest.class, "protectedField");
+ // this.protectedField = 1;
+ // assertTrue(a.compareAndSet(this, 1, 2));
+ // assertTrue(a.compareAndSet(this, 2, -4));
+ // assertEquals(-4, a.get(this));
+ // assertFalse(a.compareAndSet(this, -5, 7));
+ // assertEquals(-4, a.get(this));
+ // assertTrue(a.compareAndSet(this, -4, 7));
+ // assertEquals(7, a.get(this));
+ // }
+ // }
+
+ // static class UnrelatedClass {
+ // public void checkPackageAccess(AtomicIntegerFieldUpdaterTest obj) {
+ // obj.x = 72;
+ // AtomicIntegerFieldUpdater<AtomicIntegerFieldUpdaterTest> a =
+ // AtomicIntegerFieldUpdater.newUpdater
+ // (AtomicIntegerFieldUpdaterTest.class, "x");
+ // assertEquals(72, a.get(obj));
+ // assertTrue(a.compareAndSet(obj, 72, 73));
+ // assertEquals(73, a.get(obj));
+ // }
+
+ // public void checkPrivateAccess(AtomicIntegerFieldUpdaterTest obj) {
+ // try {
+ // AtomicIntegerFieldUpdater<AtomicIntegerFieldUpdaterTest> a =
+ // AtomicIntegerFieldUpdater.newUpdater
+ // (AtomicIntegerFieldUpdaterTest.class, "privateField");
+ // throw new AssertionError("should throw");
+ // } catch (RuntimeException success) {
+ // assertNotNull(success.getCause());
+ // }
+ // }
// }
AtomicIntegerFieldUpdater<AtomicIntegerFieldUpdaterTest> updaterFor(String fieldName) {
@@ -65,6 +119,26 @@ public class AtomicIntegerFieldUpdaterTest extends JSR166TestCase {
}
/**
+ * construction using private field from subclass throws RuntimeException
+ */
+ // android-note: Removed because android doesn't restrict reflection access
+ // public void testPrivateFieldInSubclass() {
+ // AtomicIntegerFieldUpdaterTestSubclass s =
+ // new AtomicIntegerFieldUpdaterTestSubclass();
+ // s.checkPrivateAccess();
+ // }
+
+ /**
+ * construction from unrelated class; package access is allowed,
+ * private access is not
+ */
+ // android-note: Removed because android doesn't restrict reflection access
+ // public void testUnrelatedClassAccess() {
+ // new UnrelatedClass().checkPackageAccess(this);
+ // new UnrelatedClass().checkPrivateAccess(this);
+ // }
+
+ /**
* get returns the last value set or assigned
*/
public void testGetSet() {
@@ -109,6 +183,34 @@ public class AtomicIntegerFieldUpdaterTest extends JSR166TestCase {
}
/**
+ * compareAndSet succeeds in changing protected field value if
+ * equal to expected else fails
+ */
+ public void testCompareAndSetProtected() {
+ AtomicIntegerFieldUpdater<AtomicIntegerFieldUpdaterTest> a;
+ a = updaterFor("protectedField");
+ protectedField = 1;
+ assertTrue(a.compareAndSet(this, 1, 2));
+ assertTrue(a.compareAndSet(this, 2, -4));
+ assertEquals(-4, a.get(this));
+ assertFalse(a.compareAndSet(this, -5, 7));
+ assertEquals(-4, a.get(this));
+ assertTrue(a.compareAndSet(this, -4, 7));
+ assertEquals(7, a.get(this));
+ }
+
+ /**
+ * compareAndSet succeeds in changing protected field value if
+ * equal to expected else fails
+ */
+ // android-note: Removed because android doesn't restrict reflection access
+ // public void testCompareAndSetProtectedInSubclass() {
+ // AtomicIntegerFieldUpdaterTestSubclass s =
+ // new AtomicIntegerFieldUpdaterTestSubclass();
+ // s.checkCompareAndSetProtectedSub();
+ // }
+
+ /**
* compareAndSet in one thread enables another waiting for value
* to succeed
*/