Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 92aaac8c authored by Daisuke Miyakawa's avatar Daisuke Miyakawa Committed by The Android Open Source Project
Browse files

am 40336782: Add tests. internal bug id 1868702.

Merge commit '40336782'

* commit '40336782':
  Add tests. internal bug id 1868702.
parents 5d16cd04 40336782
Loading
Loading
Loading
Loading
+73 −59
Original line number Diff line number Diff line
@@ -175,6 +175,7 @@ public class DatabaseGeneralTest extends TestCase implements PerformanceTestCase
        assertEquals("+" + PHONE_NUMBER, number);
        c.close();

        /*
        c = mDatabase.query("phones", null,
                "PHONE_NUMBERS_EQUAL(num, '5551212')", null, null, null, null);
        assertNotNull(c);
@@ -183,6 +184,7 @@ public class DatabaseGeneralTest extends TestCase implements PerformanceTestCase
        number = c.getString(c.getColumnIndexOrThrow("num"));
        assertEquals("+" + PHONE_NUMBER, number);
        c.close();
        */

        c = mDatabase.query("phones", null,
                "PHONE_NUMBERS_EQUAL(num, '011" + PHONE_NUMBER + "')", null, null, null, null);
@@ -203,85 +205,97 @@ public class DatabaseGeneralTest extends TestCase implements PerformanceTestCase
        c.close();
    }


    private void phoneNumberCompare(String phone1, String phone2, boolean equal)
        throws Exception {
        String[] temporalPhoneNumbers = new String[2];
        temporalPhoneNumbers[0] = phone1;
        temporalPhoneNumbers[1] = phone2;

        Cursor cursor = mDatabase.rawQuery(
                "SELECT CASE WHEN PHONE_NUMBERS_EQUAL(?, ?) THEN 'equal' ELSE 'not equal' END",
                temporalPhoneNumbers);
        try {
            assertNotNull(cursor);
            assertTrue(cursor.moveToFirst());
            if (equal) {
                assertEquals(String.format("Unexpectedly, \"%s != %s\".", phone1, phone2),
                        "equal", cursor.getString(0));
            } else {
                assertEquals(String.format("Unexpectedly, \"%s\" == \"%s\".", phone1, phone2),
                        "not equal", cursor.getString(0));
            }
        } finally {
            if (cursor != null) {
                cursor.close();
            }
        }
    }

    private void assertPhoneNumberEqual(String phone1, String phone2) throws Exception {
        phoneNumberCompare(phone1, phone2, true);
    }

    private void assertPhoneNumberNotEqual(String phone1, String phone2) throws Exception {
        phoneNumberCompare(phone1, phone2, false);
    }

    /**
     * Tests international matching issues for the PHONE_NUMBERS_EQUAL function.
     * 
     * @throws Exception
     */
    @SmallTest
    public void testPhoneNumbersEqualInternationl() throws Exception {
        Cursor c;
        String[] phoneNumbers = new String[2];
        assertPhoneNumberEqual("1", "1");
        assertPhoneNumberEqual("123123", "123123");
        assertPhoneNumberNotEqual("123123", "923123");
        assertPhoneNumberNotEqual("123123", "123129");
        assertPhoneNumberNotEqual("123123", "1231234");
        assertPhoneNumberNotEqual("123123", "0123123");
        assertPhoneNumberEqual("650-253-0000", "6502530000");
        assertPhoneNumberEqual("650-253-0000", "650 253 0000");
        assertPhoneNumberEqual("650 253 0000", "6502530000");
        assertPhoneNumberEqual("+1 650-253-0000", "6502530000");
        assertPhoneNumberEqual("001 650-253-0000", "6502530000");
        assertPhoneNumberEqual("0111 650-253-0000", "6502530000");

        // Russian trunk digit
        phoneNumbers[0] = "+79161234567"; // globablly dialable number
        phoneNumbers[1] = "89161234567"; // in-country dialable number
        c = mDatabase.rawQuery(
                "SELECT CASE WHEN PHONE_NUMBERS_EQUAL(?, ?) THEN 'equal' ELSE 'not equal' END",
                phoneNumbers);
        assertTrue(c.moveToFirst());
        assertEquals("equal", c.getString(0));
        c.close();
        assertPhoneNumberEqual("+79161234567", "89161234567");

        // French trunk digit
        phoneNumbers[0] = "+33123456789"; // globablly dialable number
        phoneNumbers[1] = "0123456789"; // in-country dialable number
        c = mDatabase.rawQuery(
                "SELECT CASE WHEN PHONE_NUMBERS_EQUAL(?, ?) THEN 'equal' ELSE 'not equal' END",
                phoneNumbers);
        assertTrue(c.moveToFirst());
        assertEquals("equal", c.getString(0));
        c.close();

        assertPhoneNumberEqual("+33123456789", "0123456789");

        // Trunk digit for city codes in the Netherlands
        phoneNumbers[0] = "+31771234567"; // globablly dialable number
        phoneNumbers[1] = "0771234567"; // in-country dialable number
        c = mDatabase.rawQuery(
                "SELECT CASE WHEN PHONE_NUMBERS_EQUAL(?, ?) THEN 'equal' ELSE 'not equal' END",
                phoneNumbers);
        assertTrue(c.moveToFirst());
        assertEquals("equal", c.getString(0));
        c.close();
        assertPhoneNumberEqual("+31771234567", "0771234567");

        // Test broken caller ID seen on call from Thailand to the US
        phoneNumbers[0] = "+66811234567"; // in address book
        phoneNumbers[1] = "166811234567"; // came in from the network
        c = mDatabase.rawQuery(
                "SELECT CASE WHEN PHONE_NUMBERS_EQUAL(?, ?) THEN 'equal' ELSE 'not equal' END",
                phoneNumbers);
        assertTrue(c.moveToFirst());
        assertEquals("equal", c.getString(0));
        c.close();
        assertPhoneNumberEqual("+66811234567", "166811234567");

        // Test the same in-country number with different country codes
        phoneNumbers[0] = "+33123456789";
        phoneNumbers[1] = "+1123456789";
        c = mDatabase.rawQuery(
                "SELECT CASE WHEN PHONE_NUMBERS_EQUAL(?, ?) THEN 'equal' ELSE 'not equal' END",
                phoneNumbers);
        assertTrue(c.moveToFirst());
        assertEquals("not equal", c.getString(0));
        c.close();
        assertPhoneNumberNotEqual("+33123456789", "+1123456789");

        // Test one number with country code and the other without
        phoneNumbers[0] = "5125551212";
        phoneNumbers[1] = "+15125551212";
        c = mDatabase.rawQuery(
                "SELECT CASE WHEN PHONE_NUMBERS_EQUAL(?, ?) THEN 'equal' ELSE 'not equal' END",
                phoneNumbers);
        assertTrue(c.moveToFirst());
        assertEquals("equal", c.getString(0));
        c.close();
        assertPhoneNumberEqual("5125551212", "+15125551212");

        // Test two NANP numbers that only differ in the area code
        phoneNumbers[0] = "5125551212";
        phoneNumbers[1] = "6505551212";
        c = mDatabase.rawQuery(
                "SELECT CASE WHEN PHONE_NUMBERS_EQUAL(?, ?) THEN 'equal' ELSE 'not equal' END",
                phoneNumbers);
        assertTrue(c.moveToFirst());
        assertEquals("not equal", c.getString(0));
        c.close();
        assertPhoneNumberNotEqual("5125551212", "6505551212");

        // Japanese phone numbers
        assertPhoneNumberEqual("090-1234-5678", "+819012345678");
        assertPhoneNumberEqual("090(1234)5678", "+819012345678");
        assertPhoneNumberEqual("090-1234-5678", "+81-90-1234-5678");

        // Equador
        assertPhoneNumberEqual("+593(800)123-1234", "8001231234");
        assertPhoneNumberEqual("+593-2-1234-123", "21234123");

        // Two continuous 0 at the beginning of the phone string should not be
        // treated as trunk prefix.
        assertPhoneNumberNotEqual("008001231234", "8001231234");

        // Confirm that the bug found before does not re-appear.
        assertPhoneNumberNotEqual("080-1234-5678", "+819012345678");
    }

    @MediumTest