Esempio n. 1
0
  @SmallTest
  @Feature({"Android-AppBase"})
  public void testRemoveWhileIteration() {
    ObserverList<Observer> observerList = new ObserverList<Observer>();
    Foo a = new Foo(1);
    Foo b = new Foo(-1);
    Foo c = new Foo(1);
    Foo d = new Foo(-1);
    Foo e = new Foo(-1);
    FooRemover evil = new FooRemover(observerList, c);

    observerList.addObserver(a);
    observerList.addObserver(b);

    for (Observer obs : observerList) obs.observe(10);

    // Removing an observer not in the list should do nothing.
    observerList.removeObserver(e);

    observerList.addObserver(evil);
    observerList.addObserver(c);
    observerList.addObserver(d);

    for (Observer obs : observerList) obs.observe(10);

    // observe should be called twice on a.
    assertEquals(20, a.mTotal);
    // observe should be called twice on b.
    assertEquals(-20, b.mTotal);
    // evil removed c from the observerList before it got any callbacks.
    assertEquals(0, c.mTotal);
    // observe should be called once on d.
    assertEquals(-10, d.mTotal);
    // e was never added to the list, observe should not be called.
    assertEquals(0, e.mTotal);
  }
Esempio n. 2
0
  @SmallTest
  @Feature({"Android-AppBase"})
  public void testAddWhileIteration() {
    ObserverList<Observer> observerList = new ObserverList<Observer>();
    Foo a = new Foo(1);
    Foo b = new Foo(-1);
    Foo c = new Foo(1);
    FooAdder evil = new FooAdder(observerList, c);

    observerList.addObserver(evil);
    observerList.addObserver(a);
    observerList.addObserver(b);

    for (Observer obs : observerList) obs.observe(10);

    assertTrue(observerList.hasObserver(c));
    assertEquals(10, a.mTotal);
    assertEquals(-10, b.mTotal);
    assertEquals(0, c.mTotal);
  }