package org.robolectric.shadows; import android.widget.Filter; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.TestRunners; import java.util.concurrent.atomic.AtomicBoolean; import static org.assertj.core.api.Assertions.assertThat; @RunWith(TestRunners.MultiApiSelfTest.class) public class ShadowFilterTest { @Test public void testFilterShouldCallPerformFilteringAndPublishResults() throws InterruptedException { final AtomicBoolean performFilteringCalled = new AtomicBoolean(false); final AtomicBoolean publishResultsCalled = new AtomicBoolean(false); Filter filter = new Filter() { @Override protected FilterResults performFiltering(CharSequence charSequence) { performFilteringCalled.set(true); return null; } @Override protected void publishResults(CharSequence charSequence, FilterResults filterResults) { assertThat(filterResults).isNull(); publishResultsCalled.set(true); } }; filter.filter(""); assertThat(performFilteringCalled.get()).isTrue(); assertThat(publishResultsCalled.get()).isTrue(); } @Test public void testFilterShouldCallListenerWithCorrectCount() throws InterruptedException { final AtomicBoolean listenerCalled = new AtomicBoolean(false); Filter filter = new Filter() { @Override protected FilterResults performFiltering(CharSequence charSequence) { FilterResults results = new FilterResults(); results.values = null; results.count = 4; return results; } @Override protected void publishResults(CharSequence charSequence, FilterResults filterResults) { assertThat(filterResults.values).isNull(); assertThat(filterResults.count).isEqualTo(4); } }; filter.filter("", new Filter.FilterListener() { @Override public void onFilterComplete(int i) { assertThat(i).isEqualTo(4); listenerCalled.set(true); } }); assertThat(listenerCalled.get()).isTrue(); } @Test public void testFilter_whenNullResults_ShouldCallListenerWithMinusOne() throws InterruptedException { final AtomicBoolean listenerCalled = new AtomicBoolean(false); Filter filter = new Filter() { @Override protected FilterResults performFiltering(CharSequence charSequence) { return null; } @Override protected void publishResults(CharSequence charSequence, FilterResults filterResults) {} }; filter.filter("", new Filter.FilterListener() { @Override public void onFilterComplete(int i) { assertThat(i).isEqualTo(-1); listenerCalled.set(true); } }); assertThat(listenerCalled.get()).isTrue(); } }