package org.robolectric.shadows;
import android.content.Context;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Filter;
import android.widget.Filterable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.Robolectric;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.TestRunners;
import static org.assertj.core.api.Assertions.assertThat;
@RunWith(TestRunners.MultiApiSelfTest.class)
public class ShadowAutoCompleteTextViewTest {
private final AutoCompleteAdapter adapter = new AutoCompleteAdapter(RuntimeEnvironment.application);
@Test
public void shouldInvokeFilter() throws Exception {
Robolectric.getForegroundThreadScheduler().pause();
AutoCompleteTextView view = new AutoCompleteTextView(RuntimeEnvironment.application);
view.setAdapter(adapter);
view.setText("Foo");
assertThat(adapter.getCount()).isEqualTo(2);
}
private class AutoCompleteAdapter extends ArrayAdapter<String> implements Filterable {
public AutoCompleteAdapter(Context context) {
super(context, android.R.layout.simple_list_item_1);
}
@Override
public Filter getFilter() {
return new AutoCompleteFilter();
}
}
private class AutoCompleteFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence text) {
FilterResults results = new FilterResults();
if (text != null) {
results.count = 2;
results.values = new ArrayList<>(Arrays.asList("Foo", "Bar"));
}
return results;
}
@Override
protected void publishResults(CharSequence text, FilterResults results) {
if (results != null) {
adapter.clear();
adapter.addAll((List<String>) results.values);
adapter.notifyDataSetChanged();
}
}
}
}