diff options
Diffstat (limited to 'libphonenumber/test/com/google/i18n/phonenumbers/internal')
-rw-r--r-- | libphonenumber/test/com/google/i18n/phonenumbers/internal/MatcherTest.java | 100 | ||||
-rw-r--r-- | libphonenumber/test/com/google/i18n/phonenumbers/internal/RegexCacheTest.java | 55 |
2 files changed, 155 insertions, 0 deletions
diff --git a/libphonenumber/test/com/google/i18n/phonenumbers/internal/MatcherTest.java b/libphonenumber/test/com/google/i18n/phonenumbers/internal/MatcherTest.java new file mode 100644 index 00000000..822f40dc --- /dev/null +++ b/libphonenumber/test/com/google/i18n/phonenumbers/internal/MatcherTest.java @@ -0,0 +1,100 @@ +/* + * Copyright (C) 2017 The Libphonenumber Authors + * + * 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 com.google.i18n.phonenumbers.internal; + +import com.google.i18n.phonenumbers.Phonemetadata.PhoneNumberDesc; + +import junit.framework.TestCase; + +/** + * Tests that all implementations of {@code MatcherApi} are consistent. + */ +public class MatcherTest extends TestCase { + public void testRegexBasedMatcher() { + checkMatcherBehavesAsExpected(RegexBasedMatcher.create()); + } + + private void checkMatcherBehavesAsExpected(MatcherApi matcher) { + PhoneNumberDesc desc = new PhoneNumberDesc(); + + desc = createDesc(""); + // Test if there is no matcher data. + assertInvalid(matcher, "1", desc); + + desc = createDesc("9\\d{2}"); + assertInvalid(matcher, "91", desc); + assertInvalid(matcher, "81", desc); + assertMatched(matcher, "911", desc); + assertInvalid(matcher, "811", desc); + assertTooLong(matcher, "9111", desc); + assertInvalid(matcher, "8111", desc); + + desc = createDesc("\\d{1,2}"); + assertMatched(matcher, "2", desc); + assertMatched(matcher, "20", desc); + + desc = createDesc("20?"); + assertMatched(matcher, "2", desc); + assertMatched(matcher, "20", desc); + + desc = createDesc("2|20"); + assertMatched(matcher, "2", desc); + // Subtle case where lookingAt() and matches() result in different end()s. + assertMatched(matcher, "20", desc); + } + + // Helper method to set national number fields in the PhoneNumberDesc proto. Empty fields won't be + // set. + private PhoneNumberDesc createDesc(String nationalNumberPattern) { + PhoneNumberDesc desc = new PhoneNumberDesc(); + if (nationalNumberPattern.length() > 0) { + desc.setNationalNumberPattern(nationalNumberPattern); + } + return desc; + } + + private void assertMatched(MatcherApi matcher, String number, PhoneNumberDesc desc) { + assertTrue(String.format("%s should have matched %s.", number, toString(desc)), + matcher.matchNationalNumber(number, desc, false)); + assertTrue(String.format("%s should have matched %s.", number, toString(desc)), + matcher.matchNationalNumber(number, desc, true)); + } + + private void assertInvalid(MatcherApi matcher, String number, PhoneNumberDesc desc) { + assertFalse(String.format("%s should not have matched %s.", number, toString(desc)), + matcher.matchNationalNumber(number, desc, false)); + assertFalse(String.format("%s should not have matched %s.", number, toString(desc)), + matcher.matchNationalNumber(number, desc, true)); + } + + private void assertTooLong(MatcherApi matcher, String number, PhoneNumberDesc desc) { + assertFalse(String.format("%s should have been too long for %s.", number, toString(desc)), + matcher.matchNationalNumber(number, desc, false)); + assertTrue(String.format("%s should have been too long for %s.", number, toString(desc)), + matcher.matchNationalNumber(number, desc, true)); + } + + private String toString(PhoneNumberDesc desc) { + StringBuilder strBuilder = new StringBuilder("pattern: "); + if (desc.hasNationalNumberPattern()) { + strBuilder.append(desc.getNationalNumberPattern()); + } else { + strBuilder.append("none"); + } + return strBuilder.toString(); + } +} diff --git a/libphonenumber/test/com/google/i18n/phonenumbers/internal/RegexCacheTest.java b/libphonenumber/test/com/google/i18n/phonenumbers/internal/RegexCacheTest.java new file mode 100644 index 00000000..83db6ac9 --- /dev/null +++ b/libphonenumber/test/com/google/i18n/phonenumbers/internal/RegexCacheTest.java @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2010 The Libphonenumber Authors + * + * 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 com.google.i18n.phonenumbers.internal; + +import junit.framework.TestCase; + +/** + * Unittests for LRU Cache for compiled regular expressions used by the libphonenumbers libary. + * + * @author Shaopeng Jia + */ + +public class RegexCacheTest extends TestCase { + private RegexCache regexCache; + + public RegexCacheTest() { + regexCache = new RegexCache(2); + } + + public void testRegexInsertion() { + final String regex1 = "[1-5]"; + final String regex2 = "(?:12|34)"; + final String regex3 = "[1-3][58]"; + + regexCache.getPatternForRegex(regex1); + assertTrue(regexCache.containsRegex(regex1)); + + regexCache.getPatternForRegex(regex2); + assertTrue(regexCache.containsRegex(regex2)); + assertTrue(regexCache.containsRegex(regex1)); + + regexCache.getPatternForRegex(regex1); + assertTrue(regexCache.containsRegex(regex1)); + + regexCache.getPatternForRegex(regex3); + assertTrue(regexCache.containsRegex(regex3)); + + assertFalse(regexCache.containsRegex(regex2)); + assertTrue(regexCache.containsRegex(regex1)); + } +} |