blob: de330855f13b2142455083e60e633a260e77d2f6 [file] [log] [blame]
/*
* Copyright (C) 2018 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.settings.datetime.timezone;
import androidx.recyclerview.widget.RecyclerView.AdapterDataObserver;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import org.junit.Test;
import org.junit.runner.RunWith;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import static com.google.common.truth.Truth.assertThat;
@RunWith(SettingsRobolectricTestRunner.class)
public class BaseTimeZoneAdapterTest {
@Test
public void testFilter() throws InterruptedException {
TestItem US = new TestItem("United States");
TestItem HK = new TestItem("Hong Kong");
TestItem UK = new TestItem("United Kingdom", new String[] { "United Kingdom",
"Great Britain"});
TestItem secretCountry = new TestItem("no name", new String[] { "Secret"});
List<TestItem> items = new ArrayList<>();
items.add(US);
items.add(HK);
items.add(UK);
items.add(secretCountry);
TestTimeZoneAdapter adapter = new TestTimeZoneAdapter(items);
assertSearch(adapter, "", items.toArray(new TestItem[items.size()]));
assertSearch(adapter, "Unit", US, UK);
assertSearch(adapter, "kon", HK);
assertSearch(adapter, "brit", UK);
assertSearch(adapter, "sec", secretCountry);
}
private void assertSearch(TestTimeZoneAdapter adapter , String searchText, TestItem... items)
throws InterruptedException {
Observer observer = new Observer(adapter);
adapter.getFilter().filter(searchText);
observer.await();
assertThat(adapter.getItemCount()).isEqualTo(items.length);
for (int i = 0; i < items.length; i++) {
assertThat(adapter.getDataItem(i)).isEqualTo(items[i]);
}
}
private static class Observer extends AdapterDataObserver {
private final CountDownLatch mLatch = new CountDownLatch(1);
private final TestTimeZoneAdapter mAdapter;
public Observer(TestTimeZoneAdapter adapter) {
mAdapter = adapter;
mAdapter.registerAdapterDataObserver(this);
}
@Override
public void onChanged() {
mAdapter.unregisterAdapterDataObserver(this);
mLatch.countDown();
}
public void await() throws InterruptedException {
mLatch.await(2L, TimeUnit.SECONDS);
}
}
private static class TestTimeZoneAdapter extends BaseTimeZoneAdapter<TestItem> {
public TestTimeZoneAdapter(List<TestItem> items) {
super(items, position -> {}, Locale.US, false /* showItemSummary */,
null /* headerText */);
}
}
private static class TestItem implements BaseTimeZoneAdapter.AdapterItem {
private final String mTitle;
private final String[] mSearchKeys;
TestItem(String title) {
this(title, new String[] { title });
}
TestItem(String title, String[] searchKeys) {
mTitle = title;
mSearchKeys = searchKeys;
}
@Override
public CharSequence getTitle() {
return mTitle;
}
@Override
public CharSequence getSummary() {
return null;
}
@Override
public String getIconText() {
return null;
}
@Override
public String getCurrentTime() {
return null;
}
@Override
public long getItemId() {
return 0;
}
@Override
public String[] getSearchKeys() {
return mSearchKeys;
}
}
}