package com.jakewharton.rxbinding2.support.v7.widget;
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.support.v7.widget.SearchView;
import android.view.ContextThemeWrapper;
import com.jakewharton.rxbinding2.RecordingObserver;
import com.jakewharton.rxbinding2.support.v7.appcompat.R;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
@RunWith(AndroidJUnit4.class)
public final class RxSearchViewTest {
@Rule public final UiThreadTestRule uiThreadTestRule = new UiThreadTestRule();
private final Context rawContext = InstrumentationRegistry.getContext();
private final Context context = new ContextThemeWrapper(rawContext, R.style.Theme_AppCompat);
private SearchView searchView;
@Before public void setUp() {
searchView = new SearchView(context);
}
@Test @UiThreadTest public void queryTextChanges() {
searchView.setQuery("Initial", false);
RecordingObserver<CharSequence> o = new RecordingObserver<>();
RxSearchView.queryTextChanges(searchView).subscribe(o);
assertEquals("Initial", o.takeNext().toString());
searchView.setQuery("H", false);
assertEquals("H", o.takeNext().toString());
searchView.setQuery("He", false);
assertEquals("He", o.takeNext().toString());
searchView.setQuery(null, false); // Internally coerced to empty string.
assertEquals("", o.takeNext().toString());
o.dispose();
searchView.setQuery("Silent", false);
o.assertNoMoreEvents();
}
@Test @UiThreadTest public void query() throws Exception {
RxSearchView.query(searchView, false).accept("Hey");
assertEquals("Hey", searchView.getQuery().toString());
RxSearchView.query(searchView, true).accept("Bye");
assertEquals("Bye", searchView.getQuery().toString());
}
@Test @UiThreadTest public void queryTextEventNotSubmitted() {
RecordingObserver<SearchViewQueryTextEvent> o = new RecordingObserver<>();
RxSearchView.queryTextChangeEvents(searchView).subscribe(o);
assertEquals("", o.takeNext().queryText().toString());
searchView.setQuery("q", false);
SearchViewQueryTextEvent event = o.takeNext();
assertEquals("q", event.queryText().toString());
assertFalse(event.isSubmitted());
o.assertNoMoreEvents();
}
@Test @UiThreadTest public void queryTextEventSubmitted() {
RecordingObserver<SearchViewQueryTextEvent> o = new RecordingObserver<>();
RxSearchView.queryTextChangeEvents(searchView).subscribe(o);
assertEquals("", o.takeNext().queryText().toString());
searchView.setQuery("q", true);
// Text change event:
SearchViewQueryTextEvent event = o.takeNext();
assertEquals("q", event.queryText().toString());
assertFalse(event.isSubmitted());
// Submission event:
SearchViewQueryTextEvent event1 = o.takeNext();
assertEquals("q", event1.queryText().toString());
assertTrue(event1.isSubmitted());
}
}