X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=support%2Ftest%2Forg%2Fwamblee%2Fobserver%2FObservableTest.java;h=08e5a2aa4f220336afd2b79b4163d1325d614ceb;hb=5e063d17c3a452bc5c7e6cf0f8563e0661020d7d;hp=b2b7bdd5b13ca2fb5744278a2e15a620e91d4de9;hpb=fb4deb496257c78d4711aab48191dd9a0678798a;p=utils diff --git a/support/test/org/wamblee/observer/ObservableTest.java b/support/test/org/wamblee/observer/ObservableTest.java index b2b7bdd5..08e5a2aa 100644 --- a/support/test/org/wamblee/observer/ObservableTest.java +++ b/support/test/org/wamblee/observer/ObservableTest.java @@ -12,7 +12,7 @@ * 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; @@ -23,85 +23,115 @@ import org.jmock.Mock; import org.jmock.cglib.MockObjectTestCase; /** - * Test of the observer pattern implementation. + * Test of the observer pattern implementation. */ public class ObservableTest extends MockObjectTestCase { - + + private static final int SUBSCRIBER_COUNT = 100; + private static final String UPDATE = "send"; - - private Observable _observable; - - /* (non-Javadoc) + private Observable _observable; + + /* + * (non-Javadoc) + * * @see junit.framework.TestCase#setUp() */ @Override protected void setUp() throws Exception { super.setUp(); - - _observable = new Observable(this, new DefaultObserverNotifier()); + + _observable = new Observable(this, + new DefaultObserverNotifier()); } - + /** * Tests subscription and notification of one subscriber. */ - public void testOneObserver() { + public void testOneObserver() { Mock mockObserver = mock(Observer.class); - Observer observer = (Observer)mockObserver.proxy(); + Observer observer = (Observer) mockObserver + .proxy(); long subscription = _observable.subscribe(observer); - - assertEquals(1, _observable.getObserverCount()); - + + assertEquals(1, _observable.getObserverCount()); + String message = "hallo"; - mockObserver.expects(once()).method(UPDATE).with(same(this), eq(message)); - + mockObserver.expects(once()).method(UPDATE).with(same(this), + eq(message)); + _observable.send(message); - _observable.unsubscribe(subscription); - assertEquals(0, _observable.getObserverCount()); - + _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. + * 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() { - int nsubscribers = 100; + public void testManySubscribers() { + int nsubscribers = SUBSCRIBER_COUNT; Mock[] mocks = new Mock[nsubscribers]; - + List subscriptions = new ArrayList(); - for (int i = 0; i < nsubscribers; i++) { + for (int i = 0; i < nsubscribers; i++) { Mock mockObserver = mock(Observer.class); - Observer observer = (Observer)mockObserver.proxy(); + Observer observer = (Observer) mockObserver + .proxy(); long subscription = _observable.subscribe(observer); - + mocks[i] = mockObserver; - assertTrue( subscriptions.add(subscription)); + assertTrue(subscriptions.add(subscription)); } - + assertEquals(nsubscribers, _observable.getObserverCount()); - + String message = "hallo"; - for (int i = 0; i < nsubscribers; i++) { - mocks[i].expects(once()).method(UPDATE).with(same(this), eq(message)); + for (int i = 0; i < nsubscribers; i++) { + mocks[i].expects(once()).method(UPDATE).with(same(this), + eq(message)); } - + _observable.send(message); - - for (int i = nsubscribers/2; i < nsubscribers; i++) { - _observable.unsubscribe(subscriptions.get(i)); + + for (int i = nsubscribers / 2; i < nsubscribers; i++) { + _observable.unsubscribe(subscriptions.get(i)); } - assertEquals(nsubscribers - ( nsubscribers - nsubscribers/2), _observable.getObserverCount()); - - message = "blabla"; - for (int i = 0; i < nsubscribers/2; i++) { - mocks[i].expects(once()).method(UPDATE).with(same(this), eq(message)); + assertEquals(nsubscribers - (nsubscribers - nsubscribers / 2), + _observable.getObserverCount()); + + message = "blabla"; + for (int i = 0; i < nsubscribers / 2; i++) { + mocks[i].expects(once()).method(UPDATE).with(same(this), + eq(message)); } _observable.send(message); } + /** + * Subscribes and then unsubscribes with a wrong id. Verifies that + * IllegalArgumentException is thrown. + * + */ + public void testUnsubscribeWithWrongSubscription() { + Mock mockObserver = mock(Observer.class); + Observer observer = (Observer) mockObserver + .proxy(); + long subscription = _observable.subscribe(observer); + + assertEquals(1, _observable.getObserverCount()); + + try { + _observable.unsubscribe(subscription + 1); + } catch (IllegalArgumentException e) { + return; // ok + } + fail(); + } + }