1 package org.apidesign.openfixed;
3 import java.util.ArrayList;
5 import junit.framework.TestCase;
7 public abstract class CalculatorBase extends TestCase {
9 public CalculatorBase(String testName) {
13 protected abstract Calculator create();
15 public void testSumAndListeners() throws Exception {
16 Calculator a = create();
17 MockListener l = new MockListener();
18 a.addModificationListener(l);
22 int ch = allChanges(l.assertEvents("Three changes", 3));
23 assertEquals("35 was the change", 35, ch);
24 assertEquals("Current value", 35, a.getSum());
26 int ch2 = allChanges(l.assertEvents("One change", 1));
27 assertEquals("minus five was the change", -5, ch2);
28 assertEquals("Final value", 30, a.getSum());
31 private static int allChanges(List<ModificationEvent> events) {
33 for (ModificationEvent me : events) {
34 changes += me.getChange();
39 public static class MockListener implements ModificationListener {
40 private List<ModificationEvent> events;
43 public synchronized void modification(ModificationEvent ev) {
45 events = new ArrayList<ModificationEvent>();
50 public synchronized List<ModificationEvent> assertEvents(String msg, int cnt)
51 throws InterruptedException {
52 for (int i = 0; i < 10; i++) {
53 if (events != null && events.size() >= cnt) {
58 assertEquals(msg + ":\n" + events, cnt, events.size());
59 List<ModificationEvent> res = events;
63 } // end of ModificationListener