| OLD | NEW |
| (Empty) |
| 1 // Copyright (C) 2014 Google Inc. | |
| 2 // | |
| 3 // Licensed under the Apache License, Version 2.0 (the "License"); | |
| 4 // you may not use this file except in compliance with the License. | |
| 5 // You may obtain a copy of the License at | |
| 6 // | |
| 7 // http://www.apache.org/licenses/LICENSE-2.0 | |
| 8 // | |
| 9 // Unless required by applicable law or agreed to in writing, software | |
| 10 // distributed under the License is distributed on an "AS IS" BASIS, | |
| 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| 12 // See the License for the specific language_code governing permissions and | |
| 13 // limitations under the License. | |
| 14 | |
| 15 #include <libaddressinput/address_formatter.h> | |
| 16 | |
| 17 #include <libaddressinput/address_data.h> | |
| 18 | |
| 19 #include <string> | |
| 20 #include <vector> | |
| 21 | |
| 22 #include <gtest/gtest.h> | |
| 23 | |
| 24 namespace { | |
| 25 | |
| 26 using i18n::addressinput::AddressData; | |
| 27 using i18n::addressinput::GetFormattedNationalAddress; | |
| 28 using i18n::addressinput::GetFormattedNationalAddressLine; | |
| 29 using i18n::addressinput::GetStreetAddressLinesAsSingleLine; | |
| 30 | |
| 31 TEST(AddressFormatterTest, GetStreetAddressLinesAsSingleLine_1Line) { | |
| 32 AddressData address; | |
| 33 address.region_code = "US"; // Not used. | |
| 34 address.address_line.push_back("Line 1"); | |
| 35 | |
| 36 std::string result; | |
| 37 GetStreetAddressLinesAsSingleLine(address, &result); | |
| 38 EXPECT_EQ("Line 1", result); | |
| 39 | |
| 40 // Setting the language_code, with one line, shouldn't affect anything. | |
| 41 address.language_code = "en"; | |
| 42 GetStreetAddressLinesAsSingleLine(address, &result); | |
| 43 EXPECT_EQ("Line 1", result); | |
| 44 | |
| 45 address.language_code = "zh-Hans"; | |
| 46 GetStreetAddressLinesAsSingleLine(address, &result); | |
| 47 EXPECT_EQ("Line 1", result); | |
| 48 } | |
| 49 | |
| 50 TEST(AddressFormatterTest, GetStreetAddressLinesAsSingleLine_2Lines) { | |
| 51 AddressData address; | |
| 52 address.region_code = "US"; // Not used. | |
| 53 address.address_line.push_back("Line 1"); | |
| 54 address.address_line.push_back("Line 2"); | |
| 55 | |
| 56 std::string result; | |
| 57 GetStreetAddressLinesAsSingleLine(address, &result); | |
| 58 // Default separator if no language_code specified: ", " | |
| 59 EXPECT_EQ("Line 1, Line 2", result); | |
| 60 | |
| 61 address.language_code = "en"; | |
| 62 GetStreetAddressLinesAsSingleLine(address, &result); | |
| 63 EXPECT_EQ("Line 1, Line 2", result); | |
| 64 | |
| 65 address.language_code = "zh-Hans"; | |
| 66 GetStreetAddressLinesAsSingleLine(address, &result); | |
| 67 // Chinese has no separator. | |
| 68 EXPECT_EQ("Line 1Line 2", result); | |
| 69 | |
| 70 address.language_code = "ko"; | |
| 71 GetStreetAddressLinesAsSingleLine(address, &result); | |
| 72 EXPECT_EQ("Line 1 Line 2", result); | |
| 73 | |
| 74 address.language_code = "ar"; | |
| 75 GetStreetAddressLinesAsSingleLine(address, &result); | |
| 76 EXPECT_EQ("Line 1\xD8\x8C" " Line 2", result); // Arabic comma. | |
| 77 } | |
| 78 | |
| 79 TEST(AddressFormatterTest, GetStreetAddressLinesAsSingleLine_5Lines) { | |
| 80 AddressData address; | |
| 81 address.region_code = "US"; // Not used. | |
| 82 address.address_line.push_back("Line 1"); | |
| 83 address.address_line.push_back("Line 2"); | |
| 84 address.address_line.push_back("Line 3"); | |
| 85 address.address_line.push_back("Line 4"); | |
| 86 address.address_line.push_back("Line 5"); | |
| 87 address.language_code = "fr"; | |
| 88 | |
| 89 std::string result; | |
| 90 GetStreetAddressLinesAsSingleLine(address, &result); | |
| 91 EXPECT_EQ(result, "Line 1, Line 2, Line 3, Line 4, Line 5"); | |
| 92 } | |
| 93 | |
| 94 TEST(AddressFormatterTest, GetFormattedNationalAddressLocalLanguage) { | |
| 95 AddressData address; | |
| 96 address.region_code = "NZ"; | |
| 97 address.address_line.push_back("Rotopapa"); | |
| 98 address.address_line.push_back("Irwell 3RD"); | |
| 99 address.postal_code = "8704"; | |
| 100 address.locality = "Leeston"; | |
| 101 | |
| 102 std::vector<std::string> expected; | |
| 103 expected.push_back("Rotopapa"); | |
| 104 expected.push_back("Irwell 3RD"); | |
| 105 expected.push_back("Leeston 8704"); | |
| 106 | |
| 107 std::vector<std::string> lines; | |
| 108 GetFormattedNationalAddress(address, &lines); | |
| 109 EXPECT_EQ(expected, lines); | |
| 110 | |
| 111 // Should be the same result no matter what the language_code is. We choose an | |
| 112 // unlikely language_code code to illustrate this. | |
| 113 address.language_code = "en-Latn-CN"; | |
| 114 | |
| 115 lines.clear(); | |
| 116 GetFormattedNationalAddress(address, &lines); | |
| 117 EXPECT_EQ(expected, lines); | |
| 118 | |
| 119 std::string one_line; | |
| 120 GetFormattedNationalAddressLine(address, &one_line); | |
| 121 EXPECT_EQ("Rotopapa, Irwell 3RD, Leeston 8704", one_line); | |
| 122 } | |
| 123 | |
| 124 TEST(AddressFormatterTest, GetFormattedNationalAddressLatinFormat) { | |
| 125 /* 大安區 */ | |
| 126 static const char kTaiwanCity[] = "\xE5\xA4\xA7\xE5\xAE\x89\xE5\x8D\x80"; | |
| 127 /* 台北市 */ | |
| 128 static const char kTaiwanAdmin[] = "\xE5\x8F\xB0\xE5\x8C\x97\xE5\xB8\x82"; | |
| 129 /* 台灣信義路三段33號 */ | |
| 130 static const char kTaiwanStreetLine[]= "\xE5\x8F\xB0\xE7\x81\xA3\xE4\xBF\xA1" | |
| 131 "\xE7\xBE\xA9\xE8\xB7\xAF\xE4\xB8\x89\xE6\xAE\xB5" "33" "\xE8\x99\x9F"; | |
| 132 static const char kPostalCode[] = "106"; | |
| 133 | |
| 134 AddressData address; | |
| 135 address.region_code = "TW"; | |
| 136 address.address_line.push_back(kTaiwanStreetLine); | |
| 137 address.postal_code = kPostalCode; | |
| 138 address.locality = kTaiwanCity; | |
| 139 address.administrative_area = kTaiwanAdmin; | |
| 140 address.language_code = "zh-Hant"; | |
| 141 | |
| 142 std::vector<std::string> expected; | |
| 143 expected.push_back(kPostalCode); | |
| 144 expected.push_back(std::string(kTaiwanAdmin).append(kTaiwanCity)); | |
| 145 expected.push_back(kTaiwanStreetLine); | |
| 146 | |
| 147 std::vector<std::string> lines; | |
| 148 GetFormattedNationalAddress(address, &lines); | |
| 149 EXPECT_EQ(expected, lines); | |
| 150 | |
| 151 std::string one_line; | |
| 152 GetFormattedNationalAddressLine(address, &one_line); | |
| 153 // No separators expected for Chinese. | |
| 154 EXPECT_EQ(std::string(kPostalCode).append(kTaiwanAdmin).append(kTaiwanCity) | |
| 155 .append(kTaiwanStreetLine), | |
| 156 one_line); | |
| 157 | |
| 158 // Changing to the latin variant will change the output. | |
| 159 AddressData latin_address; | |
| 160 latin_address.region_code = "TW"; | |
| 161 latin_address.address_line.push_back("No. 33, Section 3 Xinyi Rd"); | |
| 162 latin_address.postal_code = kPostalCode; | |
| 163 latin_address.locality = "Da-an District"; | |
| 164 latin_address.administrative_area = "Taipei City"; | |
| 165 latin_address.language_code = "zh-Latn"; | |
| 166 | |
| 167 std::vector<std::string> expected_latin; | |
| 168 expected_latin.push_back("No. 33, Section 3 Xinyi Rd"); | |
| 169 expected_latin.push_back("Da-an District, Taipei City 106"); | |
| 170 | |
| 171 lines.clear(); | |
| 172 GetFormattedNationalAddress(latin_address, &lines); | |
| 173 EXPECT_EQ(expected_latin, lines); | |
| 174 | |
| 175 GetFormattedNationalAddressLine(latin_address, &one_line); | |
| 176 // We expect ", " as the new-line replacements for zh-Latn. | |
| 177 EXPECT_EQ("No. 33, Section 3 Xinyi Rd, Da-an District, Taipei City 106", | |
| 178 one_line); | |
| 179 } | |
| 180 | |
| 181 TEST(AddressFormatterTest, GetFormattedNationalAddressMultilingualCountry) { | |
| 182 AddressData address; | |
| 183 address.region_code = "CA"; | |
| 184 address.address_line.push_back("5 Rue du Tresor"); | |
| 185 address.address_line.push_back("Apt. 4"); | |
| 186 address.administrative_area = "QC"; | |
| 187 address.postal_code = "G1R 123"; | |
| 188 address.locality = "Montmagny"; | |
| 189 address.language_code = "fr"; | |
| 190 | |
| 191 std::vector<std::string> expected; | |
| 192 expected.push_back("5 Rue du Tresor"); | |
| 193 expected.push_back("Apt. 4"); | |
| 194 expected.push_back("Montmagny QC G1R 123"); | |
| 195 | |
| 196 std::vector<std::string> lines; | |
| 197 GetFormattedNationalAddress(address, &lines); | |
| 198 EXPECT_EQ(expected, lines); | |
| 199 } | |
| 200 | |
| 201 } // namespace | |
| OLD | NEW |