summaryrefslogtreecommitdiffstats
path: root/content/renderer/android/address_detector_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'content/renderer/android/address_detector_unittest.cc')
-rw-r--r--content/renderer/android/address_detector_unittest.cc599
1 files changed, 599 insertions, 0 deletions
diff --git a/content/renderer/android/address_detector_unittest.cc b/content/renderer/android/address_detector_unittest.cc
new file mode 100644
index 0000000..0922722
--- /dev/null
+++ b/content/renderer/android/address_detector_unittest.cc
@@ -0,0 +1,599 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/renderer/android/address_detector.h"
+
+#include "base/memory/scoped_ptr.h"
+#include "base/utf_string_conversions.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+using content::AddressDetector;
+
+class AddressDetectorTest : public testing::Test {
+ public:
+ AddressDetectorTest() {}
+
+ void TokenizeWords(const string16& content,
+ AddressDetector::WordList* words) const {
+ AddressDetector::String16Tokenizer tokenizer(content.begin(),
+ content.end(), kWhitespaceUTF16);
+ while (tokenizer.GetNext()) {
+ words->push_back(AddressDetector::Word(tokenizer.token_begin(),
+ tokenizer.token_end()));
+ }
+ }
+
+ std::string GetHouseNumber(const std::string& content) const {
+ string16 content_16 = UTF8ToUTF16(content);
+ string16 result;
+
+ AddressDetector::HouseNumberParser parser;
+ AddressDetector::Word word;
+ if (parser.Parse(content_16.begin(), content_16.end(), &word))
+ result = string16(word.begin, word.end);
+ return UTF16ToUTF8(result);
+ }
+
+ bool ContainsHouseNumber(const std::string& content) const {
+ return !GetHouseNumber(content).empty();
+ }
+
+ bool GetState(const std::string& state, size_t* state_index) const {
+ string16 state_16 = UTF8ToUTF16(state);
+ AddressDetector::String16Tokenizer tokenizer(state_16.begin(),
+ state_16.end(),
+ kWhitespaceUTF16);
+ if (!tokenizer.GetNext())
+ return false;
+
+ size_t state_last_word;
+ AddressDetector::WordList words;
+ words.push_back(AddressDetector::Word(tokenizer.token_begin(),
+ tokenizer.token_end()));
+ return AddressDetector::FindStateStartingInWord(
+ &words, 0, &state_last_word, &tokenizer, state_index);
+ }
+
+ bool IsState(const std::string& state) const {
+ size_t state_index;
+ return GetState(state, &state_index);
+ }
+
+ bool IsZipValid(const std::string& zip, const std::string& state) const {
+ size_t state_index;
+ EXPECT_TRUE(GetState(state, &state_index));
+
+ string16 zip_16 = UTF8ToUTF16(zip);
+ AddressDetector::WordList words;
+ TokenizeWords(zip_16, &words);
+ EXPECT_TRUE(words.size() == 1);
+ return AddressDetector::IsZipValid(words.front(), state_index);
+ }
+
+ bool IsLocationName(const std::string& street) const {
+ string16 street_16 = UTF8ToUTF16(street);
+ AddressDetector::WordList words;
+ TokenizeWords(street_16, &words);
+ EXPECT_TRUE(words.size() == 1);
+ return AddressDetector::IsValidLocationName(words.front());
+ }
+
+ std::string FindAddress(const std::string& content) const {
+ string16 content_16 = UTF8ToUTF16(content);
+ string16 result_16;
+ size_t start, end;
+ AddressDetector detector;
+ std::string content_text;
+ if (detector.FindContent(content_16.begin(), content_16.end(),
+ &start, &end, &content_text))
+ result_16 = content_16.substr(start, end - start);
+ return UTF16ToUTF8(result_16);
+ }
+
+ bool ContainsAddress(const std::string& content) const {
+ return !FindAddress(content).empty();
+ }
+
+ bool IsAddress(const std::string& content) const {
+ return FindAddress(content) == content;
+ }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(AddressDetectorTest);
+};
+
+TEST_F(AddressDetectorTest, HouseNumber) {
+ // Tests cases with valid home numbers.
+ EXPECT_EQ(GetHouseNumber("4 my house"), "4");
+ EXPECT_EQ(GetHouseNumber("Something 4 my house"), "4");
+ EXPECT_EQ(GetHouseNumber("4"), "4");
+ EXPECT_EQ(GetHouseNumber(" 4,5"), "4");
+ EXPECT_EQ(GetHouseNumber("one"), "one");
+ EXPECT_EQ(GetHouseNumber("Number One somewhere"), "One");
+ EXPECT_EQ(GetHouseNumber("Testing \n4\n"), "4");
+ EXPECT_EQ(GetHouseNumber("Foo 1ST"), "1ST");
+ EXPECT_EQ(GetHouseNumber("Bar 2nd"), "2nd");
+ EXPECT_EQ(GetHouseNumber("Blah 3rd"), "3rd");
+ EXPECT_EQ(GetHouseNumber("4th"), "4th");
+ EXPECT_EQ(GetHouseNumber("Blah 11th"), "11th");
+ EXPECT_EQ(GetHouseNumber("Blah 12th meh"), "12th");
+ EXPECT_EQ(GetHouseNumber("Blah 13th moo"), "13th");
+ EXPECT_EQ(GetHouseNumber("211st"), "211st");
+ EXPECT_EQ(GetHouseNumber("1A"), "1A");
+ EXPECT_EQ(GetHouseNumber("number:35"), "35");
+ EXPECT_EQ(GetHouseNumber("five digits at most: 12345"), "12345");
+ EXPECT_EQ(GetHouseNumber("'123'"), "123");
+ EXPECT_EQ(GetHouseNumber("\"123\""), "123");
+ EXPECT_EQ(GetHouseNumber("\"123, something\""), "123");
+ EXPECT_EQ(GetHouseNumber("Testing 12-34"), "12-34");
+ EXPECT_EQ(GetHouseNumber("Testing 12-34c,d"), "12-34c");
+ EXPECT_EQ(GetHouseNumber("住所は:76 Buckingham Palace Roadです"), "76");
+
+ // Tests cases without valid home numbers.
+ EXPECT_FALSE(ContainsHouseNumber("0th"));
+ EXPECT_FALSE(ContainsHouseNumber("25st"));
+ EXPECT_FALSE(ContainsHouseNumber("111th"));
+ EXPECT_FALSE(ContainsHouseNumber("011th"));
+ EXPECT_FALSE(ContainsHouseNumber("27AZ"));
+ EXPECT_FALSE(ContainsHouseNumber("22ºC"));
+ EXPECT_FALSE(ContainsHouseNumber("3.141592"));
+ EXPECT_FALSE(ContainsHouseNumber("more than five digits: 123456"));
+ EXPECT_FALSE(ContainsHouseNumber("kjhdfkajsdhf98uf93h"));
+ EXPECT_FALSE(ContainsHouseNumber("これはテストです。"));
+ EXPECT_FALSE(ContainsHouseNumber("Number On"));
+ EXPECT_FALSE(ContainsHouseNumber("2: foo"));
+ EXPECT_FALSE(ContainsHouseNumber("12-"));
+ EXPECT_FALSE(ContainsHouseNumber("\n\"' \t, "));
+ EXPECT_FALSE(ContainsHouseNumber(""));
+}
+
+TEST_F(AddressDetectorTest, FindState) {
+ // The complete set of state codes and names is tested together with their
+ // returned state indices in the zip code test.
+ EXPECT_TRUE(IsState("CALIFORNIA"));
+ EXPECT_TRUE(IsState("ca"));
+
+ EXPECT_FALSE(IsState("californi"));
+ EXPECT_FALSE(IsState("northern mariana"));
+ EXPECT_FALSE(IsState("northern mariana island"));
+ EXPECT_FALSE(IsState("zz"));
+}
+
+TEST_F(AddressDetectorTest, ZipCode) {
+ EXPECT_TRUE(IsZipValid("90000", "CA"));
+ EXPECT_TRUE(IsZipValid("01234", "MA"));
+ EXPECT_TRUE(IsZipValid("99999-9999", "Alaska"));
+
+ EXPECT_FALSE(IsZipValid("999999999", "Alaska"));
+ EXPECT_FALSE(IsZipValid("9999-99999", "Alaska"));
+ EXPECT_FALSE(IsZipValid("999999999-", "Alaska"));
+ EXPECT_FALSE(IsZipValid("99999-999a", "Alaska"));
+ EXPECT_FALSE(IsZipValid("99999--9999", "Alaska"));
+ EXPECT_FALSE(IsZipValid("90000o", "CA"));
+ EXPECT_FALSE(IsZipValid("01234", "CA"));
+ EXPECT_FALSE(IsZipValid("01234-", "MA"));
+
+ // Test the state index against the zip range table.
+ EXPECT_TRUE(IsZipValid("99000", "AK"));
+ EXPECT_TRUE(IsZipValid("99000", "Alaska"));
+ EXPECT_TRUE(IsZipValid("35000", "AL"));
+ EXPECT_TRUE(IsZipValid("36000", "Alabama"));
+ EXPECT_TRUE(IsZipValid("71000", "AR"));
+ EXPECT_TRUE(IsZipValid("72000", "Arkansas"));
+ EXPECT_TRUE(IsZipValid("96000", "AS"));
+ EXPECT_TRUE(IsZipValid("96000", "American Samoa"));
+ EXPECT_TRUE(IsZipValid("85000", "AZ"));
+ EXPECT_TRUE(IsZipValid("86000", "Arizona"));
+ EXPECT_TRUE(IsZipValid("90000", "CA"));
+ EXPECT_TRUE(IsZipValid("96000", "California"));
+ EXPECT_TRUE(IsZipValid("80000", "CO"));
+ EXPECT_TRUE(IsZipValid("81000", "Colorado"));
+ EXPECT_TRUE(IsZipValid("06000", "CT"));
+ EXPECT_TRUE(IsZipValid("06000", "Connecticut"));
+ EXPECT_TRUE(IsZipValid("20000", "DC"));
+ EXPECT_TRUE(IsZipValid("20000", "District of Columbia"));
+ EXPECT_TRUE(IsZipValid("19000", "DE"));
+ EXPECT_TRUE(IsZipValid("19000", "Delaware"));
+ EXPECT_TRUE(IsZipValid("32000", "FL"));
+ EXPECT_TRUE(IsZipValid("34000", "Florida"));
+ EXPECT_TRUE(IsZipValid("96000", "FM"));
+ EXPECT_TRUE(IsZipValid("96000", "Federated States of Micronesia"));
+ EXPECT_TRUE(IsZipValid("30000", "GA"));
+ EXPECT_TRUE(IsZipValid("31000", "Georgia"));
+ EXPECT_TRUE(IsZipValid("96000", "GU"));
+ EXPECT_TRUE(IsZipValid("96000", "Guam"));
+ EXPECT_TRUE(IsZipValid("96000", "HI"));
+ EXPECT_TRUE(IsZipValid("96000", "Hawaii"));
+ EXPECT_TRUE(IsZipValid("50000", "IA"));
+ EXPECT_TRUE(IsZipValid("52000", "Iowa"));
+ EXPECT_TRUE(IsZipValid("83000", "ID"));
+ EXPECT_TRUE(IsZipValid("83000", "Idaho"));
+ EXPECT_TRUE(IsZipValid("60000", "IL"));
+ EXPECT_TRUE(IsZipValid("62000", "Illinois"));
+ EXPECT_TRUE(IsZipValid("46000", "IN"));
+ EXPECT_TRUE(IsZipValid("47000", "Indiana"));
+ EXPECT_TRUE(IsZipValid("66000", "KS"));
+ EXPECT_TRUE(IsZipValid("67000", "Kansas"));
+ EXPECT_TRUE(IsZipValid("40000", "KY"));
+ EXPECT_TRUE(IsZipValid("42000", "Kentucky"));
+ EXPECT_TRUE(IsZipValid("70000", "LA"));
+ EXPECT_TRUE(IsZipValid("71000", "Louisiana"));
+ EXPECT_TRUE(IsZipValid("01000", "MA"));
+ EXPECT_TRUE(IsZipValid("02000", "Massachusetts"));
+ EXPECT_TRUE(IsZipValid("20000", "MD"));
+ EXPECT_TRUE(IsZipValid("21000", "Maryland"));
+ EXPECT_TRUE(IsZipValid("03000", "ME"));
+ EXPECT_TRUE(IsZipValid("04000", "Maine"));
+ EXPECT_TRUE(IsZipValid("96000", "MH"));
+ EXPECT_TRUE(IsZipValid("96000", "Marshall Islands"));
+ EXPECT_TRUE(IsZipValid("48000", "MI"));
+ EXPECT_TRUE(IsZipValid("49000", "Michigan"));
+ EXPECT_TRUE(IsZipValid("55000", "MN"));
+ EXPECT_TRUE(IsZipValid("56000", "Minnesota"));
+ EXPECT_TRUE(IsZipValid("63000", "MO"));
+ EXPECT_TRUE(IsZipValid("65000", "Missouri"));
+ EXPECT_TRUE(IsZipValid("96000", "MP"));
+ EXPECT_TRUE(IsZipValid("96000", "Northern Mariana Islands"));
+ EXPECT_TRUE(IsZipValid("38000", "MS"));
+ EXPECT_TRUE(IsZipValid("39000", "Mississippi"));
+ EXPECT_TRUE(IsZipValid("55000", "MT"));
+ EXPECT_TRUE(IsZipValid("56000", "Montana"));
+ EXPECT_TRUE(IsZipValid("27000", "NC"));
+ EXPECT_TRUE(IsZipValid("28000", "North Carolina"));
+ EXPECT_TRUE(IsZipValid("58000", "ND"));
+ EXPECT_TRUE(IsZipValid("58000", "North Dakota"));
+ EXPECT_TRUE(IsZipValid("68000", "NE"));
+ EXPECT_TRUE(IsZipValid("69000", "Nebraska"));
+ EXPECT_TRUE(IsZipValid("03000", "NH"));
+ EXPECT_TRUE(IsZipValid("04000", "New Hampshire"));
+ EXPECT_TRUE(IsZipValid("07000", "NJ"));
+ EXPECT_TRUE(IsZipValid("08000", "New Jersey"));
+ EXPECT_TRUE(IsZipValid("87000", "NM"));
+ EXPECT_TRUE(IsZipValid("88000", "New Mexico"));
+ EXPECT_TRUE(IsZipValid("88000", "NV"));
+ EXPECT_TRUE(IsZipValid("89000", "Nevada"));
+ EXPECT_TRUE(IsZipValid("10000", "NY"));
+ EXPECT_TRUE(IsZipValid("14000", "New York"));
+ EXPECT_TRUE(IsZipValid("43000", "OH"));
+ EXPECT_TRUE(IsZipValid("45000", "Ohio"));
+ EXPECT_TRUE(IsZipValid("73000", "OK"));
+ EXPECT_TRUE(IsZipValid("74000", "Oklahoma"));
+ EXPECT_TRUE(IsZipValid("97000", "OR"));
+ EXPECT_TRUE(IsZipValid("97000", "Oregon"));
+ EXPECT_TRUE(IsZipValid("15000", "PA"));
+ EXPECT_TRUE(IsZipValid("19000", "Pennsylvania"));
+ EXPECT_TRUE(IsZipValid("06000", "PR"));
+ EXPECT_TRUE(IsZipValid("06000", "Puerto Rico"));
+ EXPECT_TRUE(IsZipValid("96000", "PW"));
+ EXPECT_TRUE(IsZipValid("96000", "Palau"));
+ EXPECT_TRUE(IsZipValid("02000", "RI"));
+ EXPECT_TRUE(IsZipValid("02000", "Rhode Island"));
+ EXPECT_TRUE(IsZipValid("29000", "SC"));
+ EXPECT_TRUE(IsZipValid("29000", "South Carolina"));
+ EXPECT_TRUE(IsZipValid("57000", "SD"));
+ EXPECT_TRUE(IsZipValid("57000", "South Dakota"));
+ EXPECT_TRUE(IsZipValid("37000", "TN"));
+ EXPECT_TRUE(IsZipValid("38000", "Tennessee"));
+ EXPECT_TRUE(IsZipValid("75000", "TX"));
+ EXPECT_TRUE(IsZipValid("79000", "Texas"));
+ EXPECT_TRUE(IsZipValid("84000", "UT"));
+ EXPECT_TRUE(IsZipValid("84000", "Utah"));
+ EXPECT_TRUE(IsZipValid("22000", "VA"));
+ EXPECT_TRUE(IsZipValid("24000", "Virginia"));
+ EXPECT_TRUE(IsZipValid("06000", "VI"));
+ EXPECT_TRUE(IsZipValid("09000", "Virgin Islands"));
+ EXPECT_TRUE(IsZipValid("05000", "VT"));
+ EXPECT_TRUE(IsZipValid("05000", "Vermont"));
+ EXPECT_TRUE(IsZipValid("98000", "WA"));
+ EXPECT_TRUE(IsZipValid("99000", "Washington"));
+ EXPECT_TRUE(IsZipValid("53000", "WI"));
+ EXPECT_TRUE(IsZipValid("54000", "Wisconsin"));
+ EXPECT_TRUE(IsZipValid("24000", "WV"));
+ EXPECT_TRUE(IsZipValid("26000", "West Virginia"));
+ EXPECT_TRUE(IsZipValid("82000", "WY"));
+ EXPECT_TRUE(IsZipValid("83000", "Wyoming"));
+}
+
+TEST_F(AddressDetectorTest, LocationName) {
+ EXPECT_FALSE(IsLocationName("str-eet"));
+ EXPECT_FALSE(IsLocationName("somewhere"));
+
+ // Test all supported street names and expected plural cases.
+ EXPECT_TRUE(IsLocationName("alley"));
+ EXPECT_TRUE(IsLocationName("annex"));
+ EXPECT_TRUE(IsLocationName("arcade"));
+ EXPECT_TRUE(IsLocationName("ave."));
+ EXPECT_TRUE(IsLocationName("avenue"));
+ EXPECT_TRUE(IsLocationName("alameda"));
+ EXPECT_TRUE(IsLocationName("bayou"));
+ EXPECT_TRUE(IsLocationName("beach"));
+ EXPECT_TRUE(IsLocationName("bend"));
+ EXPECT_TRUE(IsLocationName("bluff"));
+ EXPECT_TRUE(IsLocationName("bluffs"));
+ EXPECT_TRUE(IsLocationName("bottom"));
+ EXPECT_TRUE(IsLocationName("boulevard"));
+ EXPECT_TRUE(IsLocationName("branch"));
+ EXPECT_TRUE(IsLocationName("bridge"));
+ EXPECT_TRUE(IsLocationName("brook"));
+ EXPECT_TRUE(IsLocationName("brooks"));
+ EXPECT_TRUE(IsLocationName("burg"));
+ EXPECT_TRUE(IsLocationName("burgs"));
+ EXPECT_TRUE(IsLocationName("bypass"));
+ EXPECT_TRUE(IsLocationName("broadway"));
+ EXPECT_TRUE(IsLocationName("camino"));
+ EXPECT_TRUE(IsLocationName("camp"));
+ EXPECT_TRUE(IsLocationName("canyon"));
+ EXPECT_TRUE(IsLocationName("cape"));
+ EXPECT_TRUE(IsLocationName("causeway"));
+ EXPECT_TRUE(IsLocationName("center"));
+ EXPECT_TRUE(IsLocationName("centers"));
+ EXPECT_TRUE(IsLocationName("circle"));
+ EXPECT_TRUE(IsLocationName("circles"));
+ EXPECT_TRUE(IsLocationName("cliff"));
+ EXPECT_TRUE(IsLocationName("cliffs"));
+ EXPECT_TRUE(IsLocationName("club"));
+ EXPECT_TRUE(IsLocationName("common"));
+ EXPECT_TRUE(IsLocationName("corner"));
+ EXPECT_TRUE(IsLocationName("corners"));
+ EXPECT_TRUE(IsLocationName("course"));
+ EXPECT_TRUE(IsLocationName("court"));
+ EXPECT_TRUE(IsLocationName("courts"));
+ EXPECT_TRUE(IsLocationName("cove"));
+ EXPECT_TRUE(IsLocationName("coves"));
+ EXPECT_TRUE(IsLocationName("creek"));
+ EXPECT_TRUE(IsLocationName("crescent"));
+ EXPECT_TRUE(IsLocationName("crest"));
+ EXPECT_TRUE(IsLocationName("crossing"));
+ EXPECT_TRUE(IsLocationName("crossroad"));
+ EXPECT_TRUE(IsLocationName("curve"));
+ EXPECT_TRUE(IsLocationName("circulo"));
+ EXPECT_TRUE(IsLocationName("dale"));
+ EXPECT_TRUE(IsLocationName("dam"));
+ EXPECT_TRUE(IsLocationName("divide"));
+ EXPECT_TRUE(IsLocationName("drive"));
+ EXPECT_TRUE(IsLocationName("drives"));
+ EXPECT_TRUE(IsLocationName("estate"));
+ EXPECT_TRUE(IsLocationName("estates"));
+ EXPECT_TRUE(IsLocationName("expressway"));
+ EXPECT_TRUE(IsLocationName("extension"));
+ EXPECT_TRUE(IsLocationName("extensions"));
+ EXPECT_TRUE(IsLocationName("fall"));
+ EXPECT_TRUE(IsLocationName("falls"));
+ EXPECT_TRUE(IsLocationName("ferry"));
+ EXPECT_TRUE(IsLocationName("field"));
+ EXPECT_TRUE(IsLocationName("fields"));
+ EXPECT_TRUE(IsLocationName("flat"));
+ EXPECT_TRUE(IsLocationName("flats"));
+ EXPECT_TRUE(IsLocationName("ford"));
+ EXPECT_TRUE(IsLocationName("fords"));
+ EXPECT_TRUE(IsLocationName("forest"));
+ EXPECT_TRUE(IsLocationName("forge"));
+ EXPECT_TRUE(IsLocationName("forges"));
+ EXPECT_TRUE(IsLocationName("fork"));
+ EXPECT_TRUE(IsLocationName("forks"));
+ EXPECT_TRUE(IsLocationName("fort"));
+ EXPECT_TRUE(IsLocationName("freeway"));
+ EXPECT_TRUE(IsLocationName("garden"));
+ EXPECT_TRUE(IsLocationName("gardens"));
+ EXPECT_TRUE(IsLocationName("gateway"));
+ EXPECT_TRUE(IsLocationName("glen"));
+ EXPECT_TRUE(IsLocationName("glens"));
+ EXPECT_TRUE(IsLocationName("green"));
+ EXPECT_TRUE(IsLocationName("greens"));
+ EXPECT_TRUE(IsLocationName("grove"));
+ EXPECT_TRUE(IsLocationName("groves"));
+ EXPECT_TRUE(IsLocationName("harbor"));
+ EXPECT_TRUE(IsLocationName("harbors"));
+ EXPECT_TRUE(IsLocationName("haven"));
+ EXPECT_TRUE(IsLocationName("heights"));
+ EXPECT_TRUE(IsLocationName("highway"));
+ EXPECT_TRUE(IsLocationName("hill"));
+ EXPECT_TRUE(IsLocationName("hills"));
+ EXPECT_TRUE(IsLocationName("hollow"));
+ EXPECT_TRUE(IsLocationName("inlet"));
+ EXPECT_TRUE(IsLocationName("island"));
+ EXPECT_TRUE(IsLocationName("islands"));
+ EXPECT_TRUE(IsLocationName("isle"));
+ EXPECT_TRUE(IsLocationName("junction"));
+ EXPECT_TRUE(IsLocationName("junctions"));
+ EXPECT_TRUE(IsLocationName("key"));
+ EXPECT_TRUE(IsLocationName("keys"));
+ EXPECT_TRUE(IsLocationName("knoll"));
+ EXPECT_TRUE(IsLocationName("knolls"));
+ EXPECT_TRUE(IsLocationName("lake"));
+ EXPECT_TRUE(IsLocationName("lakes"));
+ EXPECT_TRUE(IsLocationName("land"));
+ EXPECT_TRUE(IsLocationName("landing"));
+ EXPECT_TRUE(IsLocationName("lane"));
+ EXPECT_TRUE(IsLocationName("light"));
+ EXPECT_TRUE(IsLocationName("lights"));
+ EXPECT_TRUE(IsLocationName("loaf"));
+ EXPECT_TRUE(IsLocationName("lock"));
+ EXPECT_TRUE(IsLocationName("locks"));
+ EXPECT_TRUE(IsLocationName("lodge"));
+ EXPECT_TRUE(IsLocationName("loop"));
+ EXPECT_TRUE(IsLocationName("mall"));
+ EXPECT_TRUE(IsLocationName("manor"));
+ EXPECT_TRUE(IsLocationName("manors"));
+ EXPECT_TRUE(IsLocationName("meadow"));
+ EXPECT_TRUE(IsLocationName("meadows"));
+ EXPECT_TRUE(IsLocationName("mews"));
+ EXPECT_TRUE(IsLocationName("mill"));
+ EXPECT_TRUE(IsLocationName("mills"));
+ EXPECT_TRUE(IsLocationName("mission"));
+ EXPECT_TRUE(IsLocationName("motorway"));
+ EXPECT_TRUE(IsLocationName("mount"));
+ EXPECT_TRUE(IsLocationName("mountain"));
+ EXPECT_TRUE(IsLocationName("mountains"));
+ EXPECT_TRUE(IsLocationName("neck"));
+ EXPECT_TRUE(IsLocationName("orchard"));
+ EXPECT_TRUE(IsLocationName("oval"));
+ EXPECT_TRUE(IsLocationName("overpass"));
+ EXPECT_TRUE(IsLocationName("park"));
+ EXPECT_TRUE(IsLocationName("parks"));
+ EXPECT_TRUE(IsLocationName("parkway"));
+ EXPECT_TRUE(IsLocationName("parkways"));
+ EXPECT_TRUE(IsLocationName("pass"));
+ EXPECT_TRUE(IsLocationName("passage"));
+ EXPECT_TRUE(IsLocationName("path"));
+ EXPECT_TRUE(IsLocationName("pike"));
+ EXPECT_TRUE(IsLocationName("pine"));
+ EXPECT_TRUE(IsLocationName("pines"));
+ EXPECT_TRUE(IsLocationName("plain"));
+ EXPECT_TRUE(IsLocationName("plains"));
+ EXPECT_TRUE(IsLocationName("plaza"));
+ EXPECT_TRUE(IsLocationName("point"));
+ EXPECT_TRUE(IsLocationName("points"));
+ EXPECT_TRUE(IsLocationName("port"));
+ EXPECT_TRUE(IsLocationName("ports"));
+ EXPECT_TRUE(IsLocationName("prairie"));
+ EXPECT_TRUE(IsLocationName("privada"));
+ EXPECT_TRUE(IsLocationName("radial"));
+ EXPECT_TRUE(IsLocationName("ramp"));
+ EXPECT_TRUE(IsLocationName("ranch"));
+ EXPECT_TRUE(IsLocationName("rapid"));
+ EXPECT_TRUE(IsLocationName("rapids"));
+ EXPECT_TRUE(IsLocationName("rest"));
+ EXPECT_TRUE(IsLocationName("ridge"));
+ EXPECT_TRUE(IsLocationName("ridges"));
+ EXPECT_TRUE(IsLocationName("river"));
+ EXPECT_TRUE(IsLocationName("road"));
+ EXPECT_TRUE(IsLocationName("roads"));
+ EXPECT_TRUE(IsLocationName("route"));
+ EXPECT_TRUE(IsLocationName("row"));
+ EXPECT_TRUE(IsLocationName("rue"));
+ EXPECT_TRUE(IsLocationName("run"));
+ EXPECT_TRUE(IsLocationName("shoal"));
+ EXPECT_TRUE(IsLocationName("shoals"));
+ EXPECT_TRUE(IsLocationName("shore"));
+ EXPECT_TRUE(IsLocationName("shores"));
+ EXPECT_TRUE(IsLocationName("skyway"));
+ EXPECT_TRUE(IsLocationName("spring"));
+ EXPECT_TRUE(IsLocationName("springs"));
+ EXPECT_TRUE(IsLocationName("spur"));
+ EXPECT_TRUE(IsLocationName("spurs"));
+ EXPECT_TRUE(IsLocationName("square"));
+ EXPECT_TRUE(IsLocationName("squares"));
+ EXPECT_TRUE(IsLocationName("station"));
+ EXPECT_TRUE(IsLocationName("stravenue"));
+ EXPECT_TRUE(IsLocationName("stream"));
+ EXPECT_TRUE(IsLocationName("st."));
+ EXPECT_TRUE(IsLocationName("street"));
+ EXPECT_TRUE(IsLocationName("streets"));
+ EXPECT_TRUE(IsLocationName("summit"));
+ EXPECT_TRUE(IsLocationName("speedway"));
+ EXPECT_TRUE(IsLocationName("terrace"));
+ EXPECT_TRUE(IsLocationName("throughway"));
+ EXPECT_TRUE(IsLocationName("trace"));
+ EXPECT_TRUE(IsLocationName("track"));
+ EXPECT_TRUE(IsLocationName("trafficway"));
+ EXPECT_TRUE(IsLocationName("trail"));
+ EXPECT_TRUE(IsLocationName("tunnel"));
+ EXPECT_TRUE(IsLocationName("turnpike"));
+ EXPECT_TRUE(IsLocationName("underpass"));
+ EXPECT_TRUE(IsLocationName("union"));
+ EXPECT_TRUE(IsLocationName("unions"));
+ EXPECT_TRUE(IsLocationName("valley"));
+ EXPECT_TRUE(IsLocationName("valleys"));
+ EXPECT_TRUE(IsLocationName("viaduct"));
+ EXPECT_TRUE(IsLocationName("view"));
+ EXPECT_TRUE(IsLocationName("views"));
+ EXPECT_TRUE(IsLocationName("village"));
+ EXPECT_TRUE(IsLocationName("villages"));
+ EXPECT_TRUE(IsLocationName("ville"));
+ EXPECT_TRUE(IsLocationName("vista"));
+ EXPECT_TRUE(IsLocationName("walk"));
+ EXPECT_TRUE(IsLocationName("walks"));
+ EXPECT_TRUE(IsLocationName("wall"));
+ EXPECT_TRUE(IsLocationName("way"));
+ EXPECT_TRUE(IsLocationName("ways"));
+ EXPECT_TRUE(IsLocationName("well"));
+ EXPECT_TRUE(IsLocationName("wells"));
+ EXPECT_TRUE(IsLocationName("xing"));
+ EXPECT_TRUE(IsLocationName("xrd"));
+}
+
+TEST_F(AddressDetectorTest, NumberPrefixCases) {
+ EXPECT_EQ(FindAddress("Cafe 21\n750 Fifth Ave. San Diego, California 92101"),
+ "750 Fifth Ave. San Diego, California 92101");
+ EXPECT_EQ(FindAddress(
+ "Century City 15\n 10250 Santa Monica Boulevard Los Angeles, CA 90067"),
+ "10250 Santa Monica Boulevard Los Angeles, CA 90067");
+ EXPECT_EQ(FindAddress("123 45\n67 My Street, Somewhere, NY 10000"),
+ "67 My Street, Somewhere, NY 10000");
+ EXPECT_TRUE(IsAddress("123 4th Avenue, Somewhere in NY 10000"));
+}
+
+TEST_F(AddressDetectorTest, FullAddress) {
+ // Test US Google corporate addresses. Expects a full string match.
+ EXPECT_TRUE(IsAddress("1600 Amphitheatre Parkway Mountain View, CA 94043"));
+ EXPECT_TRUE(IsAddress("201 S. Division St. Suite 500 Ann Arbor, MI 48104"));
+ EXPECT_TRUE(ContainsAddress(
+ "Millennium at Midtown 10 10th Street NE Suite 600 Atlanta, GA 30309"));
+ EXPECT_TRUE(IsAddress(
+ "9606 North MoPac Expressway Suite 400 Austin, TX 78759"));
+ EXPECT_TRUE(IsAddress("2590 Pearl Street Suite 100 Boulder, CO 80302"));
+ EXPECT_TRUE(IsAddress("5 Cambridge Center, Floors 3-6 Cambridge, MA 02142"));
+ EXPECT_TRUE(IsAddress("410 Market St Suite 415 Chapel Hill, NC 27516"));
+ EXPECT_TRUE(IsAddress("20 West Kinzie St. Chicago, IL 60654"));
+ EXPECT_TRUE(IsAddress("114 Willits Street Birmingham, MI 48009"));
+ EXPECT_TRUE(IsAddress("19540 Jamboree Road 2nd Floor Irvine, CA 92612"));
+ EXPECT_TRUE(IsAddress("747 6th Street South, Kirkland, WA 98033"));
+ EXPECT_TRUE(IsAddress("301 S. Blount St. Suite 301 Madison, WI 53703"));
+ EXPECT_TRUE(IsAddress("76 Ninth Avenue 4th Floor New York, NY 10011"));
+ EXPECT_TRUE(ContainsAddress(
+ "Chelsea Markset Space, 75 Ninth Avenue 2nd and 4th Floors New York, \
+ NY 10011"));
+ EXPECT_TRUE(IsAddress("6425 Penn Ave. Suite 700 Pittsburgh, PA 15206"));
+ EXPECT_TRUE(IsAddress("1818 Library Street Suite 400 Reston, VA 20190"));
+ EXPECT_TRUE(IsAddress("345 Spear Street Floors 2-4 San Francisco, CA 94105"));
+ EXPECT_TRUE(IsAddress("604 Arizona Avenue Santa Monica, CA 90401"));
+ EXPECT_TRUE(IsAddress("651 N. 34th St. Seattle, WA 98103"));
+ EXPECT_TRUE(IsAddress(
+ "1101 New York Avenue, N.W. Second Floor Washington, DC 20005"));
+
+ // Other tests.
+ EXPECT_TRUE(IsAddress("57th Street and Lake Shore Drive\nChicago, IL 60637"));
+ EXPECT_TRUE(IsAddress("308 Congress Street Boston, MA 02210"));
+ EXPECT_TRUE(ContainsAddress(
+ "Central Park West at 79th Street, New York, NY, 10024-5192"));
+ EXPECT_TRUE(ContainsAddress(
+ "Lincoln Park | 100 34th Avenue • San Francisco, CA 94121 | 41575036"));
+
+ EXPECT_EQ(FindAddress("Lorem ipsum dolor sit amet, consectetur adipisicing " \
+ "elit, sed do 1600 Amphitheatre Parkway Mountain View, CA 94043 " \
+ "eiusmod tempor incididunt ut labore et dolore magna aliqua."),
+ "1600 Amphitheatre Parkway Mountain View, CA 94043");
+
+ EXPECT_EQ(FindAddress("2590 Pearl Street Suite 100 Boulder, CO 80302 6425 " \
+ "Penn Ave. Suite 700 Pittsburgh, PA 15206"),
+ "2590 Pearl Street Suite 100 Boulder, CO 80302");
+
+ EXPECT_TRUE(ContainsAddress(
+ "住所は 1600 Amphitheatre Parkway Mountain View, CA 94043 です。"));
+
+ EXPECT_FALSE(ContainsAddress("1 st. too-short, CA 90000"));
+ EXPECT_TRUE(ContainsAddress("1 st. long enough, CA 90000"));
+
+ EXPECT_TRUE(ContainsAddress("1 st. some city in al 35000"));
+ EXPECT_FALSE(ContainsAddress("1 book st Aquinas et al 35000"));
+
+ EXPECT_FALSE(ContainsAddress("1 this comes too late: street, CA 90000"));
+ EXPECT_TRUE(ContainsAddress("1 this is ok: street, CA 90000"));
+
+ EXPECT_FALSE(ContainsAddress(
+ "1 street I love verbosity, so I'm writing an address with too many " \
+ "words CA 90000"));
+ EXPECT_TRUE(ContainsAddress("1 street 2 3 4 5 6 7 8 9 10 11 12, CA 90000"));
+
+ EXPECT_TRUE(IsAddress("79th Street 1st Floor New York City, NY 10024-5192"));
+
+ EXPECT_FALSE(ContainsAddress("123 Fake Street, Springfield, Springfield"));
+ EXPECT_FALSE(ContainsAddress("999 Street Avenue, City, ZZ 98765"));
+ EXPECT_FALSE(ContainsAddress("76 Here be dragons, CA 94043"));
+ EXPECT_FALSE(ContainsAddress("1 This, has, too* many, lines, to, be* valid"));
+ EXPECT_FALSE(ContainsAddress(
+ "1 Supercalifragilisticexpialidocious is too long, CA 90000"));
+ EXPECT_FALSE(ContainsAddress(""));
+}