+++ /dev/null
-/*
- * 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 java.util.ArrayList;
-import java.util.List;
-
-import org.jmock.Mock;
-import org.jmock.cglib.MockObjectTestCase;
-
-/**
- * Test of the observer pattern implementation.
- */
-public class ObservableTest extends MockObjectTestCase {
-
- private static final String UPDATE = "send";
-
-
- private Observable<ObservableTest, String> _observable;
-
- /* (non-Javadoc)
- * @see junit.framework.TestCase#setUp()
- */
- @Override
- protected void setUp() throws Exception {
- super.setUp();
-
- _observable = new Observable<ObservableTest, String>(this, new DefaultObserverNotifier());
- }
-
- /**
- * Tests subscription and notification of one subscriber.
- */
- public void testOneObserver() {
- Mock mockObserver = mock(Observer.class);
- Observer<ObservableTest,String> observer = (Observer<ObservableTest,String>)mockObserver.proxy();
- long subscription = _observable.subscribe(observer);
-
- assertEquals(1, _observable.getObserverCount());
-
- String message = "hallo";
- mockObserver.expects(once()).method(UPDATE).with(same(this), eq(message));
-
- _observable.send(message);
- _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() {
- int nsubscribers = 100;
- Mock[] mocks = new Mock[nsubscribers];
-
- List<Long> subscriptions = new ArrayList<Long>();
- for (int i = 0; i < nsubscribers; i++) {
- Mock mockObserver = mock(Observer.class);
- Observer<ObservableTest,String> observer = (Observer<ObservableTest,String>)mockObserver.proxy();
- long subscription = _observable.subscribe(observer);
-
- mocks[i] = mockObserver;
- 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));
- }
-
- _observable.send(message);
-
- 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));
- }
- _observable.send(message);
- }
-
-}