package com.jakewharton.rxbinding2.view; import android.content.Context; import android.support.test.InstrumentationRegistry; import android.support.test.annotation.UiThreadTest; import android.support.test.rule.UiThreadTestRule; import android.support.test.runner.AndroidJUnit4; import android.view.View; import android.widget.LinearLayout; import com.jakewharton.rxbinding2.RecordingObserver; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import static org.junit.Assert.assertEquals; @RunWith(AndroidJUnit4.class) public final class RxViewGroupTest { @Rule public final UiThreadTestRule uiThreadTestRule = new UiThreadTestRule(); private final Context context = InstrumentationRegistry.getTargetContext(); private final LinearLayout parent = new LinearLayout(context); private final View child = new View(context); @Test @UiThreadTest public void childViewEvents() { RecordingObserver<ViewGroupHierarchyChangeEvent> o = new RecordingObserver<>(); RxViewGroup.changeEvents(parent).subscribe(o); o.assertNoMoreEvents(); // No initial value. parent.addView(child); assertEquals(ViewGroupHierarchyChildViewAddEvent.create(parent, child), o.takeNext()); parent.removeView(child); assertEquals(ViewGroupHierarchyChildViewRemoveEvent.create(parent, child), o.takeNext()); o.dispose(); parent.addView(child); o.assertNoMoreEvents(); } }