/******************************************************************************* | |
* Copyright 2011 Chair for Applied Software Engineering, | |
* Technische Universitaet Muenchen. | |
* All rights reserved. This program and the accompanying materials | |
* are made available under the Eclipse Public License v1.0 | |
* which accompanies this distribution, and is available at | |
* http://www.eclipse.org/legal/epl-v10.html | |
* | |
* Contributors: | |
******************************************************************************/ | |
package org.eclipse.emf.emfstore.client.test.common.observerbus; | |
import static org.junit.Assert.assertEquals; | |
import static org.junit.Assert.assertFalse; | |
import static org.junit.Assert.assertTrue; | |
import java.util.List; | |
import org.eclipse.emf.emfstore.client.test.common.observerbus.assets.A; | |
import org.eclipse.emf.emfstore.client.test.common.observerbus.assets.AImpl; | |
import org.eclipse.emf.emfstore.client.test.common.observerbus.assets.B; | |
import org.eclipse.emf.emfstore.client.test.common.observerbus.assets.BImpl; | |
import org.eclipse.emf.emfstore.client.test.common.observerbus.assets.C; | |
import org.eclipse.emf.emfstore.client.test.common.observerbus.assets.CImpl; | |
import org.eclipse.emf.emfstore.client.test.common.observerbus.assets.DImpl; | |
import org.eclipse.emf.emfstore.common.observer.ObserverBus; | |
import org.eclipse.emf.emfstore.common.observer.ObserverCall; | |
import org.eclipse.emf.emfstore.common.observer.ObserverCall.Result; | |
import org.junit.Before; | |
import org.junit.Test; | |
public class ObserverBusTest { | |
private ObserverBus observerBus; | |
@Test | |
public void testUnregister() { | |
C observer = new C() { | |
public String fourtyTwo() { | |
return "42"; | |
} | |
}; | |
getObserverBus().register(observer); | |
assertEquals("42", getObserverBus().notify(C.class).fourtyTwo()); | |
getObserverBus().unregister(observer); | |
assertFalse("42".equals(getObserverBus().notify(C.class).fourtyTwo())); | |
} | |
@SuppressWarnings("unchecked") | |
@Test | |
public void testSuperUnregister() { | |
DImpl d = new DImpl(); | |
getObserverBus().register(d, C.class); | |
assertEquals("42", getObserverBus().notify(C.class).fourtyTwo()); | |
getObserverBus().unregister(d); | |
assertFalse("42".equals(getObserverBus().notify(C.class).fourtyTwo())); | |
} | |
@Before | |
public void reset() { | |
observerBus = new ObserverBus(); | |
} | |
private ObserverBus getObserverBus() { | |
return observerBus; | |
} | |
@Test | |
public void simpleObserverTest() { | |
getObserverBus().register(new AImpl()); | |
assertEquals(getObserverBus().notify(A.class).returnTwo(), 2); | |
} | |
@Test | |
public void simpleNoObserverTest() { | |
// Default value for Int is returned (=0) | |
// Would exception be better? | |
assertEquals(getObserverBus().notify(A.class).returnTwo(), 0); | |
} | |
@Test | |
public void simpleVoidObserverTest() { | |
getObserverBus().register(new BImpl()); | |
CImpl tester = new CImpl(); | |
getObserverBus().notify(B.class).setMSGToFoo(tester); | |
assertEquals(tester.msg, "foo"); | |
} | |
@Test | |
public void simpleWithTwoObserverTest() { | |
getObserverBus().register(new AImpl()); | |
getObserverBus().register(new AImpl()); | |
A observerProxy = getObserverBus().notify(A.class); | |
assertEquals(observerProxy.returnTwo(), 2); | |
List<Result> callResults = ((ObserverCall) observerProxy).getObserverCallResults(); | |
assertEquals(callResults.size(), 2); | |
assertEquals(callResults.get(0).getResult(), 2); | |
assertEquals(callResults.get(1).getResult(), 2); | |
} | |
@Test | |
public void simpleObserverInheritanceTest() { | |
getObserverBus().register(new AImpl()); | |
// B inherits from A | |
getObserverBus().register(new BImpl()); | |
A observerProxy = getObserverBus().notify(A.class); | |
assertEquals(observerProxy.returnTwo(), 2); | |
List<Result> callResults = ((ObserverCall) observerProxy).getObserverCallResults(); | |
assertEquals(callResults.size(), 2); | |
assertEquals(callResults.get(0).getResult(), 2); | |
assertEquals(callResults.get(1).getResult(), 2); | |
} | |
@Test | |
public void simpleObserverInheritanceAndUnRegAllTest() { | |
getObserverBus().register(new AImpl()); | |
// B inherits from A | |
BImpl b = new BImpl(); | |
getObserverBus().register(b); | |
getObserverBus().unregister(b); | |
A observerProxy = getObserverBus().notify(A.class); | |
assertEquals(observerProxy.returnTwo(), 2); | |
List<Result> callResults = ((ObserverCall) observerProxy).getObserverCallResults(); | |
assertEquals(callResults.size(), 1); | |
assertEquals(callResults.get(0).getResult(), 2); | |
} | |
@SuppressWarnings("unchecked") | |
@Test | |
public void simpleObserverInheritanceAndUnRegSubTest() { | |
getObserverBus().register(new AImpl()); | |
// B inherits from A | |
BImpl b = new BImpl(); | |
getObserverBus().register(b); | |
getObserverBus().unregister(b, B.class); | |
A observerProxy = getObserverBus().notify(A.class); | |
assertEquals(observerProxy.returnTwo(), 2); | |
List<Result> callResults = ((ObserverCall) observerProxy).getObserverCallResults(); | |
assertEquals(callResults.size(), 2); | |
assertEquals(callResults.get(0).getResult(), 2); | |
assertEquals(callResults.get(1).getResult(), 2); | |
} | |
@Test | |
public void callObserverException() { | |
getObserverBus().register(new AImpl()); | |
getObserverBus().register(new BImpl()); | |
A proxy = getObserverBus().notify(A.class); | |
proxy.returnFoobarOrException(); | |
List<Result> results = ((ObserverCall) proxy).getObserverCallResults(); | |
assertEquals(results.size(), 2); | |
assertFalse(results.get(0).exceptionOccurred()); | |
assertTrue(results.get(1).exceptionOccurred()); | |
} | |
@Test | |
public void registerMultipleCallOne() { | |
getObserverBus().register(new AImpl()); | |
getObserverBus().register(new BImpl()); | |
getObserverBus().register(new CImpl()); | |
getObserverBus().notify(C.class).fourtyTwo(); | |
} | |
@SuppressWarnings("unchecked") | |
@Test | |
public void registerForOneInterfaceTest() { | |
getObserverBus().register(new BImpl(), B.class); | |
A a = getObserverBus().notify(A.class); | |
B b = getObserverBus().notify(B.class); | |
a.returnTwo(); | |
assertTrue(((ObserverCall) a).getObserverCallResults().size() == 0); | |
b.returnTwo(); | |
assertTrue(((ObserverCall) b).getObserverCallResults().size() == 1); | |
} | |
public String fourtyTwo() { | |
return "42"; | |
} | |
} |