17764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com// Copyright (C) 2014 Google Inc. 27764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com// 37764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com// Licensed under the Apache License, Version 2.0 (the "License"); 47764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com// you may not use this file except in compliance with the License. 57764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com// You may obtain a copy of the License at 67764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com// 77764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com// http://www.apache.org/licenses/LICENSE-2.0 87764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com// 97764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com// Unless required by applicable law or agreed to in writing, software 107764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com// distributed under the License is distributed on an "AS IS" BASIS, 117764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 127764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com// See the License for the specific language governing permissions and 137764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com// limitations under the License. 147764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com 157764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com#include "lookup_key.h" 167764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com 177764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com#include <libaddressinput/address_data.h> 187764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com#include <libaddressinput/util/basictypes.h> 197764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com 209f47fe3ed525accac995b095d408a825673a2ee1roubert@google.com#include <cstddef> 219f47fe3ed525accac995b095d408a825673a2ee1roubert@google.com 227764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com#include <gtest/gtest.h> 237764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com 247764218473f33ca749ca4a3cc66d1118793481ddroubert@google.comnamespace { 257764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com 267764218473f33ca749ca4a3cc66d1118793481ddroubert@google.comusing i18n::addressinput::AddressData; 277764218473f33ca749ca4a3cc66d1118793481ddroubert@google.comusing i18n::addressinput::LookupKey; 287764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com 297764218473f33ca749ca4a3cc66d1118793481ddroubert@google.comconst size_t kMaxDepth = arraysize(LookupKey::kHierarchy) - 1; 307764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com 317764218473f33ca749ca4a3cc66d1118793481ddroubert@google.comTEST(LookupKeyTest, Empty) { 327764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com AddressData address; 337764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com LookupKey lookup_key; 347764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com lookup_key.FromAddress(address); 357764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com EXPECT_EQ("data/ZZ", lookup_key.ToKeyString(kMaxDepth)); 367764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com} 377764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com 387764218473f33ca749ca4a3cc66d1118793481ddroubert@google.comTEST(LookupKeyTest, AddressDepth1) { 397764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com AddressData address; 407764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com address.region_code = "111"; 417764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com LookupKey lookup_key; 427764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com lookup_key.FromAddress(address); 437764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com EXPECT_EQ(0, lookup_key.GetDepth()); 447764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com EXPECT_EQ("data/111", lookup_key.ToKeyString(kMaxDepth)); 457764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com} 467764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com 477764218473f33ca749ca4a3cc66d1118793481ddroubert@google.comTEST(LookupKeyTest, AddressDepth2) { 487764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com AddressData address; 497764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com address.region_code = "111"; 507764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com address.administrative_area = "222"; 517764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com LookupKey lookup_key; 527764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com lookup_key.FromAddress(address); 537764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com EXPECT_EQ(1, lookup_key.GetDepth()); 547764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com EXPECT_EQ("data/111/222", lookup_key.ToKeyString(kMaxDepth)); 557764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com} 567764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com 577764218473f33ca749ca4a3cc66d1118793481ddroubert@google.comTEST(LookupKeyTest, AddressDepth3) { 587764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com AddressData address; 597764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com address.region_code = "111"; 607764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com address.administrative_area = "222"; 617764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com address.locality = "333"; 627764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com LookupKey lookup_key; 637764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com lookup_key.FromAddress(address); 647764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com EXPECT_EQ(2, lookup_key.GetDepth()); 657764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com EXPECT_EQ("data/111/222/333", lookup_key.ToKeyString(kMaxDepth)); 667764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com} 677764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com 687764218473f33ca749ca4a3cc66d1118793481ddroubert@google.comTEST(LookupKeyTest, AddressDepth4) { 697764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com AddressData address; 707764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com address.region_code = "111"; 717764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com address.administrative_area = "222"; 727764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com address.locality = "333"; 737764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com address.dependent_locality = "444"; 747764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com LookupKey lookup_key; 757764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com lookup_key.FromAddress(address); 767764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com EXPECT_EQ(3, lookup_key.GetDepth()); 777764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com EXPECT_EQ("data/111/222/333/444", lookup_key.ToKeyString(kMaxDepth)); 787764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com} 797764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com 807764218473f33ca749ca4a3cc66d1118793481ddroubert@google.comTEST(LookupKeyTest, AddressDepthNonContiguous) { 817764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com AddressData address; 827764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com address.region_code = "111"; 837764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com address.administrative_area = "222"; 847764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com // No LOCALITY specified. 857764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com address.dependent_locality = "444"; 867764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com LookupKey lookup_key; 877764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com lookup_key.FromAddress(address); 887764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com EXPECT_EQ(1, lookup_key.GetDepth()); 897764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com EXPECT_EQ("data/111/222", lookup_key.ToKeyString(kMaxDepth)); 907764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com} 917764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com 927764218473f33ca749ca4a3cc66d1118793481ddroubert@google.comTEST(LookupKeyTest, RequestDepth) { 937764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com AddressData address; 947764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com address.region_code = "111"; 957764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com address.administrative_area = "222"; 967764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com address.locality = "333"; 977764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com address.dependent_locality = "444"; 987764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com LookupKey lookup_key; 997764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com lookup_key.FromAddress(address); 1007764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com EXPECT_EQ("data/111", lookup_key.ToKeyString(0)); 1017764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com EXPECT_EQ("data/111/222", lookup_key.ToKeyString(1)); 1027764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com EXPECT_EQ("data/111/222/333", lookup_key.ToKeyString(2)); 1037764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com EXPECT_EQ("data/111/222/333/444", lookup_key.ToKeyString(3)); 1047764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com} 1057764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com 106242431d78c2191494ebeb268e4dc9f22910cddfcdbeaumont@google.comTEST(LookupKeyTest, WithLanguageCodeDefaultLanguage) { 107242431d78c2191494ebeb268e4dc9f22910cddfcdbeaumont@google.com AddressData address; 108242431d78c2191494ebeb268e4dc9f22910cddfcdbeaumont@google.com // Use real data here as the choice of adding a language requires metadata. 109242431d78c2191494ebeb268e4dc9f22910cddfcdbeaumont@google.com address.region_code = "CA"; 110242431d78c2191494ebeb268e4dc9f22910cddfcdbeaumont@google.com address.administrative_area = "ON"; 111242431d78c2191494ebeb268e4dc9f22910cddfcdbeaumont@google.com address.language_code = "en"; 112242431d78c2191494ebeb268e4dc9f22910cddfcdbeaumont@google.com LookupKey lookup_key; 113242431d78c2191494ebeb268e4dc9f22910cddfcdbeaumont@google.com lookup_key.FromAddress(address); 114242431d78c2191494ebeb268e4dc9f22910cddfcdbeaumont@google.com EXPECT_EQ("data/CA", lookup_key.ToKeyString(0)); 115242431d78c2191494ebeb268e4dc9f22910cddfcdbeaumont@google.com EXPECT_EQ("data/CA/ON", lookup_key.ToKeyString(1)); 116242431d78c2191494ebeb268e4dc9f22910cddfcdbeaumont@google.com} 117242431d78c2191494ebeb268e4dc9f22910cddfcdbeaumont@google.com 118242431d78c2191494ebeb268e4dc9f22910cddfcdbeaumont@google.comTEST(LookupKeyTest, WithLanguageCodeAlternateLanguage) { 119242431d78c2191494ebeb268e4dc9f22910cddfcdbeaumont@google.com AddressData address; 120242431d78c2191494ebeb268e4dc9f22910cddfcdbeaumont@google.com // Use real data here as the choice of adding a language requires metadata. 121242431d78c2191494ebeb268e4dc9f22910cddfcdbeaumont@google.com address.region_code = "CA"; 122242431d78c2191494ebeb268e4dc9f22910cddfcdbeaumont@google.com address.administrative_area = "ON"; 123242431d78c2191494ebeb268e4dc9f22910cddfcdbeaumont@google.com address.language_code = "fr"; 124242431d78c2191494ebeb268e4dc9f22910cddfcdbeaumont@google.com LookupKey lookup_key; 125242431d78c2191494ebeb268e4dc9f22910cddfcdbeaumont@google.com lookup_key.FromAddress(address); 126242431d78c2191494ebeb268e4dc9f22910cddfcdbeaumont@google.com EXPECT_EQ("data/CA--fr", lookup_key.ToKeyString(0)); 127242431d78c2191494ebeb268e4dc9f22910cddfcdbeaumont@google.com EXPECT_EQ("data/CA/ON--fr", lookup_key.ToKeyString(1)); 128242431d78c2191494ebeb268e4dc9f22910cddfcdbeaumont@google.com} 129242431d78c2191494ebeb268e4dc9f22910cddfcdbeaumont@google.com 130242431d78c2191494ebeb268e4dc9f22910cddfcdbeaumont@google.comTEST(LookupKeyTest, WithLanguageCodeInvalidLanguage) { 131242431d78c2191494ebeb268e4dc9f22910cddfcdbeaumont@google.com AddressData address; 132242431d78c2191494ebeb268e4dc9f22910cddfcdbeaumont@google.com // Use real data here as the choice of adding a language requires metadata. 133242431d78c2191494ebeb268e4dc9f22910cddfcdbeaumont@google.com address.region_code = "CA"; 134242431d78c2191494ebeb268e4dc9f22910cddfcdbeaumont@google.com address.administrative_area = "ON"; 135242431d78c2191494ebeb268e4dc9f22910cddfcdbeaumont@google.com address.language_code = "de"; 136242431d78c2191494ebeb268e4dc9f22910cddfcdbeaumont@google.com LookupKey lookup_key; 137242431d78c2191494ebeb268e4dc9f22910cddfcdbeaumont@google.com lookup_key.FromAddress(address); 138242431d78c2191494ebeb268e4dc9f22910cddfcdbeaumont@google.com EXPECT_EQ("data/CA", lookup_key.ToKeyString(0)); 139242431d78c2191494ebeb268e4dc9f22910cddfcdbeaumont@google.com EXPECT_EQ("data/CA/ON", lookup_key.ToKeyString(1)); 140242431d78c2191494ebeb268e4dc9f22910cddfcdbeaumont@google.com} 141242431d78c2191494ebeb268e4dc9f22910cddfcdbeaumont@google.com 142242431d78c2191494ebeb268e4dc9f22910cddfcdbeaumont@google.comTEST(LookupKeyTest, WithLanguageCodeAlternateLanguageNoState) { 143242431d78c2191494ebeb268e4dc9f22910cddfcdbeaumont@google.com AddressData address; 144242431d78c2191494ebeb268e4dc9f22910cddfcdbeaumont@google.com // Use real data here as the choice of adding a language requires metadata. 145242431d78c2191494ebeb268e4dc9f22910cddfcdbeaumont@google.com // Afgahnistan has multiple languages (including Pashto as an alternative) 146242431d78c2191494ebeb268e4dc9f22910cddfcdbeaumont@google.com // but no subregions. 147242431d78c2191494ebeb268e4dc9f22910cddfcdbeaumont@google.com address.region_code = "AF"; 148242431d78c2191494ebeb268e4dc9f22910cddfcdbeaumont@google.com address.language_code = "ps"; 149242431d78c2191494ebeb268e4dc9f22910cddfcdbeaumont@google.com LookupKey lookup_key; 150242431d78c2191494ebeb268e4dc9f22910cddfcdbeaumont@google.com lookup_key.FromAddress(address); 151242431d78c2191494ebeb268e4dc9f22910cddfcdbeaumont@google.com EXPECT_EQ("data/AF", lookup_key.ToKeyString(0)); 152242431d78c2191494ebeb268e4dc9f22910cddfcdbeaumont@google.com} 153242431d78c2191494ebeb268e4dc9f22910cddfcdbeaumont@google.com 1547764218473f33ca749ca4a3cc66d1118793481ddroubert@google.comTEST(LookupKeyTest, GetRegionCode) { 1557764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com AddressData address; 1567764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com address.region_code = "rrr"; 1577764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com LookupKey lookup_key; 1587764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com lookup_key.FromAddress(address); 1597764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com EXPECT_EQ(address.region_code, lookup_key.GetRegionCode()); 1607764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com} 1617764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com 1627764218473f33ca749ca4a3cc66d1118793481ddroubert@google.comTEST(LookupKeyTest, FromAddressClearsExistingNodes) { 1637764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com AddressData address; 1647764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com address.region_code = "111"; 1657764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com address.administrative_area = "222"; 1667764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com LookupKey lookup_key; 1677764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com lookup_key.FromAddress(address); 1687764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com EXPECT_EQ("data/111/222", lookup_key.ToKeyString(kMaxDepth)); 1697764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com address.administrative_area.clear(); 1707764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com lookup_key.FromAddress(address); 1717764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com EXPECT_EQ("data/111", lookup_key.ToKeyString(kMaxDepth)); 1727764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com} 1737764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com 1747764218473f33ca749ca4a3cc66d1118793481ddroubert@google.com} // namespace 175