@Test(expected = IllegalStateException.class)
 public void addFailureDoesntAffectBeforeAfter() {
   MyCollection c = createThrowingOnAddCollection();
   c.addListener(createThrowingListener());
   try {
     c.add(0);
   } finally {
     c.verifyBeforeAfter();
     c.verifyLastSuccess(false);
     assertTrue(c.isEmpty());
   }
 }
 @Test(expected = UnsupportedOperationException.class)
 public void beforeAfterOnAddArentAffectedByListenerExceptions() {
   MyCollection c = createCollection();
   c.addListener(createThrowingListener());
   try {
     c.add(0);
   } finally {
     c.verifyBeforeAfter();
     c.verifyLastSuccess(true);
     c.assertContentEquals(0);
   }
 }
 @Test(expected = IllegalStateException.class)
 public void removeFailureDoesntAffectBeforeAfter() {
   MyCollection c = createThrowingOnRemoveCollection();
   c.add(0);
   c.addListener(createThrowingListener());
   try {
     c.remove(0);
   } finally {
     c.verifyBeforeAfter();
     c.verifyLastSuccess(false);
     c.assertContentEquals(0);
   }
 }
 @Test(expected = UnsupportedOperationException.class)
 public void beforeAfterOnRemoveArentAffectedByListenerExceptions() {
   MyCollection c = createCollection();
   c.add(0);
   c.addListener(createThrowingListener());
   try {
     c.remove(0);
   } finally {
     c.verifyBeforeAfter();
     c.verifyLastSuccess(true);
     assertTrue(c.isEmpty());
   }
 }