public void testDisposeMasterDisposesDetail() {
    IObservableValue master = new WritableValue();
    WritableListFactory factory = new WritableListFactory();
    master.setValue("");

    IObservableList detailObservable = MasterDetailObservables.detailList(master, factory, null);
    DisposeEventTracker tracker = DisposeEventTracker.observe(detailObservable);

    master.dispose();

    assertEquals(1, tracker.count);
    assertTrue(detailObservable.isDisposed());
  }
  public void testDisposeWhileFiringEvents() {
    IObservableValue master = new WritableValue();
    WritableListFactory factory = new WritableListFactory();
    master.setValue("");

    final IObservableList[] detailObservable = new IObservableList[1];

    master.addValueChangeListener(
        new IValueChangeListener() {
          @Override
          public void handleValueChange(ValueChangeEvent event) {
            detailObservable[0].dispose();
          }
        });

    detailObservable[0] = MasterDetailObservables.detailList(master, factory, null);

    master.setValue("New Value");
  }