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; 2104588d5225accfad352a2c4882e4807adc846000Brett Chabotimport android.test.FlakyTest; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2337f4e75b09e17eebb78a4856e02810a1b2fd5ed7Brett Chabot// TODO: tests fail intermittently. Add back MediumTest annotation when fixed 2404588d5225accfad352a2c4882e4807adc846000Brett Chabotpublic class AutoCompleteTextViewCallbacks 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project extends ActivityInstrumentationTestCase2<AutoCompleteTextViewSimple> { 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2704588d5225accfad352a2c4882e4807adc846000Brett Chabot private static final int WAIT_TIME = 200; 2804588d5225accfad352a2c4882e4807adc846000Brett Chabot 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public AutoCompleteTextViewCallbacks() { 301d3165f10b12165f02b7015ac1a817c5f60e6399Neal Nguyen super("com.android.frameworks.coretests", AutoCompleteTextViewSimple.class); 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 33a8b30990cb98af32a33583ddbb111552089bc605Brett Chabot /** Test that the initial popup of the suggestions does not select anything. 34a8b30990cb98af32a33583ddbb111552089bc605Brett Chabot */ 3504588d5225accfad352a2c4882e4807adc846000Brett Chabot @FlakyTest(tolerance=3) 3604588d5225accfad352a2c4882e4807adc846000Brett Chabot public void testPopupNoSelection() throws Exception { 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AutoCompleteTextViewSimple theActivity = getActivity(); 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AutoCompleteTextView textView = theActivity.getTextView(); 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final Instrumentation instrumentation = getInstrumentation(); 4004588d5225accfad352a2c4882e4807adc846000Brett Chabot 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // focus and type 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project textView.requestFocus(); 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project instrumentation.waitForIdleSync(); 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sendKeys("A"); 45f32b488bd205ae2b026f47ee898073fd4815da90Romain Guy instrumentation.waitForIdleSync(); 4604588d5225accfad352a2c4882e4807adc846000Brett Chabot // give UI time to settle 4704588d5225accfad352a2c4882e4807adc846000Brett Chabot Thread.sleep(WAIT_TIME); 4804588d5225accfad352a2c4882e4807adc846000Brett Chabot 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // now check for selection callbacks. Nothing should be clicked or selected. 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertFalse("onItemClick should not be called", theActivity.mItemClickCalled); 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertFalse("onItemSelected should not be called", theActivity.mItemSelectedCalled); 5204588d5225accfad352a2c4882e4807adc846000Brett Chabot 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // arguably, this should be "false", because we aren't deselecting - we shouldn't 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // really be calling it. But it's not the end of the world, and we might wind up 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // breaking something if we change this. 5604588d5225accfad352a2c4882e4807adc846000Brett Chabot //assertTrue("onNothingSelected should be called", theActivity.mNothingSelectedCalled); 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5904588d5225accfad352a2c4882e4807adc846000Brett Chabot /** Test that arrow-down into the popup calls the onSelected callback. */ 6004588d5225accfad352a2c4882e4807adc846000Brett Chabot @FlakyTest(tolerance=3) 6104588d5225accfad352a2c4882e4807adc846000Brett Chabot public void testPopupEnterSelection() throws Exception { 62f32b488bd205ae2b026f47ee898073fd4815da90Romain Guy final AutoCompleteTextViewSimple theActivity = getActivity(); 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AutoCompleteTextView textView = theActivity.getTextView(); 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final Instrumentation instrumentation = getInstrumentation(); 6504588d5225accfad352a2c4882e4807adc846000Brett Chabot 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // focus and type 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project textView.requestFocus(); 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project instrumentation.waitForIdleSync(); 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sendKeys("A"); 7004588d5225accfad352a2c4882e4807adc846000Brett Chabot 71f32b488bd205ae2b026f47ee898073fd4815da90Romain Guy textView.post(new Runnable() { 72f32b488bd205ae2b026f47ee898073fd4815da90Romain Guy public void run() { 73f32b488bd205ae2b026f47ee898073fd4815da90Romain Guy // prepare to move down into the popup 74f32b488bd205ae2b026f47ee898073fd4815da90Romain Guy theActivity.resetItemListeners(); 75f32b488bd205ae2b026f47ee898073fd4815da90Romain Guy } 76f32b488bd205ae2b026f47ee898073fd4815da90Romain Guy }); 77f32b488bd205ae2b026f47ee898073fd4815da90Romain Guy 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sendKeys("DPAD_DOWN"); 79f32b488bd205ae2b026f47ee898073fd4815da90Romain Guy instrumentation.waitForIdleSync(); 8004588d5225accfad352a2c4882e4807adc846000Brett Chabot // give UI time to settle 8104588d5225accfad352a2c4882e4807adc846000Brett Chabot Thread.sleep(WAIT_TIME); 8204588d5225accfad352a2c4882e4807adc846000Brett Chabot 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // now check for selection callbacks. 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertFalse("onItemClick should not be called", theActivity.mItemClickCalled); 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue("onItemSelected should be called", theActivity.mItemSelectedCalled); 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("onItemSelected position", 0, theActivity.mItemSelectedPosition); 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertFalse("onNothingSelected should not be called", theActivity.mNothingSelectedCalled); 8804588d5225accfad352a2c4882e4807adc846000Brett Chabot 89f32b488bd205ae2b026f47ee898073fd4815da90Romain Guy textView.post(new Runnable() { 90f32b488bd205ae2b026f47ee898073fd4815da90Romain Guy public void run() { 91f32b488bd205ae2b026f47ee898073fd4815da90Romain Guy // try one more time - should move from 0 to 1 92f32b488bd205ae2b026f47ee898073fd4815da90Romain Guy theActivity.resetItemListeners(); 93f32b488bd205ae2b026f47ee898073fd4815da90Romain Guy } 94f32b488bd205ae2b026f47ee898073fd4815da90Romain Guy }); 95f32b488bd205ae2b026f47ee898073fd4815da90Romain Guy 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sendKeys("DPAD_DOWN"); 97f32b488bd205ae2b026f47ee898073fd4815da90Romain Guy instrumentation.waitForIdleSync(); 9804588d5225accfad352a2c4882e4807adc846000Brett Chabot // give UI time to settle 9904588d5225accfad352a2c4882e4807adc846000Brett Chabot Thread.sleep(WAIT_TIME); 10004588d5225accfad352a2c4882e4807adc846000Brett Chabot 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // now check for selection callbacks. 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertFalse("onItemClick should not be called", theActivity.mItemClickCalled); 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue("onItemSelected should be called", theActivity.mItemSelectedCalled); 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("onItemSelected position", 1, theActivity.mItemSelectedPosition); 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertFalse("onNothingSelected should not be called", theActivity.mNothingSelectedCalled); 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Test that arrow-up out of the popup calls the onNothingSelected callback */ 10904588d5225accfad352a2c4882e4807adc846000Brett Chabot @FlakyTest(tolerance=3) 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testPopupLeaveSelection() { 111f32b488bd205ae2b026f47ee898073fd4815da90Romain Guy final AutoCompleteTextViewSimple theActivity = getActivity(); 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AutoCompleteTextView textView = theActivity.getTextView(); 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final Instrumentation instrumentation = getInstrumentation(); 11404588d5225accfad352a2c4882e4807adc846000Brett Chabot 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // focus and type 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project textView.requestFocus(); 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project instrumentation.waitForIdleSync(); 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sendKeys("A"); 119f32b488bd205ae2b026f47ee898073fd4815da90Romain Guy instrumentation.waitForIdleSync(); 12004588d5225accfad352a2c4882e4807adc846000Brett Chabot 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // move down into the popup 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sendKeys("DPAD_DOWN"); 123f32b488bd205ae2b026f47ee898073fd4815da90Romain Guy instrumentation.waitForIdleSync(); 124f32b488bd205ae2b026f47ee898073fd4815da90Romain Guy 125f32b488bd205ae2b026f47ee898073fd4815da90Romain Guy textView.post(new Runnable() { 126f32b488bd205ae2b026f47ee898073fd4815da90Romain Guy public void run() { 127f32b488bd205ae2b026f47ee898073fd4815da90Romain Guy // prepare to move down into the popup 128f32b488bd205ae2b026f47ee898073fd4815da90Romain Guy theActivity.resetItemListeners(); 129f32b488bd205ae2b026f47ee898073fd4815da90Romain Guy } 130f32b488bd205ae2b026f47ee898073fd4815da90Romain Guy }); 13104588d5225accfad352a2c4882e4807adc846000Brett Chabot 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sendKeys("DPAD_UP"); 133f32b488bd205ae2b026f47ee898073fd4815da90Romain Guy instrumentation.waitForIdleSync(); 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // now check for selection callbacks. 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertFalse("onItemClick should not be called", theActivity.mItemClickCalled); 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertFalse("onItemSelected should not be called", theActivity.mItemSelectedCalled); 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue("onNothingSelected should be called", theActivity.mNothingSelectedCalled); 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 142