KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > tctest > EnumMapTestApp


1 /*
2  * All content copyright (c) 2003-2007 Terracotta, Inc., except as may otherwise be noted in a separate copyright
3  * notice. All rights reserved.
4  */

5 package com.tctest;
6
7 import com.tc.object.config.ConfigVisitor;
8 import com.tc.object.config.DSOClientConfigHelper;
9 import com.tc.object.config.TransparencyClassSpec;
10 import com.tc.simulator.app.ApplicationConfig;
11 import com.tc.simulator.listener.ListenerProvider;
12 import com.tc.util.Assert;
13 import com.tctest.runner.AbstractErrorCatchingTransparentApp;
14
15 import java.util.EnumMap JavaDoc;
16 import java.util.LinkedList JavaDoc;
17 import java.util.concurrent.BrokenBarrierException JavaDoc;
18 import java.util.concurrent.CyclicBarrier JavaDoc;
19
20 public final class EnumMapTestApp extends AbstractErrorCatchingTransparentApp {
21
22   enum Fruit {
23     APPLE("Apple"), ORANGE("Orange"), BANANA("Banana"), PEAR("Pear");
24
25     private final String JavaDoc name;
26
27     Fruit(final String JavaDoc name) {
28       this.name = name;
29     }
30
31     public String JavaDoc getName() {
32       return name;
33     }
34
35   }
36
37   private static final LinkedList JavaDoc<String JavaDoc> AVAILABLE_FRUIT = new LinkedList JavaDoc<String JavaDoc>();
38
39   private static void createAvailableFruit() {
40     synchronized (AVAILABLE_FRUIT) {
41       if (AVAILABLE_FRUIT.isEmpty()) {
42         for (Fruit fruit : Fruit.values()) {
43           AVAILABLE_FRUIT.add(fruit.getName());
44         }
45       }
46     }
47   }
48
49   static {
50     createAvailableFruit();
51   }
52
53   private final EnumMap JavaDoc<Fruit, String JavaDoc> clusteredFruitBasket;
54   private final CyclicBarrier JavaDoc barrier;
55
56   public static void visitL1DSOConfig(final ConfigVisitor visitor, final DSOClientConfigHelper config) {
57     final String JavaDoc testClass = EnumMapTestApp.class.getName();
58     config.addIncludePattern(testClass + "$*");
59     config.addWriteAutolock("* " + testClass + "*.*(..)");
60
61     final TransparencyClassSpec spec = config.getOrCreateSpec(testClass);
62     spec.addRoot("AVAILABLE_FRUIT", "AVAILABLE_FRUIT");
63     spec.addRoot("clusteredFruitBasket", "clusteredFruitBasket");
64     spec.addRoot("barrier", "barrier");
65   }
66
67   public EnumMapTestApp(final String JavaDoc appId, final ApplicationConfig cfg, final ListenerProvider listenerProvider) {
68     super(appId, cfg, listenerProvider);
69     clusteredFruitBasket = new EnumMap JavaDoc<Fruit, String JavaDoc>(Fruit.class);
70     barrier = new CyclicBarrier JavaDoc(getParticipantCount());
71   }
72
73   protected void runTest() throws Throwable JavaDoc {
74     barrier.await();
75     addFruitToBasket(getNextPieceOfFruit());
76     waitForBasketToFill();
77     verifyBasketOperations();
78   }
79
80   private Fruit getNextPieceOfFruit() {
81     final Fruit fruitToAddToBasket;
82     synchronized (AVAILABLE_FRUIT) {
83       final String JavaDoc fruitName = AVAILABLE_FRUIT.remove();
84       Fruit foundFruit = null;
85       for (Fruit f : Fruit.values()) {
86         if (f.getName().equals(fruitName)) {
87           foundFruit = f;
88           break;
89         }
90       }
91       Assert.assertNotNull(foundFruit);
92       fruitToAddToBasket = foundFruit;
93     }
94     return fruitToAddToBasket;
95   }
96
97   private void addFruitToBasket(final Fruit fruit) {
98     synchronized (clusteredFruitBasket) {
99       clusteredFruitBasket.put(fruit, fruit.getName());
100     }
101   }
102
103   private void waitForBasketToFill() throws InterruptedException JavaDoc, BrokenBarrierException JavaDoc {
104     barrier.await();
105   }
106
107   private void verifyBasketOperations() {
108     synchronized (clusteredFruitBasket) {
109       Assert.assertEquals(Fruit.values().length, clusteredFruitBasket.size());
110       final EnumMap JavaDoc<Fruit, String JavaDoc> equivalentBasket = new EnumMap JavaDoc<Fruit, String JavaDoc>(Fruit.class);
111       for (Fruit fruit : Fruit.values()) {
112         // Write
113
Assert.assertEquals(fruit.getName(), clusteredFruitBasket.remove(fruit));
114         Assert.assertFalse(clusteredFruitBasket.containsKey(fruit));
115         Assert.assertFalse(clusteredFruitBasket.keySet().contains(fruit));
116         Assert.assertFalse(clusteredFruitBasket.containsValue(fruit.getName()));
117         Assert.assertFalse(clusteredFruitBasket.values().contains(fruit.getName()));
118         clusteredFruitBasket.put(fruit, fruit.getName());
119
120         // Read
121
Assert.assertTrue(clusteredFruitBasket.containsKey(fruit));
122         Assert.assertTrue(clusteredFruitBasket.keySet().contains(fruit));
123         Assert.assertTrue(clusteredFruitBasket.containsValue(fruit.getName()));
124         Assert.assertTrue(clusteredFruitBasket.values().contains(fruit.getName()));
125         Assert.assertEquals(fruit.getName(), clusteredFruitBasket.get(fruit));
126
127         // For our later .equals() comparison
128
equivalentBasket.put(fruit, fruit.getName());
129       }
130       Assert.assertTrue(clusteredFruitBasket.equals(equivalentBasket));
131       clusteredFruitBasket.clear();
132       Assert.assertTrue(clusteredFruitBasket.isEmpty());
133       clusteredFruitBasket.putAll(equivalentBasket);
134       Assert.assertTrue(clusteredFruitBasket.equals(equivalentBasket));
135     }
136   }
137
138 }
139
Popular Tags