package com.jakewharton.rxbinding2.support.v17.leanback.widget; import android.support.test.annotation.UiThreadTest; import android.support.test.rule.ActivityTestRule; import android.support.test.runner.AndroidJUnit4; import android.support.v17.leanback.widget.SearchBar; import android.support.v17.leanback.widget.SearchEditText; import android.view.KeyEvent; import com.jakewharton.rxbinding2.RecordingObserver; import org.junit.Before; 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 RxSearchBarTest { @Rule public final ActivityTestRule<RxSearchBarTestActivity> activityRule = new ActivityTestRule<>(RxSearchBarTestActivity.class); private SearchBar searchBar; private SearchEditText searchEditText; @Before public void setUp() { RxSearchBarTestActivity activity = activityRule.getActivity(); searchBar = activity.searchBar; searchEditText = activity.searchEditText; } @Test @UiThreadTest public void searchQueryChanges() { RecordingObserver<String> o = new RecordingObserver<>(); RxSearchBar.searchQueryChanges(searchBar).subscribe(o); o.assertNoMoreEvents(); searchBar.setSearchQuery("H"); assertEquals("H", o.takeNext()); searchBar.setSearchQuery("He"); assertEquals("He", o.takeNext()); o.dispose(); searchBar.setSearchQuery("Silent"); o.assertNoMoreEvents(); } @Test @UiThreadTest public void searchQuery() throws Exception { RxSearchBar.searchQuery(searchBar).accept("Hey"); assertEquals("Hey", searchEditText.getText().toString()); RxSearchBar.searchQuery(searchBar).accept("Bye"); assertEquals("Bye", searchEditText.getText().toString()); } @Test @UiThreadTest public void searchQueryChangeEvents() { RecordingObserver<SearchBarSearchQueryEvent> o = new RecordingObserver<>(); RxSearchBar.searchQueryChangeEvents(searchBar).subscribe(o); o.assertNoMoreEvents(); searchBar.setSearchQuery("q"); assertEquals(SearchBarSearchQueryChangedEvent.create(searchBar, "q"), o.takeNext()); o.assertNoMoreEvents(); o.dispose(); searchBar.setSearchQuery("Silent"); o.assertNoMoreEvents(); } @Test @UiThreadTest public void searchQueryChangeEventsKeyboardDismissed() { RecordingObserver<SearchBarSearchQueryEvent> o = new RecordingObserver<>(); RxSearchBar.searchQueryChangeEvents(searchBar).subscribe(o); o.assertNoMoreEvents(); KeyEvent keyEvent = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK); searchBar.setSearchQuery("q"); searchEditText.onKeyPreIme(KeyEvent.KEYCODE_BACK, keyEvent); assertEquals(SearchBarSearchQueryChangedEvent.create(searchBar, "q"), o.takeNext()); assertEquals(SearchBarSearchQueryKeyboardDismissedEvent.create(searchBar, "q"), o.takeNext()); o.dispose(); searchEditText.onKeyPreIme(KeyEvent.KEYCODE_BACK, keyEvent); o.assertNoMoreEvents(); } }