Home | History | Annotate | Download | only in util
      1 /*
      2  *  Licensed to the Apache Software Foundation (ASF) under one or more
      3  *  contributor license agreements.  See the NOTICE file distributed with
      4  *  this work for additional information regarding copyright ownership.
      5  *  The ASF licenses this file to You under the Apache License, Version 2.0
      6  *  (the "License"); you may not use this file except in compliance with
      7  *  the License.  You may obtain a copy of the License at
      8  *
      9  *     http://www.apache.org/licenses/LICENSE-2.0
     10  *
     11  *  Unless required by applicable law or agreed to in writing, software
     12  *  distributed under the License is distributed on an "AS IS" BASIS,
     13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14  *  See the License for the specific language governing permissions and
     15  *  limitations under the License.
     16  */
     17 
     18 package org.apache.harmony.tests.java.util;
     19 
     20 import java.util.Collection;
     21 import java.util.ConcurrentModificationException;
     22 import java.util.Iterator;
     23 import java.util.LinkedList;
     24 
     25 public class ConcurrentModificationExceptionTest extends
     26         junit.framework.TestCase {
     27 
     28     static public class CollectionModifier implements Runnable {
     29         Collection col;
     30 
     31         boolean keepGoing = true;
     32 
     33         public CollectionModifier(Collection c) {
     34             col = c;
     35         }
     36 
     37         public void stopNow() {
     38             keepGoing = false;
     39         }
     40 
     41         public void run() {
     42             Object someItem = new Integer(-1);
     43             while (keepGoing) {
     44                 col.add(someItem);
     45                 col.remove(someItem);
     46             }
     47         }
     48     }
     49 
     50     /**
     51      * java.util.ConcurrentModificationException#ConcurrentModificationException()
     52      */
     53     public void test_Constructor() {
     54         // Test for method java.util.ConcurrentModificationException()
     55         Collection myCollection = new LinkedList();
     56         Iterator myIterator = myCollection.iterator();
     57         for (int counter = 0; counter < 50; counter++)
     58             myCollection.add(new Integer(counter));
     59         CollectionModifier cm = new CollectionModifier(myCollection);
     60         Thread collectionSlapper = new Thread(cm);
     61         try {
     62             collectionSlapper.start();
     63             while (myIterator.hasNext())
     64                 myIterator.next();
     65         } catch (ConcurrentModificationException e) {
     66             cm.stopNow();
     67             return;
     68         }
     69         cm.stopNow();
     70         // The exception should have been thrown--if the code flow makes it here
     71         // the test has failed
     72         fail("Failed to throw expected ConcurrentModificationException");
     73     }
     74 
     75     /**
     76      * java.util.ConcurrentModificationException#ConcurrentModificationException(java.lang.String)
     77      */
     78     public void test_ConstructorLjava_lang_String() {
     79         // Test for method
     80         // java.util.ConcurrentModificationException(java.lang.String)
     81         String errorMessage = "This is an error message";
     82         try {
     83             // This is here to stop "unreachable code" unresolved problem
     84             if (true)
     85                 throw new ConcurrentModificationException(errorMessage);
     86         } catch (ConcurrentModificationException e) {
     87             assertTrue("Exception thrown without error message", e.getMessage()
     88                     .equals(errorMessage));
     89             return;
     90         }
     91         fail("Failed to throw expected ConcurrentModificationException");
     92     }
     93 
     94     /**
     95      * Sets up the fixture, for example, open a network connection. This method
     96      * is called before a test is executed.
     97      */
     98     protected void setUp() {
     99     }
    100 
    101     /**
    102      * Tears down the fixture, for example, close a network connection. This
    103      * method is called after a test is executed.
    104      */
    105     protected void tearDown() {
    106     }
    107 }
    108