FileDocCategorySizeDatePackage
PhoneNumberWatcherTest.javaAPI DocAndroid 5.1 API12543Thu Mar 12 22:22:54 GMT 2015com.android.internal.telephony

PhoneNumberWatcherTest

public class PhoneNumberWatcherTest extends android.test.AndroidTestCase

Fields Summary
Constructors Summary
Methods Summary
private android.text.TextWatchergetTextWatcher()

        return new PhoneNumberFormattingTextWatcher("US");
    
public voidtestAppendChars()

        final String multiChars = "65012345";
        final String formatted1 = "(650) 123-45";
        TextWatcher textWatcher = getTextWatcher();
        SpannableStringBuilder number = new SpannableStringBuilder();
        // Append more than one chars
        textWatcher.beforeTextChanged(number, 0, 0, multiChars.length());
        number.append(multiChars);
        Selection.setSelection(number, number.length());
        textWatcher.onTextChanged(number, 0, 0, number.length());
        textWatcher.afterTextChanged(number);
        assertEquals(formatted1, number.toString());
        assertEquals(formatted1.length(), Selection.getSelectionEnd(number));
        // Append one chars
        final char appendChar = '6";
        final String formatted2 = "(650) 123-456";
        int len = number.length();
        textWatcher.beforeTextChanged(number, number.length(), 0, 1);
        number.append(appendChar);
        Selection.setSelection(number, number.length());
        textWatcher.onTextChanged(number, len, 0, 1);
        textWatcher.afterTextChanged(number);
        assertEquals(formatted2, number.toString());
        assertEquals(formatted2.length(), Selection.getSelectionEnd(number));
    
public voidtestAutoCompleteUnformattedWithUnformattedNumber()
Test the case where some other component is auto-completing what the user is typing, where the deleted text doesn't have any formatting and neither does the replacement text: in this case the replacement text should be formatted by the PhoneNumberFormattingTextWatcher.

        String init = "650";
        String replacement = "6501234567";
        String expected = "(650) 123-4567";
        testReplacement(init, replacement, expected);

        String init2 = "650";
        String replacement2 = "16501234567";
        String expected2 = "1 650-123-4567";
        testReplacement(init2, replacement2, expected2);
    
public voidtestAutoCompleteWithFormattedNameAndNumber()
Test the case where some other component is auto-completing what the user is typing

        String init = "650-1";
        String expected = "Test User <650-123-4567>";
        testReplacement(init, expected, expected);
    
public voidtestAutoCompleteWithFormattedNumber()
Test the case where some other component is auto-completing what the user is typing

        String init = "650-1";
        String expected = "+1-650-123-4567"; // Different formatting than ours
        testReplacement(init, expected, expected);
    
public voidtestAutoCompleteWithNumericNameAndNumber()
Test the case where some other component is auto-completing what the user is typing

        String init = "650";
        String expected = "2nd Test User <650-123-4567>";
        testReplacement(init, expected, expected);
    
public voidtestAutoCompleteWithUnformattedNumber()
Test the case where some other component is auto-completing what the user is typing

        String init = "650-1";
        String expected = "6501234567";
        testReplacement(init, expected, expected);
    
public voidtestInsertChars()

        final String init = "650-23";
        final String expected1 = "650-123";
        TextWatcher textWatcher = getTextWatcher();

        // Insert one char
        SpannableStringBuilder number = new SpannableStringBuilder(init);
        textWatcher.beforeTextChanged(number, 3, 0, 1);
        number.insert(3, "1"); // 6501-23
        Selection.setSelection(number, 4); // make the cursor at right of 1
        textWatcher.onTextChanged(number, 3, 0, 1);
        textWatcher.afterTextChanged(number);
        assertEquals(expected1, number.toString());
        // the cursor should still at the right of '1'
        assertEquals(5, Selection.getSelectionEnd(number));

        // Insert multiple chars
        final String expected2 = "(650) 145-6723";
        textWatcher.beforeTextChanged(number, 5, 0, 4);
        number.insert(5, "4567"); // change to 650-1456723
        Selection.setSelection(number, 9); // the cursor is at the right of '7'.
        textWatcher.onTextChanged(number, 7, 0, 4);
        textWatcher.afterTextChanged(number);
        assertEquals(expected2, number.toString());
        // the cursor should be still at the right of '7'
        assertEquals(12, Selection.getSelectionEnd(number));
    
public voidtestRemoveLastChars()

        final String init = "65012345678";
        final String result1 = "(650) 123-4567";
        TextWatcher textWatcher = getTextWatcher();
        // Remove the last char.
        SpannableStringBuilder number = new SpannableStringBuilder(init);
        int len = number.length();
        textWatcher.beforeTextChanged(number, len - 1, 1, 0);
        number.delete(len - 1, len);
        Selection.setSelection(number, number.length());
        textWatcher.onTextChanged(number, number.length() - 1, 1, 0);
        textWatcher.afterTextChanged(number);
        assertEquals(result1, number.toString());
        assertEquals(result1.length(), Selection.getSelectionEnd(number));
        // Remove last 5 chars
        final String result2 = "650-123";
        textWatcher.beforeTextChanged(number, number.length() - 4, 4, 0);
        number.delete(number.length() - 5, number.length());
        Selection.setSelection(number, number.length());
        textWatcher.onTextChanged(number, number.length(), 4, 0);
        textWatcher.afterTextChanged(number);
        assertEquals(result2, number.toString());
        assertEquals(result2.length(), Selection.getSelectionEnd(number));
    
private voidtestReplacement(java.lang.String init, java.lang.String replacement, java.lang.String expected)
Helper method for testing replacing the entire string with another string

param
init The initial string
param
expected

        TextWatcher textWatcher = getTextWatcher();

        SpannableStringBuilder number = new SpannableStringBuilder(init);

        // Replace entire text with the given values
        textWatcher.beforeTextChanged(number, 0, init.length(), replacement.length());
        number.replace(0, init.length(), replacement, 0, replacement.length());
        Selection.setSelection(number, replacement.length()); // move the cursor to the end
        textWatcher.onTextChanged(number, 0, init.length(), replacement.length());
        textWatcher.afterTextChanged(number);

        assertEquals(expected, number.toString());
        // the cursor should be still at the end
        assertEquals(expected.length(), Selection.getSelectionEnd(number));
    
public voidtestRestartFormatting()

        final String init = "(650) 123";
        final String expected1 = "(650) 123 4";
        TextWatcher textWatcher = getTextWatcher();

        // Append space
        SpannableStringBuilder number = new SpannableStringBuilder(init);
        textWatcher.beforeTextChanged(number, 9, 0, 2);
        number.insert(9, " 4"); // (650) 123 4
        Selection.setSelection(number, number.length()); // make the cursor at right of 4
        textWatcher.onTextChanged(number, 9, 0, 2);
        textWatcher.afterTextChanged(number);
        assertEquals(expected1, number.toString());
        // the cursor should still at the right of '4'
        assertEquals(expected1.length(), Selection.getSelectionEnd(number));

        // Clear the current string, and start formatting again.
        int len = number.length();
        textWatcher.beforeTextChanged(number, 0, len, 0);
        number.delete(0, len);
        textWatcher.onTextChanged(number, 0, len, 0);
        textWatcher.afterTextChanged(number);

        final String expected2 = "650-1234";
        number = new SpannableStringBuilder(init);
        textWatcher.beforeTextChanged(number, 9, 0, 1);
        number.insert(9, "4"); // (650) 1234
        Selection.setSelection(number, number.length()); // make the cursor at right of 4
        textWatcher.onTextChanged(number, 9, 0, 1);
        textWatcher.afterTextChanged(number);
        assertEquals(expected2, number.toString());
        // the cursor should still at the right of '4'
        assertEquals(expected2.length(), Selection.getSelectionEnd(number));
    
public voidtestStopFormatting()

        final String init = "(650) 123";
        final String expected1 = "(650) 123 4";
        TextWatcher textWatcher = getTextWatcher();

        // Append space
        SpannableStringBuilder number = new SpannableStringBuilder(init);
        textWatcher.beforeTextChanged(number, 9, 0, 2);
        number.insert(9, " 4"); // (6501) 23 4
        Selection.setSelection(number, number.length()); // make the cursor at right of 4
        textWatcher.onTextChanged(number, 9, 0, 2);
        textWatcher.afterTextChanged(number);
        assertEquals(expected1, number.toString());
        // the cursor should still at the right of '1'
        assertEquals(expected1.length(), Selection.getSelectionEnd(number));

        // Delete a ')'
        final String expected2 ="(650 123";
        textWatcher = getTextWatcher();
        number = new SpannableStringBuilder(init);
        textWatcher.beforeTextChanged(number, 4, 1, 0);
        number.delete(4, 5); // (6501 23 4
        Selection.setSelection(number, 5); // make the cursor at right of 1
        textWatcher.onTextChanged(number, 4, 1, 0);
        textWatcher.afterTextChanged(number);
        assertEquals(expected2, number.toString());
        // the cursor should still at the right of '1'
        assertEquals(5, Selection.getSelectionEnd(number));

        // Insert a hyphen
        final String expected3 ="(650) 12-3";
        textWatcher = getTextWatcher();
        number = new SpannableStringBuilder(init);
        textWatcher.beforeTextChanged(number, 8, 0, 1);
        number.insert(8, "-"); // (650) 12-3
        Selection.setSelection(number, 9); // make the cursor at right of -
        textWatcher.onTextChanged(number, 8, 0, 1);
        textWatcher.afterTextChanged(number);
        assertEquals(expected3, number.toString());
        // the cursor should still at the right of '-'
        assertEquals(9, Selection.getSelectionEnd(number));
    
public voidtestTextChangedByOtherTextWatcher()

        final TextWatcher cleanupTextWatcher = new TextWatcher() {
            @Override
            public void afterTextChanged(Editable s) {
                s.clear();
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before,
                    int count) {
            }
        };
        final String init = "(650) 123";
        final String expected1 = "";
        TextWatcher textWatcher = getTextWatcher();

        SpannableStringBuilder number = new SpannableStringBuilder(init);
        textWatcher.beforeTextChanged(number, 5, 0, 1);
        number.insert(5, "4"); // (6504) 123
        Selection.setSelection(number, 5); // make the cursor at right of 4
        textWatcher.onTextChanged(number, 5, 0, 1);
        number.setSpan(cleanupTextWatcher, 0, number.length(), 0);
        textWatcher.afterTextChanged(number);
        assertEquals(expected1, number.toString());