--- jsr166/src/test/tck/ReentrantReadWriteLockTest.java 2003/12/28 21:56:18 1.13 +++ jsr166/src/test/tck/ReentrantReadWriteLockTest.java 2004/01/10 01:41:59 1.18 @@ -156,16 +156,18 @@ public class ReentrantReadWriteLockTest */ public void testWriteLockInterruptibly_Interrupted() { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); - lock.writeLock().lock(); Thread t = new Thread(new Runnable() { public void run() { try { lock.writeLock().lockInterruptibly(); - threadShouldThrow(); + lock.writeLock().unlock(); + lock.writeLock().lockInterruptibly(); + lock.writeLock().unlock(); } catch(InterruptedException success){} } }); try { + lock.writeLock().lock(); t.start(); t.interrupt(); lock.writeLock().unlock(); @@ -176,7 +178,7 @@ public class ReentrantReadWriteLockTest } /** - * timed write-trylock is interruptible + * timed write-tryLock is interruptible */ public void testWriteTryLock_Interrupted() { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); @@ -185,7 +187,6 @@ public class ReentrantReadWriteLockTest public void run() { try { lock.writeLock().tryLock(1000,TimeUnit.MILLISECONDS); - threadShouldThrow(); } catch(InterruptedException success){} } }); @@ -209,7 +210,6 @@ public class ReentrantReadWriteLockTest public void run() { try { lock.readLock().lockInterruptibly(); - threadShouldThrow(); } catch(InterruptedException success){} } }); @@ -224,7 +224,7 @@ public class ReentrantReadWriteLockTest } /** - * timed read-trylock is interruptible + * timed read-tryLock is interruptible */ public void testReadTryLock_Interrupted() { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); @@ -248,7 +248,7 @@ public class ReentrantReadWriteLockTest /** - * write-trylock fails if locked + * write-tryLock fails if locked */ public void testWriteTryLockWhenLocked() { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); @@ -268,7 +268,7 @@ public class ReentrantReadWriteLockTest } /** - * read-trylock fails if locked + * read-tryLock fails if locked */ public void testReadTryLockWhenLocked() { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); @@ -378,7 +378,7 @@ public class ReentrantReadWriteLockTest /** - * Read trylock succeeds if readlocked but not writelocked + * Read tryLock succeeds if readlocked but not writelocked */ public void testTryLockWhenReadLocked() { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); @@ -401,7 +401,7 @@ public class ReentrantReadWriteLockTest /** - * write trylock fails when readlocked + * write tryLock fails when readlocked */ public void testWriteTryLockWhenReadLocked() { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); @@ -423,7 +423,7 @@ public class ReentrantReadWriteLockTest /** - * write timed trylock times out if locked + * write timed tryLock times out if locked */ public void testWriteTryLock_Timeout() { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); @@ -447,7 +447,7 @@ public class ReentrantReadWriteLockTest } /** - * read timed trylock times out if write-locked + * read timed tryLock times out if write-locked */ public void testReadTryLock_Timeout() { final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); @@ -938,6 +938,49 @@ public class ReentrantReadWriteLockTest } /** + * hasWaiters throws NPE if null + */ + public void testHasWaitersNPE() { + final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); + try { + lock.hasWaiters(null); + shouldThrow(); + } catch (NullPointerException success) { + } catch (Exception ex) { + unexpectedException(); + } + } + + /** + * getWaitQueueLength throws NPE if null + */ + public void testGetWaitQueueLengthNPE() { + final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); + try { + lock.getWaitQueueLength(null); + shouldThrow(); + } catch (NullPointerException success) { + } catch (Exception ex) { + unexpectedException(); + } + } + + + /** + * getWaitingThreads throws NPE if null + */ + public void testGetWaitingThreadsNPE() { + final PublicReentrantReadWriteLock lock = new PublicReentrantReadWriteLock(); + try { + lock.getWaitingThreads(null); + shouldThrow(); + } catch (NullPointerException success) { + } catch (Exception ex) { + unexpectedException(); + } + } + + /** * hasWaiters throws IAE if not owned */ public void testHasWaitersIAE() { @@ -1181,4 +1224,49 @@ public class ReentrantReadWriteLockTest } } + /** + * toString indicates current lock state + */ + public void testToString() { + ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); + String us = lock.toString(); + assertTrue(us.indexOf("Write locks = 0") >= 0); + assertTrue(us.indexOf("Read locks = 0") >= 0); + lock.writeLock().lock(); + String ws = lock.toString(); + assertTrue(ws.indexOf("Write locks = 1") >= 0); + assertTrue(ws.indexOf("Read locks = 0") >= 0); + lock.writeLock().unlock(); + lock.readLock().lock(); + lock.readLock().lock(); + String rs = lock.toString(); + assertTrue(rs.indexOf("Write locks = 0") >= 0); + assertTrue(rs.indexOf("Read locks = 2") >= 0); + } + + /** + * readLock.toString indicates current lock state + */ + public void testReadLockToString() { + ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); + String us = lock.readLock().toString(); + assertTrue(us.indexOf("Read locks = 0") >= 0); + lock.readLock().lock(); + lock.readLock().lock(); + String rs = lock.readLock().toString(); + assertTrue(rs.indexOf("Read locks = 2") >= 0); + } + + /** + * writeLock.toString indicates current lock state + */ + public void testWriteLockToString() { + ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); + String us = lock.writeLock().toString(); + assertTrue(us.indexOf("Unlocked") >= 0); + lock.writeLock().lock(); + String ls = lock.writeLock().toString(); + assertTrue(ls.indexOf("Locked") >= 0); + } + }