(no commit message)
[utils] / support / general / src / test / java / org / wamblee / observer / ObservableTest.java
index ff37ccb9bfeb1e72aea95826c5fcf473f86b5a4a..a985d433f96a0aa07cb466af1c7564e66c89afb5 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2005 the original author or authors.
+ * Copyright 2005-2010 the original author or authors.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.wamblee.observer;
 
-import static org.easymock.EasyMock.createControl;
-import static org.easymock.EasyMock.createMock;
-import static org.easymock.EasyMock.createStrictMock;
-import static org.easymock.EasyMock.replay;
-import static org.easymock.EasyMock.verify;
+import junit.framework.TestCase;
+
+import org.mockito.InOrder;
+import static org.mockito.Mockito.*;
 
 import java.util.ArrayList;
 import java.util.List;
 
-import junit.framework.TestCase;
-
-import org.easymock.IMocksControl;
-
 /**
  * Test of the observer pattern implementation.
  * 
  * @author Erik Brakkee
  */
 public class ObservableTest extends TestCase {
+    private static final int SUBSCRIBER_COUNT = 100;
+    private static final String UPDATE = "send";
+    private Integer observed;
+    private Observable<Integer, String> observable;
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see junit.framework.TestCase#setUp()
+     */
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        observed = Integer.valueOf(1);
+        observable = new Observable<Integer, String>(observed,
+            new DefaultObserverNotifier());
+    }
+
+    /**
+     * Tests subscription and notification of one subscriber.
+     */
+    public void testOneObserver() {
+        final Observer mockObserver = mock(Observer.class);
+        InOrder order = inOrder(mockObserver);
+
+        long subscription = observable.subscribe(mockObserver);
+
+        assertEquals(1, observable.getObserverCount());
+
+        final String message = "hallo";
+        observable.send(message);
+
+        order.verify(mockObserver).send(observed, message);
+        verifyNoMoreInteractions(mockObserver);
+
+        observable.unsubscribe(subscription);
+        assertEquals(0, observable.getObserverCount());
+
+        observable.send(message);
+        verifyNoMoreInteractions(mockObserver);
+    }
+
+    /**
+     * Subscribes many susbcribers and sends notifications to subscribers.
+     * Verifies that unique subscription number are returned. Also verifies that
+     * the correct subscribers are notfied.
+     */
+    public void testManySubscribers() {
+        final int nsubscribers = SUBSCRIBER_COUNT;
+        final Observer[] mocks = new Observer[nsubscribers];
+        final InOrder[] order = new InOrder[nsubscribers];
+
+        List<Long> subscriptions = new ArrayList<Long>();
+
+        for (int i = 0; i < nsubscribers; i++) {
+            mocks[i] = mock(Observer.class);
+            order[i] = inOrder(mocks[i]);
+
+            long subscription = observable.subscribe(mocks[i]);
+            assertTrue(subscriptions.add(subscription));
+        }
+
+        assertEquals(nsubscribers, observable.getObserverCount());
+
+        final String message = "hallo";
+
+        observable.send(message);
+
+        for (int i = 0; i < nsubscribers; i++) {
+            order[i].verify(mocks[i]).send(observed, message);
+        }
+
+        for (int i = nsubscribers / 2; i < nsubscribers; i++) {
+            observable.unsubscribe(subscriptions.get(i));
+        }
+
+        assertEquals(nsubscribers - (nsubscribers - (nsubscribers / 2)),
+            observable.getObserverCount());
+
+        final String message2 = "blabla";
+
+        observable.send(message2);
+
+        for (int i = 0; i < (nsubscribers / 2); i++) {
+            order[i].verify(mocks[i]).send(observed, message2);
+        }
+
+        for (int i = nsubscribers / 2; i < nsubscribers; i++) {
+            verifyNoMoreInteractions(mocks[i]);
+        }
+    }
+
+    /**
+     * Subscribes and then unsubscribes with a wrong id. Verifies that
+     * IllegalArgumentException is thrown.
+     * 
+     */
+    public void testUnsubscribeWithWrongSubscription() {
+        Observer<Integer, String> observer = mock(Observer.class);
+
+        long subscription = observable.subscribe(observer);
+
+        assertEquals(1, observable.getObserverCount());
+
+        try {
+            observable.unsubscribe(subscription + 1);
+        } catch (IllegalArgumentException e) {
+            return; // ok
+        }
 
-       private static final int SUBSCRIBER_COUNT = 100;
-
-       private static final String UPDATE = "send";
-
-       private Integer _observed;
-       private Observable<Integer, String> _observable;
-
-       /*
-        * (non-Javadoc)
-        * 
-        * @see junit.framework.TestCase#setUp()
-        */
-       @Override
-       protected void setUp() throws Exception {
-               super.setUp();
-               _observed = new Integer(1);
-               _observable = new Observable<Integer, String>(_observed,
-                               new DefaultObserverNotifier());
-       }
-
-       /**
-        * Tests subscription and notification of one subscriber.
-        */
-       public void testOneObserver() {
-               final Observer mockObserver = createStrictMock(Observer.class);
-               long subscription = _observable.subscribe(mockObserver);
-
-               assertEquals(1, _observable.getObserverCount());
-
-               final String message = "hallo";
-               mockObserver.send(_observed, message);
-               replay(mockObserver);
-
-               _observable.send(message);
-               verify(mockObserver);
-
-               _observable.unsubscribe(subscription);
-               assertEquals(0, _observable.getObserverCount());
-
-               _observable.send(message);
-
-       }
-
-       /**
-        * Subscribes many susbcribers and sends notifications to subscribers.
-        * Verifies that unique subscription number are returned. Also verifies that
-        * the correct subscribers are notfied.
-        */
-       public void testManySubscribers() {
-               final int nsubscribers = SUBSCRIBER_COUNT;
-               final Observer[] mocks = new Observer[nsubscribers];
-
-               IMocksControl control = createControl();
-
-               List<Long> subscriptions = new ArrayList<Long>();
-               for (int i = 0; i < nsubscribers; i++) {
-                       mocks[i] = control.createMock("mock" + i, Observer.class);
-                       long subscription = _observable.subscribe(mocks[i]);
-                       assertTrue(subscriptions.add(subscription));
-               }
-
-               assertEquals(nsubscribers, _observable.getObserverCount());
-
-               final String message = "hallo";
-
-               for (int i = 0; i < nsubscribers; i++) {
-                       mocks[i].send(_observed, message);
-               }
-               control.replay();
-
-               _observable.send(message);
-               control.verify();
-
-               for (int i = nsubscribers / 2; i < nsubscribers; i++) {
-                       _observable.unsubscribe(subscriptions.get(i));
-               }
-               assertEquals(nsubscribers - (nsubscribers - nsubscribers / 2),
-                               _observable.getObserverCount());
-
-               control.reset();
-               final String message2 = "blabla";
-
-               for (int i = 0; i < nsubscribers / 2; i++) {
-                       mocks[i].send(_observed, message2);
-               }
-               control.replay();
-
-               _observable.send(message2);
-               control.verify();
-       }
-
-       /**
-        * Subscribes and then unsubscribes with a wrong id. Verifies that
-        * IllegalArgumentException is thrown.
-        * 
-        */
-       public void testUnsubscribeWithWrongSubscription() {
-               Observer<Integer, String> observer = createMock(Observer.class);
-               replay(observer);
-               
-               long subscription = _observable.subscribe(observer);
-
-               assertEquals(1, _observable.getObserverCount());
-
-               try {
-                       _observable.unsubscribe(subscription + 1);
-               } catch (IllegalArgumentException e) {
-                       return; // ok
-               }
-               fail();
-       }
+        fail();
+    }
 }