alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

Android example source code file (AutoCompleteTextViewPopup.java)

This example Android source code file (AutoCompleteTextViewPopup.java) is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Android by Example" TM.

Java - Android tags/keywords

activityinstrumentationtestcase2, android, app, application, autocompletetextview, autocompletetextviewpopup, autocompletetextviewsimple, dpad_down, exception, flakytest, instrumentation, interruptedexception, loop_amount, runnable, sleep_time, test, throwable

The AutoCompleteTextViewPopup.java Android example source code

/*
 * Copyright (C) 2008 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 android.widget;

import android.app.Instrumentation;
import android.test.ActivityInstrumentationTestCase2;
import android.test.FlakyTest;
import android.test.suitebuilder.annotation.MediumTest;

/**
 * A collection of tests on aspects of the AutoCompleteTextView's popup
 *
 * TODO: tests fail intermittently. Add back MediumTest annotation when fixed
 */
public class AutoCompleteTextViewPopup
        extends ActivityInstrumentationTestCase2<AutoCompleteTextViewSimple> {

    // ms to sleep when checking for intermittent UI state
    private static final int SLEEP_TIME = 50;
    // number of times to poll when checking expected UI state
    // total wait time will be LOOP_AMOUNT * SLEEP_TIME
    private static final int LOOP_AMOUNT = 10;


    public AutoCompleteTextViewPopup() {
        super("com.android.frameworks.coretests", AutoCompleteTextViewSimple.class);
    }

    /** Test that we can move the selection and it responds as expected */
    @FlakyTest(tolerance=3)
    public void testPopupSetListSelection() throws Throwable {
        AutoCompleteTextViewSimple theActivity = getActivity();
        final AutoCompleteTextView textView = theActivity.getTextView();
        final Instrumentation instrumentation = getInstrumentation();

        // focus and type
        textView.requestFocus();
        instrumentation.waitForIdleSync();
        sendKeys("A");

        // No initial selection
        waitAssertListSelection(textView, ListView.INVALID_POSITION);

        // set and check
        runTestOnUiThread(new Runnable() {
            public void run() {
                textView.setListSelection(0);
            }
        });
        instrumentation.waitForIdleSync();
        waitAssertListSelection("set selection to (0)", textView, 0);

        // Use movement to cross-check the movement
        sendKeys("DPAD_DOWN");
        waitAssertListSelection("move selection to (1)", textView, 1);

        // TODO: FlakyTest repeat runs will not currently call setUp, clear state
        clearText(textView);
    }

    /** Test that we can look at the selection as we move around */
    @FlakyTest(tolerance=3)
    public void testPopupGetListSelection() throws Throwable {
        AutoCompleteTextViewSimple theActivity = getActivity();
        final AutoCompleteTextView textView = theActivity.getTextView();
        final Instrumentation instrumentation = getInstrumentation();

        // focus and type
        textView.requestFocus();
        instrumentation.waitForIdleSync();
        sendKeys("A");

        // No initial selection
        waitAssertListSelection(textView, ListView.INVALID_POSITION);

        // check for selection position as expected
        sendKeys("DPAD_DOWN");
        waitAssertListSelection("move selection to (0)", textView, 0);

        // Repeat for one more movement
        sendKeys("DPAD_DOWN");
        waitAssertListSelection("move selection to (1)", textView, 1);

        // TODO: FlakyTest repeat runs will not currently call setUp, clear state
        clearText(textView);
    }

    /** Test that we can clear the selection */
    @FlakyTest(tolerance=3)
    public void testPopupClearListSelection() throws Throwable {
        AutoCompleteTextViewSimple theActivity = getActivity();
        final AutoCompleteTextView textView = theActivity.getTextView();
        final Instrumentation instrumentation = getInstrumentation();

        // focus and type
        textView.requestFocus();
        instrumentation.waitForIdleSync();
        sendKeys("A");

        // No initial selection
        waitAssertListSelection(textView, ListView.INVALID_POSITION);

        // check for selection position as expected
        sendKeys("DPAD_DOWN");
        waitAssertListSelection(textView, 0);

        // clear it
        runTestOnUiThread(new Runnable() {
            public void run() {
                textView.clearListSelection();
            }
        });
        instrumentation.waitForIdleSync();
        waitAssertListSelection("setListSelection(ListView.INVALID_POSITION)", textView,
                ListView.INVALID_POSITION);

        // TODO: FlakyTest repeat runs will not currently call setUp, clear state
        clearText(textView);
    }

    /** Make sure we handle an empty adapter properly */
    @FlakyTest(tolerance=3)
    public void testPopupNavigateNoAdapter() throws Throwable {
        AutoCompleteTextViewSimple theActivity = getActivity();
        final AutoCompleteTextView textView = theActivity.getTextView();
        final Instrumentation instrumentation = getInstrumentation();

        // focus and type
        textView.requestFocus();
        instrumentation.waitForIdleSync();
        sendKeys("A");

        // No initial selection
         waitAssertListSelection(textView, ListView.INVALID_POSITION);

        // check for selection position as expected
        sendKeys("DPAD_DOWN");
        waitAssertListSelection(textView, 0);

        // Now get rid of the adapter
        runTestOnUiThread(new Runnable() {
            public void run() {
                textView.setAdapter((ArrayAdapter<?>) null);
            }
        });
        instrumentation.waitForIdleSync();

        // now try moving "down" - nothing should happen since there's no longer an adapter
        sendKeys("DPAD_DOWN");

        // TODO: FlakyTest repeat runs will not currently call setUp, clear state
        clearText(textView);
    }

    /** Test the show/hide behavior of the drop-down. */
    @FlakyTest(tolerance=3)
    public void testPopupShow() throws Throwable {
        AutoCompleteTextViewSimple theActivity = getActivity();
        final AutoCompleteTextView textView = theActivity.getTextView();
        final Instrumentation instrumentation = getInstrumentation();

        // Drop-down should not be showing when no text has been entered
        assertFalse("isPopupShowing() on start", textView.isPopupShowing());

        // focus and type
        textView.requestFocus();
        instrumentation.waitForIdleSync();
        sendKeys("A");

        // Drop-down should now be visible
        waitAssertPopupShowState("isPopupShowing() after typing", textView, true);

        // Clear the text
        runTestOnUiThread(new Runnable() {
            public void run() {
                textView.setText("");
            }
        });
        instrumentation.waitForIdleSync();

        // Drop-down should be hidden when text is cleared
        waitAssertPopupShowState("isPopupShowing() after text cleared", textView, false);

        // Set the text, without filtering
        runTestOnUiThread(new Runnable() {
            public void run() {
                textView.setText("a", false);
            }
        });
        instrumentation.waitForIdleSync();

        // Drop-down should still be hidden
        waitAssertPopupShowState("isPopupShowing() after setText(\"a\", false)", textView, false);

        // Set the text, now with filtering
        runTestOnUiThread(new Runnable() {
            public void run() {
                textView.setText("a");
            }
        });
        instrumentation.waitForIdleSync();

        // Drop-down should show up after setText() with filtering
        waitAssertPopupShowState("isPopupShowing() after text set", textView, true);

        // TODO: FlakyTest repeat runs will not currently call setUp, clear state
        clearText(textView);
    }

    private void waitAssertPopupShowState(String message, AutoCompleteTextView textView,
            boolean expected) throws InterruptedException {
        for (int i = 0; i < LOOP_AMOUNT; i++) {
            if (textView.isPopupShowing() == expected) {
                return;
            }
            Thread.sleep(SLEEP_TIME);
        }
        assertEquals(message, expected, textView.isPopupShowing());
    }

    private void waitAssertListSelection(AutoCompleteTextView textView, int expected)
            throws Exception {
        waitAssertListSelection("getListSelection()", textView, expected);
    }

    private void waitAssertListSelection(String message, AutoCompleteTextView textView,
            int expected) throws Exception {
        int currentSelection = ListView.INVALID_POSITION;
        for (int i = 0; i < LOOP_AMOUNT; i++) {
            currentSelection = textView.getListSelection();
            if (expected == currentSelection) {
                return;
            }
            Thread.sleep(SLEEP_TIME);
        }
        assertEquals(message, expected, textView.getListSelection());
    }

    private void clearText(final AutoCompleteTextView textView) throws Throwable {
        runTestOnUiThread(new Runnable() {
            public void run() {
                textView.setText("");
            }
        });
    }
}

Other Android examples (source code examples)

Here is a short list of links related to this Android AutoCompleteTextViewPopup.java source code file:

... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.