1 /* 2 * Copyright 2018 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package androidx.core.text.util; 18 19 import android.support.test.filters.SmallTest; 20 import android.support.test.runner.AndroidJUnit4; 21 22 import org.junit.Assert; 23 import org.junit.Test; 24 import org.junit.runner.RunWith; 25 26 import java.util.regex.MatchResult; 27 28 /** 29 * Tests for FindAddress implementation. 30 * 31 * https://cs.chromium.org/chromium/src/android_webview/javatests/src/org/chromium 32 * /android_webview/test/FindAddressTest.java 33 */ 34 @SmallTest 35 @RunWith(AndroidJUnit4.class) 36 public class FindAddressTest { 37 private void assertExpectedMatch(MatchResult match, String exptectedMatch) { 38 Assert.assertNotNull(match); 39 Assert.assertEquals(match.group(0), exptectedMatch); 40 } 41 42 private void assertIsAddress(String address) { 43 Assert.assertEquals(address, FindAddress.findAddress(address)); 44 } 45 46 private boolean containsAddress(String address) { 47 return FindAddress.findAddress(address) != null; 48 } 49 50 private boolean isAddress(String address) { 51 return FindAddress.findAddress(address).equals(address); 52 } 53 54 @Test 55 public void testFullAddress() { 56 // Test US Google corporate addresses. Expects a full string match. 57 assertIsAddress("1600 Amphitheatre Parkway Mountain View, CA 94043"); 58 assertIsAddress("201 S. Division St. Suite 500 Ann Arbor, MI 48104"); 59 Assert.assertTrue(containsAddress( 60 "Millennium at Midtown 10 10th Street NE Suite 600 Atlanta, GA 30309")); 61 assertIsAddress("9606 North MoPac Expressway Suite 400 Austin, TX 78759"); 62 assertIsAddress("2590 Pearl Street Suite 100 Boulder, CO 80302"); 63 assertIsAddress("5 Cambridge Center, Floors 3-6 Cambridge, MA 02142"); 64 assertIsAddress("410 Market St Suite 415 Chapel Hill, NC 27516"); 65 assertIsAddress("20 West Kinzie St. Chicago, IL 60654"); 66 assertIsAddress("114 Willits Street Birmingham, MI 48009"); 67 assertIsAddress("19540 Jamboree Road 2nd Floor Irvine, CA 92612"); 68 assertIsAddress("747 6th Street South, Kirkland, WA 98033"); 69 assertIsAddress("301 S. Blount St. Suite 301 Madison, WI 53703"); 70 assertIsAddress("76 Ninth Avenue 4th Floor New York, NY 10011"); 71 Assert.assertTrue(containsAddress( 72 "Chelsea Markset Space, 75 Ninth Avenue 2nd and 4th Floors New York, NY 10011")); 73 assertIsAddress("6425 Penn Ave. Suite 700 Pittsburgh, PA 15206"); 74 assertIsAddress("1818 Library Street Suite 400 Reston, VA 20190"); 75 assertIsAddress("345 Spear Street Floors 2-4 San Francisco, CA 94105"); 76 assertIsAddress("604 Arizona Avenue Santa Monica, CA 90401"); 77 assertIsAddress("651 N. 34th St. Seattle, WA 98103"); 78 Assert.assertTrue( 79 isAddress("1101 New York Avenue, N.W. Second Floor Washington, DC 20005")); 80 81 // Other tests. 82 assertIsAddress("57th Street and Lake Shore Drive\nChicago, IL 60637"); 83 assertIsAddress("308 Congress Street Boston, MA 02210"); 84 Assert.assertTrue( 85 containsAddress("Central Park West at 79th Street, New York, NY, 10024-5192")); 86 Assert.assertTrue(containsAddress( 87 "Lincoln Park | 100 34th Avenue San Francisco, CA 94121 | 41575036")); 88 89 Assert.assertEquals( 90 FindAddress.findAddress( 91 "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do " 92 + "1600 Amphitheatre Parkway Mountain View, CA 94043 eiusmod " 93 + "tempor incididunt ut labore et dolore magna aliqua."), 94 "1600 Amphitheatre Parkway Mountain View, CA 94043"); 95 96 Assert.assertEquals(FindAddress.findAddress("2590 Pearl Street Suite 100 Boulder, CO 80302 " 97 + "6425 Penn Ave. Suite 700 Pittsburgh, PA 15206"), 98 "2590 Pearl Street Suite 100 Boulder, CO 80302"); 99 100 assertIsAddress("5400 Preston Oaks Rd Dallas TX 75254"); 101 assertIsAddress("5400 Preston Oaks Road Dallas TX 75254"); 102 assertIsAddress("5400 Preston Oaks Ave Dallas TX 75254"); 103 104 Assert.assertTrue( 105 containsAddress(" 1600 Amphitheatre Parkway Mountain View, CA 94043 ")); 106 107 Assert.assertFalse(containsAddress("1 st. too-short, CA 90000")); 108 Assert.assertTrue(containsAddress("1 st. long enough, CA 90000")); 109 110 Assert.assertTrue(containsAddress("1 st. some city in al 35000")); 111 Assert.assertFalse(containsAddress("1 book st Aquinas et al 35000")); 112 113 Assert.assertFalse(containsAddress("1 this comes too late: street, CA 90000")); 114 Assert.assertTrue(containsAddress("1 this is ok: street, CA 90000")); 115 116 Assert.assertFalse( 117 containsAddress("1 street I love verbosity, so I'm writing an address with " 118 + "too many words CA 90000")); 119 Assert.assertTrue(containsAddress("1 street 2 3 4 5 6 7 8 9 10 11 12, CA 90000")); 120 121 assertIsAddress("79th Street 1st Floor New York City, NY 10024-5192"); 122 123 assertIsAddress("79th Street 1st Floor New York 10024-5192"); 124 assertIsAddress("79th Street 1st Floor New York 10024-5192"); 125 Assert.assertNull(FindAddress.findAddress("79th Street 1st Floor New\nYork 10024-5192")); 126 Assert.assertNull(FindAddress.findAddress("79th Street 1st Floor New, York 10024-5192")); 127 128 Assert.assertFalse(containsAddress("123 Fake Street, Springfield, Springfield")); 129 Assert.assertFalse(containsAddress("999 Street Avenue, City, ZZ 98765")); 130 Assert.assertFalse(containsAddress("76 Here be dragons, CA 94043")); 131 Assert.assertFalse(containsAddress("1 This, has, too* many, lines, to, be* valid")); 132 Assert.assertFalse( 133 containsAddress("1 Supercalifragilisticexpialidocious is too long, CA 90000")); 134 Assert.assertFalse(containsAddress("")); 135 } 136 137 @Test 138 public void testFullAddressWithoutZipCode() { 139 assertIsAddress("1600 Amphitheatre Parkway Mountain View, CA"); 140 assertIsAddress("201 S. Division St. Suite 500 Ann Arbor, MI"); 141 142 // Check that addresses without a zip code are only accepted at the end of the string. 143 // This isn't implied by the documentation but was the case in the old implementation 144 // and fixing this bug creates a lot of false positives while fixing relatively few 145 // false negatives. In these examples, "one point" is parsed as a street and "as" is a 146 // state abbreviation (this is taken from a false positive reported in a bug). 147 Assert.assertTrue(containsAddress("one point I was as")); 148 Assert.assertTrue(containsAddress("At one point I was as ignorant as")); 149 Assert.assertFalse(containsAddress("At one point I was as ignorant as them")); 150 } 151 152 @Test 153 public void testNumberPrefixCases() { 154 Assert.assertEquals( 155 FindAddress.findAddress("Cafe 21\n750 Fifth Ave. San Diego, California 92101"), 156 "750 Fifth Ave. San Diego, California 92101"); 157 Assert.assertEquals( 158 FindAddress.findAddress( 159 "Century City 15\n 10250 Santa Monica Boulevard Los Angeles, CA 90067"), 160 "10250 Santa Monica Boulevard Los Angeles, CA 90067"); 161 Assert.assertEquals(FindAddress.findAddress("123 45\n67 My Street, Somewhere, NY 10000"), 162 "67 My Street, Somewhere, NY 10000"); 163 assertIsAddress("123 4th Avenue, Somewhere in NY 10000"); 164 } 165 166 @Test 167 public void testLocationName() { 168 Assert.assertFalse(FindAddress.isValidLocationName("str-eet")); 169 Assert.assertFalse(FindAddress.isValidLocationName("somewhere")); 170 171 // Test all supported street names and expected plural cases. 172 Assert.assertTrue(FindAddress.isValidLocationName("alley")); 173 Assert.assertTrue(FindAddress.isValidLocationName("annex")); 174 Assert.assertTrue(FindAddress.isValidLocationName("arcade")); 175 Assert.assertTrue(FindAddress.isValidLocationName("ave.")); 176 Assert.assertTrue(FindAddress.isValidLocationName("avenue")); 177 Assert.assertTrue(FindAddress.isValidLocationName("alameda")); 178 Assert.assertTrue(FindAddress.isValidLocationName("bayou")); 179 Assert.assertTrue(FindAddress.isValidLocationName("beach")); 180 Assert.assertTrue(FindAddress.isValidLocationName("bend")); 181 Assert.assertTrue(FindAddress.isValidLocationName("bluff")); 182 Assert.assertTrue(FindAddress.isValidLocationName("bluffs")); 183 Assert.assertTrue(FindAddress.isValidLocationName("bottom")); 184 Assert.assertTrue(FindAddress.isValidLocationName("boulevard")); 185 Assert.assertTrue(FindAddress.isValidLocationName("branch")); 186 Assert.assertTrue(FindAddress.isValidLocationName("bridge")); 187 Assert.assertTrue(FindAddress.isValidLocationName("brook")); 188 Assert.assertTrue(FindAddress.isValidLocationName("brooks")); 189 Assert.assertTrue(FindAddress.isValidLocationName("burg")); 190 Assert.assertTrue(FindAddress.isValidLocationName("burgs")); 191 Assert.assertTrue(FindAddress.isValidLocationName("bypass")); 192 Assert.assertTrue(FindAddress.isValidLocationName("broadway")); 193 Assert.assertTrue(FindAddress.isValidLocationName("camino")); 194 Assert.assertTrue(FindAddress.isValidLocationName("camp")); 195 Assert.assertTrue(FindAddress.isValidLocationName("canyon")); 196 Assert.assertTrue(FindAddress.isValidLocationName("cape")); 197 Assert.assertTrue(FindAddress.isValidLocationName("causeway")); 198 Assert.assertTrue(FindAddress.isValidLocationName("center")); 199 Assert.assertTrue(FindAddress.isValidLocationName("centers")); 200 Assert.assertTrue(FindAddress.isValidLocationName("circle")); 201 Assert.assertTrue(FindAddress.isValidLocationName("circles")); 202 Assert.assertTrue(FindAddress.isValidLocationName("cliff")); 203 Assert.assertTrue(FindAddress.isValidLocationName("cliffs")); 204 Assert.assertTrue(FindAddress.isValidLocationName("club")); 205 Assert.assertTrue(FindAddress.isValidLocationName("common")); 206 Assert.assertTrue(FindAddress.isValidLocationName("corner")); 207 Assert.assertTrue(FindAddress.isValidLocationName("corners")); 208 Assert.assertTrue(FindAddress.isValidLocationName("course")); 209 Assert.assertTrue(FindAddress.isValidLocationName("court")); 210 Assert.assertTrue(FindAddress.isValidLocationName("courts")); 211 Assert.assertTrue(FindAddress.isValidLocationName("cove")); 212 Assert.assertTrue(FindAddress.isValidLocationName("coves")); 213 Assert.assertTrue(FindAddress.isValidLocationName("creek")); 214 Assert.assertTrue(FindAddress.isValidLocationName("crescent")); 215 Assert.assertTrue(FindAddress.isValidLocationName("crest")); 216 Assert.assertTrue(FindAddress.isValidLocationName("crossing")); 217 Assert.assertTrue(FindAddress.isValidLocationName("crossroad")); 218 Assert.assertTrue(FindAddress.isValidLocationName("curve")); 219 Assert.assertTrue(FindAddress.isValidLocationName("circulo")); 220 Assert.assertTrue(FindAddress.isValidLocationName("dale")); 221 Assert.assertTrue(FindAddress.isValidLocationName("dam")); 222 Assert.assertTrue(FindAddress.isValidLocationName("divide")); 223 Assert.assertTrue(FindAddress.isValidLocationName("drive")); 224 Assert.assertTrue(FindAddress.isValidLocationName("drives")); 225 Assert.assertTrue(FindAddress.isValidLocationName("estate")); 226 Assert.assertTrue(FindAddress.isValidLocationName("estates")); 227 Assert.assertTrue(FindAddress.isValidLocationName("expressway")); 228 Assert.assertTrue(FindAddress.isValidLocationName("extension")); 229 Assert.assertTrue(FindAddress.isValidLocationName("extensions")); 230 Assert.assertTrue(FindAddress.isValidLocationName("fall")); 231 Assert.assertTrue(FindAddress.isValidLocationName("falls")); 232 Assert.assertTrue(FindAddress.isValidLocationName("ferry")); 233 Assert.assertTrue(FindAddress.isValidLocationName("field")); 234 Assert.assertTrue(FindAddress.isValidLocationName("fields")); 235 Assert.assertTrue(FindAddress.isValidLocationName("flat")); 236 Assert.assertTrue(FindAddress.isValidLocationName("flats")); 237 Assert.assertTrue(FindAddress.isValidLocationName("ford")); 238 Assert.assertTrue(FindAddress.isValidLocationName("fords")); 239 Assert.assertTrue(FindAddress.isValidLocationName("forest")); 240 Assert.assertTrue(FindAddress.isValidLocationName("forge")); 241 Assert.assertTrue(FindAddress.isValidLocationName("forges")); 242 Assert.assertTrue(FindAddress.isValidLocationName("fork")); 243 Assert.assertTrue(FindAddress.isValidLocationName("forks")); 244 Assert.assertTrue(FindAddress.isValidLocationName("fort")); 245 Assert.assertTrue(FindAddress.isValidLocationName("freeway")); 246 Assert.assertTrue(FindAddress.isValidLocationName("garden")); 247 Assert.assertTrue(FindAddress.isValidLocationName("gardens")); 248 Assert.assertTrue(FindAddress.isValidLocationName("gateway")); 249 Assert.assertTrue(FindAddress.isValidLocationName("glen")); 250 Assert.assertTrue(FindAddress.isValidLocationName("glens")); 251 Assert.assertTrue(FindAddress.isValidLocationName("green")); 252 Assert.assertTrue(FindAddress.isValidLocationName("greens")); 253 Assert.assertTrue(FindAddress.isValidLocationName("grove")); 254 Assert.assertTrue(FindAddress.isValidLocationName("groves")); 255 Assert.assertTrue(FindAddress.isValidLocationName("harbor")); 256 Assert.assertTrue(FindAddress.isValidLocationName("harbors")); 257 Assert.assertTrue(FindAddress.isValidLocationName("haven")); 258 Assert.assertTrue(FindAddress.isValidLocationName("heights")); 259 Assert.assertTrue(FindAddress.isValidLocationName("highway")); 260 Assert.assertTrue(FindAddress.isValidLocationName("hill")); 261 Assert.assertTrue(FindAddress.isValidLocationName("hills")); 262 Assert.assertTrue(FindAddress.isValidLocationName("hollow")); 263 Assert.assertTrue(FindAddress.isValidLocationName("inlet")); 264 Assert.assertTrue(FindAddress.isValidLocationName("island")); 265 Assert.assertTrue(FindAddress.isValidLocationName("islands")); 266 Assert.assertTrue(FindAddress.isValidLocationName("isle")); 267 Assert.assertTrue(FindAddress.isValidLocationName("junction")); 268 Assert.assertTrue(FindAddress.isValidLocationName("junctions")); 269 Assert.assertTrue(FindAddress.isValidLocationName("key")); 270 Assert.assertTrue(FindAddress.isValidLocationName("keys")); 271 Assert.assertTrue(FindAddress.isValidLocationName("knoll")); 272 Assert.assertTrue(FindAddress.isValidLocationName("knolls")); 273 Assert.assertTrue(FindAddress.isValidLocationName("lake")); 274 Assert.assertTrue(FindAddress.isValidLocationName("lakes")); 275 Assert.assertTrue(FindAddress.isValidLocationName("land")); 276 Assert.assertTrue(FindAddress.isValidLocationName("landing")); 277 Assert.assertTrue(FindAddress.isValidLocationName("lane")); 278 Assert.assertTrue(FindAddress.isValidLocationName("light")); 279 Assert.assertTrue(FindAddress.isValidLocationName("lights")); 280 Assert.assertTrue(FindAddress.isValidLocationName("loaf")); 281 Assert.assertTrue(FindAddress.isValidLocationName("lock")); 282 Assert.assertTrue(FindAddress.isValidLocationName("locks")); 283 Assert.assertTrue(FindAddress.isValidLocationName("lodge")); 284 Assert.assertTrue(FindAddress.isValidLocationName("loop")); 285 Assert.assertTrue(FindAddress.isValidLocationName("mall")); 286 Assert.assertTrue(FindAddress.isValidLocationName("manor")); 287 Assert.assertTrue(FindAddress.isValidLocationName("manors")); 288 Assert.assertTrue(FindAddress.isValidLocationName("meadow")); 289 Assert.assertTrue(FindAddress.isValidLocationName("meadows")); 290 Assert.assertTrue(FindAddress.isValidLocationName("mews")); 291 Assert.assertTrue(FindAddress.isValidLocationName("mill")); 292 Assert.assertTrue(FindAddress.isValidLocationName("mills")); 293 Assert.assertTrue(FindAddress.isValidLocationName("mission")); 294 Assert.assertTrue(FindAddress.isValidLocationName("motorway")); 295 Assert.assertTrue(FindAddress.isValidLocationName("mount")); 296 Assert.assertTrue(FindAddress.isValidLocationName("mountain")); 297 Assert.assertTrue(FindAddress.isValidLocationName("mountains")); 298 Assert.assertTrue(FindAddress.isValidLocationName("neck")); 299 Assert.assertTrue(FindAddress.isValidLocationName("orchard")); 300 Assert.assertTrue(FindAddress.isValidLocationName("oval")); 301 Assert.assertTrue(FindAddress.isValidLocationName("overpass")); 302 Assert.assertTrue(FindAddress.isValidLocationName("park")); 303 Assert.assertTrue(FindAddress.isValidLocationName("parks")); 304 Assert.assertTrue(FindAddress.isValidLocationName("parkway")); 305 Assert.assertTrue(FindAddress.isValidLocationName("parkways")); 306 Assert.assertTrue(FindAddress.isValidLocationName("pass")); 307 Assert.assertTrue(FindAddress.isValidLocationName("passage")); 308 Assert.assertTrue(FindAddress.isValidLocationName("path")); 309 Assert.assertTrue(FindAddress.isValidLocationName("pike")); 310 Assert.assertTrue(FindAddress.isValidLocationName("pine")); 311 Assert.assertTrue(FindAddress.isValidLocationName("pines")); 312 Assert.assertTrue(FindAddress.isValidLocationName("plain")); 313 Assert.assertTrue(FindAddress.isValidLocationName("plains")); 314 Assert.assertTrue(FindAddress.isValidLocationName("plaza")); 315 Assert.assertTrue(FindAddress.isValidLocationName("point")); 316 Assert.assertTrue(FindAddress.isValidLocationName("points")); 317 Assert.assertTrue(FindAddress.isValidLocationName("port")); 318 Assert.assertTrue(FindAddress.isValidLocationName("ports")); 319 Assert.assertTrue(FindAddress.isValidLocationName("prairie")); 320 Assert.assertTrue(FindAddress.isValidLocationName("privada")); 321 Assert.assertTrue(FindAddress.isValidLocationName("radial")); 322 Assert.assertTrue(FindAddress.isValidLocationName("ramp")); 323 Assert.assertTrue(FindAddress.isValidLocationName("ranch")); 324 Assert.assertTrue(FindAddress.isValidLocationName("rapid")); 325 Assert.assertTrue(FindAddress.isValidLocationName("rapids")); 326 Assert.assertTrue(FindAddress.isValidLocationName("rd")); 327 Assert.assertTrue(FindAddress.isValidLocationName("rd.")); 328 Assert.assertTrue(FindAddress.isValidLocationName("rest")); 329 Assert.assertTrue(FindAddress.isValidLocationName("ridge")); 330 Assert.assertTrue(FindAddress.isValidLocationName("ridges")); 331 Assert.assertTrue(FindAddress.isValidLocationName("river")); 332 Assert.assertTrue(FindAddress.isValidLocationName("road")); 333 Assert.assertTrue(FindAddress.isValidLocationName("roads")); 334 Assert.assertTrue(FindAddress.isValidLocationName("route")); 335 Assert.assertTrue(FindAddress.isValidLocationName("row")); 336 Assert.assertTrue(FindAddress.isValidLocationName("rue")); 337 Assert.assertTrue(FindAddress.isValidLocationName("run")); 338 Assert.assertTrue(FindAddress.isValidLocationName("shoal")); 339 Assert.assertTrue(FindAddress.isValidLocationName("shoals")); 340 Assert.assertTrue(FindAddress.isValidLocationName("shore")); 341 Assert.assertTrue(FindAddress.isValidLocationName("shores")); 342 Assert.assertTrue(FindAddress.isValidLocationName("skyway")); 343 Assert.assertTrue(FindAddress.isValidLocationName("spring")); 344 Assert.assertTrue(FindAddress.isValidLocationName("springs")); 345 Assert.assertTrue(FindAddress.isValidLocationName("spur")); 346 Assert.assertTrue(FindAddress.isValidLocationName("spurs")); 347 Assert.assertTrue(FindAddress.isValidLocationName("square")); 348 Assert.assertTrue(FindAddress.isValidLocationName("squares")); 349 Assert.assertTrue(FindAddress.isValidLocationName("station")); 350 Assert.assertTrue(FindAddress.isValidLocationName("stravenue")); 351 Assert.assertTrue(FindAddress.isValidLocationName("stream")); 352 Assert.assertTrue(FindAddress.isValidLocationName("st.")); 353 Assert.assertTrue(FindAddress.isValidLocationName("street")); 354 Assert.assertTrue(FindAddress.isValidLocationName("streets")); 355 Assert.assertTrue(FindAddress.isValidLocationName("summit")); 356 Assert.assertTrue(FindAddress.isValidLocationName("speedway")); 357 Assert.assertTrue(FindAddress.isValidLocationName("terrace")); 358 Assert.assertTrue(FindAddress.isValidLocationName("throughway")); 359 Assert.assertTrue(FindAddress.isValidLocationName("trace")); 360 Assert.assertTrue(FindAddress.isValidLocationName("track")); 361 Assert.assertTrue(FindAddress.isValidLocationName("trafficway")); 362 Assert.assertTrue(FindAddress.isValidLocationName("trail")); 363 Assert.assertTrue(FindAddress.isValidLocationName("tunnel")); 364 Assert.assertTrue(FindAddress.isValidLocationName("turnpike")); 365 Assert.assertTrue(FindAddress.isValidLocationName("underpass")); 366 Assert.assertTrue(FindAddress.isValidLocationName("union")); 367 Assert.assertTrue(FindAddress.isValidLocationName("unions")); 368 Assert.assertTrue(FindAddress.isValidLocationName("valley")); 369 Assert.assertTrue(FindAddress.isValidLocationName("valleys")); 370 Assert.assertTrue(FindAddress.isValidLocationName("viaduct")); 371 Assert.assertTrue(FindAddress.isValidLocationName("view")); 372 Assert.assertTrue(FindAddress.isValidLocationName("views")); 373 Assert.assertTrue(FindAddress.isValidLocationName("village")); 374 Assert.assertTrue(FindAddress.isValidLocationName("villages")); 375 Assert.assertTrue(FindAddress.isValidLocationName("ville")); 376 Assert.assertTrue(FindAddress.isValidLocationName("vista")); 377 Assert.assertTrue(FindAddress.isValidLocationName("walk")); 378 Assert.assertTrue(FindAddress.isValidLocationName("walks")); 379 Assert.assertTrue(FindAddress.isValidLocationName("wall")); 380 Assert.assertTrue(FindAddress.isValidLocationName("way")); 381 Assert.assertTrue(FindAddress.isValidLocationName("ways")); 382 Assert.assertTrue(FindAddress.isValidLocationName("well")); 383 Assert.assertTrue(FindAddress.isValidLocationName("wells")); 384 Assert.assertTrue(FindAddress.isValidLocationName("xing")); 385 Assert.assertTrue(FindAddress.isValidLocationName("xrd")); 386 } 387 388 @Test 389 public void testZipCode() { 390 Assert.assertTrue(FindAddress.isValidZipCode("90000")); 391 Assert.assertTrue(FindAddress.isValidZipCode("01234")); 392 Assert.assertTrue(FindAddress.isValidZipCode("99999-9999")); 393 394 Assert.assertFalse(FindAddress.isValidZipCode("999999999")); 395 Assert.assertFalse(FindAddress.isValidZipCode("9999-99999")); 396 Assert.assertFalse(FindAddress.isValidZipCode("999999999-")); 397 Assert.assertFalse(FindAddress.isValidZipCode("99999-999a")); 398 Assert.assertFalse(FindAddress.isValidZipCode("99999--9999")); 399 Assert.assertFalse(FindAddress.isValidZipCode("90000o")); 400 Assert.assertFalse(FindAddress.isValidZipCode("90000-")); 401 402 // Test the state index against the zip range table. 403 Assert.assertTrue(FindAddress.isValidZipCode("99000", "AK")); 404 Assert.assertTrue(FindAddress.isValidZipCode("99000", "Alaska")); 405 Assert.assertTrue(FindAddress.isValidZipCode("35000", "AL")); 406 Assert.assertTrue(FindAddress.isValidZipCode("36000", "Alabama")); 407 Assert.assertTrue(FindAddress.isValidZipCode("71000", "AR")); 408 Assert.assertTrue(FindAddress.isValidZipCode("72000", "Arkansas")); 409 Assert.assertTrue(FindAddress.isValidZipCode("96000", "AS")); 410 Assert.assertTrue(FindAddress.isValidZipCode("96000", "American Samoa")); 411 Assert.assertTrue(FindAddress.isValidZipCode("85000", "AZ")); 412 Assert.assertTrue(FindAddress.isValidZipCode("86000", "Arizona")); 413 Assert.assertTrue(FindAddress.isValidZipCode("90000", "CA")); 414 Assert.assertTrue(FindAddress.isValidZipCode("96000", "California")); 415 Assert.assertTrue(FindAddress.isValidZipCode("80000", "CO")); 416 Assert.assertTrue(FindAddress.isValidZipCode("81000", "Colorado")); 417 Assert.assertTrue(FindAddress.isValidZipCode("06000", "CT")); 418 Assert.assertTrue(FindAddress.isValidZipCode("06000", "Connecticut")); 419 Assert.assertTrue(FindAddress.isValidZipCode("20000", "DC")); 420 Assert.assertTrue(FindAddress.isValidZipCode("20000", "District of Columbia")); 421 Assert.assertTrue(FindAddress.isValidZipCode("19000", "DE")); 422 Assert.assertTrue(FindAddress.isValidZipCode("19000", "Delaware")); 423 Assert.assertTrue(FindAddress.isValidZipCode("32000", "FL")); 424 Assert.assertTrue(FindAddress.isValidZipCode("34000", "Florida")); 425 Assert.assertTrue(FindAddress.isValidZipCode("96000", "FM")); 426 Assert.assertTrue(FindAddress.isValidZipCode("96000", "Federated States of Micronesia")); 427 Assert.assertTrue(FindAddress.isValidZipCode("30000", "GA")); 428 Assert.assertTrue(FindAddress.isValidZipCode("31000", "Georgia")); 429 Assert.assertTrue(FindAddress.isValidZipCode("96000", "GU")); 430 Assert.assertTrue(FindAddress.isValidZipCode("96000", "Guam")); 431 Assert.assertTrue(FindAddress.isValidZipCode("96000", "HI")); 432 Assert.assertTrue(FindAddress.isValidZipCode("96000", "Hawaii")); 433 Assert.assertTrue(FindAddress.isValidZipCode("50000", "IA")); 434 Assert.assertTrue(FindAddress.isValidZipCode("52000", "Iowa")); 435 Assert.assertTrue(FindAddress.isValidZipCode("83000", "ID")); 436 Assert.assertTrue(FindAddress.isValidZipCode("83000", "Idaho")); 437 Assert.assertTrue(FindAddress.isValidZipCode("60000", "IL")); 438 Assert.assertTrue(FindAddress.isValidZipCode("62000", "Illinois")); 439 Assert.assertTrue(FindAddress.isValidZipCode("46000", "IN")); 440 Assert.assertTrue(FindAddress.isValidZipCode("47000", "Indiana")); 441 Assert.assertTrue(FindAddress.isValidZipCode("66000", "KS")); 442 Assert.assertTrue(FindAddress.isValidZipCode("67000", "Kansas")); 443 Assert.assertTrue(FindAddress.isValidZipCode("40000", "KY")); 444 Assert.assertTrue(FindAddress.isValidZipCode("42000", "Kentucky")); 445 Assert.assertTrue(FindAddress.isValidZipCode("70000", "LA")); 446 Assert.assertTrue(FindAddress.isValidZipCode("71000", "Louisiana")); 447 Assert.assertTrue(FindAddress.isValidZipCode("01000", "MA")); 448 Assert.assertTrue(FindAddress.isValidZipCode("02000", "Massachusetts")); 449 Assert.assertTrue(FindAddress.isValidZipCode("20000", "MD")); 450 Assert.assertTrue(FindAddress.isValidZipCode("21000", "Maryland")); 451 Assert.assertTrue(FindAddress.isValidZipCode("03000", "ME")); 452 Assert.assertTrue(FindAddress.isValidZipCode("04000", "Maine")); 453 Assert.assertTrue(FindAddress.isValidZipCode("96000", "MH")); 454 Assert.assertTrue(FindAddress.isValidZipCode("96000", "Marshall Islands")); 455 Assert.assertTrue(FindAddress.isValidZipCode("48000", "MI")); 456 Assert.assertTrue(FindAddress.isValidZipCode("49000", "Michigan")); 457 Assert.assertTrue(FindAddress.isValidZipCode("55000", "MN")); 458 Assert.assertTrue(FindAddress.isValidZipCode("56000", "Minnesota")); 459 Assert.assertTrue(FindAddress.isValidZipCode("63000", "MO")); 460 Assert.assertTrue(FindAddress.isValidZipCode("65000", "Missouri")); 461 Assert.assertTrue(FindAddress.isValidZipCode("96000", "MP")); 462 Assert.assertTrue(FindAddress.isValidZipCode("96000", "Northern Mariana Islands")); 463 Assert.assertTrue(FindAddress.isValidZipCode("38000", "MS")); 464 Assert.assertTrue(FindAddress.isValidZipCode("39000", "Mississippi")); 465 Assert.assertTrue(FindAddress.isValidZipCode("55000", "MT")); 466 Assert.assertTrue(FindAddress.isValidZipCode("56000", "Montana")); 467 Assert.assertTrue(FindAddress.isValidZipCode("27000", "NC")); 468 Assert.assertTrue(FindAddress.isValidZipCode("28000", "North Carolina")); 469 Assert.assertTrue(FindAddress.isValidZipCode("58000", "ND")); 470 Assert.assertTrue(FindAddress.isValidZipCode("58000", "North Dakota")); 471 Assert.assertTrue(FindAddress.isValidZipCode("68000", "NE")); 472 Assert.assertTrue(FindAddress.isValidZipCode("69000", "Nebraska")); 473 Assert.assertTrue(FindAddress.isValidZipCode("03000", "NH")); 474 Assert.assertTrue(FindAddress.isValidZipCode("04000", "New Hampshire")); 475 Assert.assertTrue(FindAddress.isValidZipCode("07000", "NJ")); 476 Assert.assertTrue(FindAddress.isValidZipCode("08000", "New Jersey")); 477 Assert.assertTrue(FindAddress.isValidZipCode("87000", "NM")); 478 Assert.assertTrue(FindAddress.isValidZipCode("88000", "New Mexico")); 479 Assert.assertTrue(FindAddress.isValidZipCode("88000", "NV")); 480 Assert.assertTrue(FindAddress.isValidZipCode("89000", "Nevada")); 481 Assert.assertTrue(FindAddress.isValidZipCode("10000", "NY")); 482 Assert.assertTrue(FindAddress.isValidZipCode("14000", "New York")); 483 Assert.assertTrue(FindAddress.isValidZipCode("43000", "OH")); 484 Assert.assertTrue(FindAddress.isValidZipCode("45000", "Ohio")); 485 Assert.assertTrue(FindAddress.isValidZipCode("73000", "OK")); 486 Assert.assertTrue(FindAddress.isValidZipCode("74000", "Oklahoma")); 487 Assert.assertTrue(FindAddress.isValidZipCode("97000", "OR")); 488 Assert.assertTrue(FindAddress.isValidZipCode("97000", "Oregon")); 489 Assert.assertTrue(FindAddress.isValidZipCode("15000", "PA")); 490 Assert.assertTrue(FindAddress.isValidZipCode("19000", "Pennsylvania")); 491 Assert.assertTrue(FindAddress.isValidZipCode("06000", "PR")); 492 Assert.assertTrue(FindAddress.isValidZipCode("06000", "Puerto Rico")); 493 Assert.assertTrue(FindAddress.isValidZipCode("96000", "PW")); 494 Assert.assertTrue(FindAddress.isValidZipCode("96000", "Palau")); 495 Assert.assertTrue(FindAddress.isValidZipCode("02000", "RI")); 496 Assert.assertTrue(FindAddress.isValidZipCode("02000", "Rhode Island")); 497 Assert.assertTrue(FindAddress.isValidZipCode("29000", "SC")); 498 Assert.assertTrue(FindAddress.isValidZipCode("29000", "South Carolina")); 499 Assert.assertTrue(FindAddress.isValidZipCode("57000", "SD")); 500 Assert.assertTrue(FindAddress.isValidZipCode("57000", "South Dakota")); 501 Assert.assertTrue(FindAddress.isValidZipCode("37000", "TN")); 502 Assert.assertTrue(FindAddress.isValidZipCode("38000", "Tennessee")); 503 Assert.assertTrue(FindAddress.isValidZipCode("75000", "TX")); 504 Assert.assertTrue(FindAddress.isValidZipCode("79000", "Texas")); 505 Assert.assertTrue(FindAddress.isValidZipCode("84000", "UT")); 506 Assert.assertTrue(FindAddress.isValidZipCode("84000", "Utah")); 507 Assert.assertTrue(FindAddress.isValidZipCode("22000", "VA")); 508 Assert.assertTrue(FindAddress.isValidZipCode("24000", "Virginia")); 509 Assert.assertTrue(FindAddress.isValidZipCode("06000", "VI")); 510 Assert.assertTrue(FindAddress.isValidZipCode("09000", "Virgin Islands")); 511 Assert.assertTrue(FindAddress.isValidZipCode("05000", "VT")); 512 Assert.assertTrue(FindAddress.isValidZipCode("05000", "Vermont")); 513 Assert.assertTrue(FindAddress.isValidZipCode("98000", "WA")); 514 Assert.assertTrue(FindAddress.isValidZipCode("99000", "Washington")); 515 Assert.assertTrue(FindAddress.isValidZipCode("53000", "WI")); 516 Assert.assertTrue(FindAddress.isValidZipCode("54000", "Wisconsin")); 517 Assert.assertTrue(FindAddress.isValidZipCode("24000", "WV")); 518 Assert.assertTrue(FindAddress.isValidZipCode("26000", "West Virginia")); 519 Assert.assertTrue(FindAddress.isValidZipCode("82000", "WY")); 520 Assert.assertTrue(FindAddress.isValidZipCode("83000", "Wyoming")); 521 } 522 523 @Test 524 public void testMatchState() { 525 // The complete set of state codes and names is tested together 526 // with their returned state indices in the zip code test. 527 assertExpectedMatch(FindAddress.matchState("CALIFORNIA", 0), "CALIFORNIA"); 528 assertExpectedMatch(FindAddress.matchState("ca", 0), "ca"); 529 530 assertExpectedMatch(FindAddress.matchState(" CALIFORNIA", 1), "CALIFORNIA"); 531 assertExpectedMatch(FindAddress.matchState(" ca", 1), "ca"); 532 533 Assert.assertNull(FindAddress.matchState("notcalifornia", 3)); 534 Assert.assertNull(FindAddress.matchState("californi", 0)); 535 Assert.assertNull(FindAddress.matchState("northern mariana", 0)); 536 Assert.assertNull(FindAddress.matchState("northern mariana island", 0)); 537 Assert.assertNull(FindAddress.matchState("zz", 0)); 538 } 539 540 @Test 541 public void testGetHouseNumber() { 542 assertExpectedMatch(FindAddress.matchHouseNumber("4", 0), "4"); 543 544 // Matches not at the start of the string should be preceded by a valid delimiter. 545 assertExpectedMatch(FindAddress.matchHouseNumber(" 4", 1), "4"); 546 assertExpectedMatch(FindAddress.matchHouseNumber(",4", 1), "4"); 547 Assert.assertNull(FindAddress.matchHouseNumber("x4", 1)); 548 549 // Matches should be followed by a valid delimiter. 550 assertExpectedMatch(FindAddress.matchHouseNumber("4,5", 0), "4"); 551 Assert.assertNull(FindAddress.matchHouseNumber("4?", 0)); 552 Assert.assertNull(FindAddress.matchHouseNumber("4:", 0)); 553 554 // Quotes are valid delimiters. 555 assertExpectedMatch(FindAddress.matchHouseNumber("\"4\"", 1), "4"); 556 assertExpectedMatch(FindAddress.matchHouseNumber("'4'", 1), "4"); 557 558 // Matches shouldn't include the delimiter, or anything after it. 559 assertExpectedMatch(FindAddress.matchHouseNumber("4 my house", 0), "4"); 560 561 // One is a valid house number. 562 assertExpectedMatch(FindAddress.matchHouseNumber("one", 0), "one"); 563 564 // One can't be an ordinal though. 565 Assert.assertNull(FindAddress.matchHouseNumber("oneth", 0)); 566 567 // House numbers can be followed by a single letter. 568 assertExpectedMatch(FindAddress.matchHouseNumber("1A", 0), "1A"); 569 570 // But not two. 571 Assert.assertNull(FindAddress.matchHouseNumber("1AA", 0)); 572 573 // Except if it's a valid ordinal. 574 assertExpectedMatch(FindAddress.matchHouseNumber("1st", 0), "1st"); 575 assertExpectedMatch(FindAddress.matchHouseNumber("1ST", 0), "1ST"); 576 assertExpectedMatch(FindAddress.matchHouseNumber("11th", 0), "11th"); 577 assertExpectedMatch(FindAddress.matchHouseNumber("21st", 0), "21st"); 578 579 assertExpectedMatch(FindAddress.matchHouseNumber("2nd", 0), "2nd"); 580 assertExpectedMatch(FindAddress.matchHouseNumber("12th", 0), "12th"); 581 assertExpectedMatch(FindAddress.matchHouseNumber("22nd", 0), "22nd"); 582 583 assertExpectedMatch(FindAddress.matchHouseNumber("3rd", 0), "3rd"); 584 assertExpectedMatch(FindAddress.matchHouseNumber("13th", 0), "13th"); 585 assertExpectedMatch(FindAddress.matchHouseNumber("23rd", 0), "23rd"); 586 587 Assert.assertNull(FindAddress.matchHouseNumber("11st", 0)); 588 Assert.assertNull(FindAddress.matchHouseNumber("21th", 0)); 589 Assert.assertNull(FindAddress.matchHouseNumber("1nd", 0)); 590 591 // These two cases are different from the original C++ 592 // implementation (which didn't match numbers in these cases). 593 assertExpectedMatch(FindAddress.matchHouseNumber("111th", 0), "111th"); 594 assertExpectedMatch(FindAddress.matchHouseNumber("011th", 0), "011th"); 595 596 // This case used to match, but now doesn't. 597 Assert.assertNull(FindAddress.matchHouseNumber("211st", 0)); 598 599 // Hypenated numbers are OK. 600 assertExpectedMatch(FindAddress.matchHouseNumber("1-201", 0), "1-201"); 601 assertExpectedMatch(FindAddress.matchHouseNumber("1-one", 0), "1-one"); 602 603 // But a trailing hypen isn't valid. 604 Assert.assertNull(FindAddress.matchHouseNumber("1- ", 0)); 605 Assert.assertNull(FindAddress.matchHouseNumber("1-word", 0)); 606 607 // Ordinals can be part of a hyphenated number. 608 assertExpectedMatch(FindAddress.matchHouseNumber("1-1st", 0), "1-1st"); 609 610 // Limit of 5 digits at most. 611 assertExpectedMatch(FindAddress.matchHouseNumber("12345", 0), "12345"); 612 Assert.assertNull(FindAddress.matchHouseNumber("123456", 0)); 613 614 // Limit applies to the whole match, not the components. 615 Assert.assertNull(FindAddress.matchHouseNumber("123-456", 0)); 616 } 617 } 618