AutoCompleteTextViewPopup.java revision 1d3165f10b12165f02b7015ac1a817c5f60e6399
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.widget; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.app.Instrumentation; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.ActivityInstrumentationTestCase2; 21fb7ed107356a66a55f003a43a7acc2fdbed1e9c2Romain Guyimport android.test.FlakyTest; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.suitebuilder.annotation.MediumTest; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A collection of tests on aspects of the AutoCompleteTextView's popup 2637f4e75b09e17eebb78a4856e02810a1b2fd5ed7Brett Chabot * 2737f4e75b09e17eebb78a4856e02810a1b2fd5ed7Brett Chabot * TODO: tests fail intermittently. Add back MediumTest annotation when fixed 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class AutoCompleteTextViewPopup 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project extends ActivityInstrumentationTestCase2<AutoCompleteTextViewSimple> { 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3204588d5225accfad352a2c4882e4807adc846000Brett Chabot // ms to sleep when checking for intermittent UI state 3304588d5225accfad352a2c4882e4807adc846000Brett Chabot private static final int SLEEP_TIME = 50; 3404588d5225accfad352a2c4882e4807adc846000Brett Chabot // number of times to poll when checking expected UI state 3504588d5225accfad352a2c4882e4807adc846000Brett Chabot // total wait time will be LOOP_AMOUNT * SLEEP_TIME 3604588d5225accfad352a2c4882e4807adc846000Brett Chabot private static final int LOOP_AMOUNT = 10; 3704588d5225accfad352a2c4882e4807adc846000Brett Chabot 3804588d5225accfad352a2c4882e4807adc846000Brett Chabot 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public AutoCompleteTextViewPopup() { 401d3165f10b12165f02b7015ac1a817c5f60e6399Neal Nguyen super("com.android.frameworks.coretests", AutoCompleteTextViewSimple.class); 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4204588d5225accfad352a2c4882e4807adc846000Brett Chabot 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Test that we can move the selection and it responds as expected */ 4404588d5225accfad352a2c4882e4807adc846000Brett Chabot @FlakyTest(tolerance=3) 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testPopupSetListSelection() throws Throwable { 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AutoCompleteTextViewSimple theActivity = getActivity(); 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final AutoCompleteTextView textView = theActivity.getTextView(); 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final Instrumentation instrumentation = getInstrumentation(); 4904588d5225accfad352a2c4882e4807adc846000Brett Chabot 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // focus and type 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project textView.requestFocus(); 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project instrumentation.waitForIdleSync(); 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sendKeys("A"); 5404588d5225accfad352a2c4882e4807adc846000Brett Chabot 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // No initial selection 5604588d5225accfad352a2c4882e4807adc846000Brett Chabot waitAssertListSelection(textView, ListView.INVALID_POSITION); 5704588d5225accfad352a2c4882e4807adc846000Brett Chabot 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // set and check 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project runTestOnUiThread(new Runnable() { 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void run() { 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project textView.setListSelection(0); 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }); 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project instrumentation.waitForIdleSync(); 6504588d5225accfad352a2c4882e4807adc846000Brett Chabot waitAssertListSelection("set selection to (0)", textView, 0); 6604588d5225accfad352a2c4882e4807adc846000Brett Chabot 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Use movement to cross-check the movement 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sendKeys("DPAD_DOWN"); 6904588d5225accfad352a2c4882e4807adc846000Brett Chabot waitAssertListSelection("move selection to (1)", textView, 1); 7004588d5225accfad352a2c4882e4807adc846000Brett Chabot 7104588d5225accfad352a2c4882e4807adc846000Brett Chabot // TODO: FlakyTest repeat runs will not currently call setUp, clear state 7204588d5225accfad352a2c4882e4807adc846000Brett Chabot clearText(textView); 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7404588d5225accfad352a2c4882e4807adc846000Brett Chabot 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Test that we can look at the selection as we move around */ 7604588d5225accfad352a2c4882e4807adc846000Brett Chabot @FlakyTest(tolerance=3) 7704588d5225accfad352a2c4882e4807adc846000Brett Chabot public void testPopupGetListSelection() throws Throwable { 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AutoCompleteTextViewSimple theActivity = getActivity(); 7904588d5225accfad352a2c4882e4807adc846000Brett Chabot final AutoCompleteTextView textView = theActivity.getTextView(); 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final Instrumentation instrumentation = getInstrumentation(); 8104588d5225accfad352a2c4882e4807adc846000Brett Chabot 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // focus and type 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project textView.requestFocus(); 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project instrumentation.waitForIdleSync(); 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sendKeys("A"); 8604588d5225accfad352a2c4882e4807adc846000Brett Chabot 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // No initial selection 8804588d5225accfad352a2c4882e4807adc846000Brett Chabot waitAssertListSelection(textView, ListView.INVALID_POSITION); 8904588d5225accfad352a2c4882e4807adc846000Brett Chabot 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // check for selection position as expected 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sendKeys("DPAD_DOWN"); 9204588d5225accfad352a2c4882e4807adc846000Brett Chabot waitAssertListSelection("move selection to (0)", textView, 0); 9304588d5225accfad352a2c4882e4807adc846000Brett Chabot 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Repeat for one more movement 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sendKeys("DPAD_DOWN"); 9604588d5225accfad352a2c4882e4807adc846000Brett Chabot waitAssertListSelection("move selection to (1)", textView, 1); 9704588d5225accfad352a2c4882e4807adc846000Brett Chabot 9804588d5225accfad352a2c4882e4807adc846000Brett Chabot // TODO: FlakyTest repeat runs will not currently call setUp, clear state 9904588d5225accfad352a2c4882e4807adc846000Brett Chabot clearText(textView); 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 10104588d5225accfad352a2c4882e4807adc846000Brett Chabot 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Test that we can clear the selection */ 10304588d5225accfad352a2c4882e4807adc846000Brett Chabot @FlakyTest(tolerance=3) 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testPopupClearListSelection() throws Throwable { 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AutoCompleteTextViewSimple theActivity = getActivity(); 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final AutoCompleteTextView textView = theActivity.getTextView(); 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final Instrumentation instrumentation = getInstrumentation(); 10804588d5225accfad352a2c4882e4807adc846000Brett Chabot 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // focus and type 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project textView.requestFocus(); 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project instrumentation.waitForIdleSync(); 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sendKeys("A"); 11304588d5225accfad352a2c4882e4807adc846000Brett Chabot 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // No initial selection 11504588d5225accfad352a2c4882e4807adc846000Brett Chabot waitAssertListSelection(textView, ListView.INVALID_POSITION); 11604588d5225accfad352a2c4882e4807adc846000Brett Chabot 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // check for selection position as expected 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sendKeys("DPAD_DOWN"); 11904588d5225accfad352a2c4882e4807adc846000Brett Chabot waitAssertListSelection(textView, 0); 12004588d5225accfad352a2c4882e4807adc846000Brett Chabot 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // clear it 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project runTestOnUiThread(new Runnable() { 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void run() { 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project textView.clearListSelection(); 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }); 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project instrumentation.waitForIdleSync(); 12804588d5225accfad352a2c4882e4807adc846000Brett Chabot waitAssertListSelection("setListSelection(ListView.INVALID_POSITION)", textView, 12904588d5225accfad352a2c4882e4807adc846000Brett Chabot ListView.INVALID_POSITION); 13004588d5225accfad352a2c4882e4807adc846000Brett Chabot 13104588d5225accfad352a2c4882e4807adc846000Brett Chabot // TODO: FlakyTest repeat runs will not currently call setUp, clear state 13204588d5225accfad352a2c4882e4807adc846000Brett Chabot clearText(textView); 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Make sure we handle an empty adapter properly */ 13604588d5225accfad352a2c4882e4807adc846000Brett Chabot @FlakyTest(tolerance=3) 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testPopupNavigateNoAdapter() throws Throwable { 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AutoCompleteTextViewSimple theActivity = getActivity(); 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final AutoCompleteTextView textView = theActivity.getTextView(); 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final Instrumentation instrumentation = getInstrumentation(); 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // focus and type 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project textView.requestFocus(); 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project instrumentation.waitForIdleSync(); 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sendKeys("A"); 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // No initial selection 14804588d5225accfad352a2c4882e4807adc846000Brett Chabot waitAssertListSelection(textView, ListView.INVALID_POSITION); 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // check for selection position as expected 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sendKeys("DPAD_DOWN"); 15204588d5225accfad352a2c4882e4807adc846000Brett Chabot waitAssertListSelection(textView, 0); 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Now get rid of the adapter 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project runTestOnUiThread(new Runnable() { 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void run() { 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project textView.setAdapter((ArrayAdapter<?>) null); 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }); 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project instrumentation.waitForIdleSync(); 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // now try moving "down" - nothing should happen since there's no longer an adapter 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sendKeys("DPAD_DOWN"); 16404588d5225accfad352a2c4882e4807adc846000Brett Chabot 16504588d5225accfad352a2c4882e4807adc846000Brett Chabot // TODO: FlakyTest repeat runs will not currently call setUp, clear state 16604588d5225accfad352a2c4882e4807adc846000Brett Chabot clearText(textView); 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 16804588d5225accfad352a2c4882e4807adc846000Brett Chabot 169875d50a4b9294b2be33cff6493cae7acd1d07ea7Karl Rosaen /** Test the show/hide behavior of the drop-down. */ 17004588d5225accfad352a2c4882e4807adc846000Brett Chabot @FlakyTest(tolerance=3) 171875d50a4b9294b2be33cff6493cae7acd1d07ea7Karl Rosaen public void testPopupShow() throws Throwable { 172875d50a4b9294b2be33cff6493cae7acd1d07ea7Karl Rosaen AutoCompleteTextViewSimple theActivity = getActivity(); 173875d50a4b9294b2be33cff6493cae7acd1d07ea7Karl Rosaen final AutoCompleteTextView textView = theActivity.getTextView(); 174875d50a4b9294b2be33cff6493cae7acd1d07ea7Karl Rosaen final Instrumentation instrumentation = getInstrumentation(); 17504588d5225accfad352a2c4882e4807adc846000Brett Chabot 176875d50a4b9294b2be33cff6493cae7acd1d07ea7Karl Rosaen // Drop-down should not be showing when no text has been entered 177875d50a4b9294b2be33cff6493cae7acd1d07ea7Karl Rosaen assertFalse("isPopupShowing() on start", textView.isPopupShowing()); 17804588d5225accfad352a2c4882e4807adc846000Brett Chabot 179875d50a4b9294b2be33cff6493cae7acd1d07ea7Karl Rosaen // focus and type 180875d50a4b9294b2be33cff6493cae7acd1d07ea7Karl Rosaen textView.requestFocus(); 181875d50a4b9294b2be33cff6493cae7acd1d07ea7Karl Rosaen instrumentation.waitForIdleSync(); 182875d50a4b9294b2be33cff6493cae7acd1d07ea7Karl Rosaen sendKeys("A"); 18304588d5225accfad352a2c4882e4807adc846000Brett Chabot 184875d50a4b9294b2be33cff6493cae7acd1d07ea7Karl Rosaen // Drop-down should now be visible 18504588d5225accfad352a2c4882e4807adc846000Brett Chabot waitAssertPopupShowState("isPopupShowing() after typing", textView, true); 18604588d5225accfad352a2c4882e4807adc846000Brett Chabot 187875d50a4b9294b2be33cff6493cae7acd1d07ea7Karl Rosaen // Clear the text 188875d50a4b9294b2be33cff6493cae7acd1d07ea7Karl Rosaen runTestOnUiThread(new Runnable() { 189875d50a4b9294b2be33cff6493cae7acd1d07ea7Karl Rosaen public void run() { 190875d50a4b9294b2be33cff6493cae7acd1d07ea7Karl Rosaen textView.setText(""); 191875d50a4b9294b2be33cff6493cae7acd1d07ea7Karl Rosaen } 192875d50a4b9294b2be33cff6493cae7acd1d07ea7Karl Rosaen }); 193875d50a4b9294b2be33cff6493cae7acd1d07ea7Karl Rosaen instrumentation.waitForIdleSync(); 19404588d5225accfad352a2c4882e4807adc846000Brett Chabot 195875d50a4b9294b2be33cff6493cae7acd1d07ea7Karl Rosaen // Drop-down should be hidden when text is cleared 19604588d5225accfad352a2c4882e4807adc846000Brett Chabot waitAssertPopupShowState("isPopupShowing() after text cleared", textView, false); 19704588d5225accfad352a2c4882e4807adc846000Brett Chabot 198875d50a4b9294b2be33cff6493cae7acd1d07ea7Karl Rosaen // Set the text, without filtering 199875d50a4b9294b2be33cff6493cae7acd1d07ea7Karl Rosaen runTestOnUiThread(new Runnable() { 200875d50a4b9294b2be33cff6493cae7acd1d07ea7Karl Rosaen public void run() { 201875d50a4b9294b2be33cff6493cae7acd1d07ea7Karl Rosaen textView.setText("a", false); 202875d50a4b9294b2be33cff6493cae7acd1d07ea7Karl Rosaen } 203875d50a4b9294b2be33cff6493cae7acd1d07ea7Karl Rosaen }); 204875d50a4b9294b2be33cff6493cae7acd1d07ea7Karl Rosaen instrumentation.waitForIdleSync(); 20504588d5225accfad352a2c4882e4807adc846000Brett Chabot 206875d50a4b9294b2be33cff6493cae7acd1d07ea7Karl Rosaen // Drop-down should still be hidden 20704588d5225accfad352a2c4882e4807adc846000Brett Chabot waitAssertPopupShowState("isPopupShowing() after setText(\"a\", false)", textView, false); 20804588d5225accfad352a2c4882e4807adc846000Brett Chabot 209875d50a4b9294b2be33cff6493cae7acd1d07ea7Karl Rosaen // Set the text, now with filtering 210875d50a4b9294b2be33cff6493cae7acd1d07ea7Karl Rosaen runTestOnUiThread(new Runnable() { 211875d50a4b9294b2be33cff6493cae7acd1d07ea7Karl Rosaen public void run() { 212875d50a4b9294b2be33cff6493cae7acd1d07ea7Karl Rosaen textView.setText("a"); 213875d50a4b9294b2be33cff6493cae7acd1d07ea7Karl Rosaen } 214875d50a4b9294b2be33cff6493cae7acd1d07ea7Karl Rosaen }); 215875d50a4b9294b2be33cff6493cae7acd1d07ea7Karl Rosaen instrumentation.waitForIdleSync(); 21604588d5225accfad352a2c4882e4807adc846000Brett Chabot 21704588d5225accfad352a2c4882e4807adc846000Brett Chabot // Drop-down should show up after setText() with filtering 21804588d5225accfad352a2c4882e4807adc846000Brett Chabot waitAssertPopupShowState("isPopupShowing() after text set", textView, true); 21904588d5225accfad352a2c4882e4807adc846000Brett Chabot 22004588d5225accfad352a2c4882e4807adc846000Brett Chabot // TODO: FlakyTest repeat runs will not currently call setUp, clear state 22104588d5225accfad352a2c4882e4807adc846000Brett Chabot clearText(textView); 22204588d5225accfad352a2c4882e4807adc846000Brett Chabot } 22304588d5225accfad352a2c4882e4807adc846000Brett Chabot 22404588d5225accfad352a2c4882e4807adc846000Brett Chabot private void waitAssertPopupShowState(String message, AutoCompleteTextView textView, 22504588d5225accfad352a2c4882e4807adc846000Brett Chabot boolean expected) throws InterruptedException { 22604588d5225accfad352a2c4882e4807adc846000Brett Chabot for (int i = 0; i < LOOP_AMOUNT; i++) { 22704588d5225accfad352a2c4882e4807adc846000Brett Chabot if (textView.isPopupShowing() == expected) { 22804588d5225accfad352a2c4882e4807adc846000Brett Chabot return; 22904588d5225accfad352a2c4882e4807adc846000Brett Chabot } 23004588d5225accfad352a2c4882e4807adc846000Brett Chabot Thread.sleep(SLEEP_TIME); 23104588d5225accfad352a2c4882e4807adc846000Brett Chabot } 23204588d5225accfad352a2c4882e4807adc846000Brett Chabot assertEquals(message, expected, textView.isPopupShowing()); 23304588d5225accfad352a2c4882e4807adc846000Brett Chabot } 23404588d5225accfad352a2c4882e4807adc846000Brett Chabot 23504588d5225accfad352a2c4882e4807adc846000Brett Chabot private void waitAssertListSelection(AutoCompleteTextView textView, int expected) 23604588d5225accfad352a2c4882e4807adc846000Brett Chabot throws Exception { 23704588d5225accfad352a2c4882e4807adc846000Brett Chabot waitAssertListSelection("getListSelection()", textView, expected); 23804588d5225accfad352a2c4882e4807adc846000Brett Chabot } 23904588d5225accfad352a2c4882e4807adc846000Brett Chabot 24004588d5225accfad352a2c4882e4807adc846000Brett Chabot private void waitAssertListSelection(String message, AutoCompleteTextView textView, 24104588d5225accfad352a2c4882e4807adc846000Brett Chabot int expected) throws Exception { 24204588d5225accfad352a2c4882e4807adc846000Brett Chabot int currentSelection = ListView.INVALID_POSITION; 24304588d5225accfad352a2c4882e4807adc846000Brett Chabot for (int i = 0; i < LOOP_AMOUNT; i++) { 24404588d5225accfad352a2c4882e4807adc846000Brett Chabot currentSelection = textView.getListSelection(); 24504588d5225accfad352a2c4882e4807adc846000Brett Chabot if (expected == currentSelection) { 24604588d5225accfad352a2c4882e4807adc846000Brett Chabot return; 24704588d5225accfad352a2c4882e4807adc846000Brett Chabot } 24804588d5225accfad352a2c4882e4807adc846000Brett Chabot Thread.sleep(SLEEP_TIME); 24904588d5225accfad352a2c4882e4807adc846000Brett Chabot } 25004588d5225accfad352a2c4882e4807adc846000Brett Chabot assertEquals(message, expected, textView.getListSelection()); 25104588d5225accfad352a2c4882e4807adc846000Brett Chabot } 25204588d5225accfad352a2c4882e4807adc846000Brett Chabot 25304588d5225accfad352a2c4882e4807adc846000Brett Chabot private void clearText(final AutoCompleteTextView textView) throws Throwable { 25404588d5225accfad352a2c4882e4807adc846000Brett Chabot runTestOnUiThread(new Runnable() { 25504588d5225accfad352a2c4882e4807adc846000Brett Chabot public void run() { 25604588d5225accfad352a2c4882e4807adc846000Brett Chabot textView.setText(""); 25704588d5225accfad352a2c4882e4807adc846000Brett Chabot } 25804588d5225accfad352a2c4882e4807adc846000Brett Chabot }); 259875d50a4b9294b2be33cff6493cae7acd1d07ea7Karl Rosaen } 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 261