X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=support%2Fgeneral%2Fsrc%2Ftest%2Fjava%2Forg%2Fwamblee%2Fobserver%2FObservableTest.java;h=5a9d2ecb76f4b8b29591aedbdc4da5f97aa376ec;hb=ddd261f331280640c5b53c7128230b629ebcd268;hp=e26571a40d57708975e963b2640fed05373abfd3;hpb=92e23e5ecf9614f2ab770a8cdedc0b21ddf1e127;p=utils diff --git a/support/general/src/test/java/org/wamblee/observer/ObservableTest.java b/support/general/src/test/java/org/wamblee/observer/ObservableTest.java index e26571a4..5a9d2ecb 100644 --- a/support/general/src/test/java/org/wamblee/observer/ObservableTest.java +++ b/support/general/src/test/java/org/wamblee/observer/ObservableTest.java @@ -1,143 +1,145 @@ /* * Copyright 2005 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. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ - package org.wamblee.observer; -import static org.mockito.Mockito.*; +import junit.framework.TestCase; + +import org.mockito.InOrder; +import static org.mockito.Mockito.*; import java.util.ArrayList; import java.util.List; -import org.mockito.InOrder; - -import junit.framework.TestCase; /** * 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 observable; + + /* + * (non-Javadoc) + * + * @see junit.framework.TestCase#setUp() + */ + @Override + protected void setUp() throws Exception { + super.setUp(); + observed = new Integer(1); + observable = new Observable(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 subscriptions = new ArrayList(); + + 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 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 observable; - - /* - * (non-Javadoc) - * - * @see junit.framework.TestCase#setUp() - */ - @Override - protected void setUp() throws Exception { - super.setUp(); - observed = new Integer(1); - observable = new Observable(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 subscriptions = new ArrayList(); - 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 observer = mock(Observer.class); - - long subscription = observable.subscribe(observer); - - assertEquals(1, observable.getObserverCount()); - - try { - observable.unsubscribe(subscription + 1); - } catch (IllegalArgumentException e) { - return; // ok - } - fail(); - } + fail(); + } }