| OLD | NEW |
| 1 // Copyright (C) 2014 Google Inc. | 1 // Copyright (C) 2014 Google Inc. |
| 2 // | 2 // |
| 3 // Licensed under the Apache License, Version 2.0 (the "License"); | 3 // Licensed under the Apache License, Version 2.0 (the "License"); |
| 4 // you may not use this file except in compliance with 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 | 5 // You may obtain a copy of the License at |
| 6 // | 6 // |
| 7 // http://www.apache.org/licenses/LICENSE-2.0 | 7 // http://www.apache.org/licenses/LICENSE-2.0 |
| 8 // | 8 // |
| 9 // Unless required by applicable law or agreed to in writing, software | 9 // Unless required by applicable law or agreed to in writing, software |
| 10 // distributed under the License is distributed on an "AS IS" BASIS, | 10 // distributed under the License is distributed on an "AS IS" BASIS, |
| 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 12 // See the License for the specific language governing permissions and | 12 // See the License for the specific language governing permissions and |
| 13 // limitations under the License. | 13 // limitations under the License. |
| 14 | 14 |
| 15 #include <libaddressinput/address_data.h> | 15 #include <libaddressinput/address_data.h> |
| 16 | 16 |
| 17 #include <string> | 17 #include <libaddressinput/address_field.h> |
| 18 #include <vector> | 18 |
| 19 #include <sstream> |
| 19 | 20 |
| 20 #include <gtest/gtest.h> | 21 #include <gtest/gtest.h> |
| 21 | 22 |
| 22 namespace { | 23 namespace { |
| 23 | 24 |
| 24 using i18n::addressinput::AddressData; | 25 using i18n::addressinput::AddressData; |
| 26 using i18n::addressinput::AddressField; |
| 25 | 27 |
| 26 TEST(AddressDataTest, FormatForDisplayEmpty) { | 28 using i18n::addressinput::COUNTRY; |
| 29 using i18n::addressinput::ADMIN_AREA; |
| 30 using i18n::addressinput::LOCALITY; |
| 31 using i18n::addressinput::DEPENDENT_LOCALITY; |
| 32 using i18n::addressinput::SORTING_CODE; |
| 33 using i18n::addressinput::POSTAL_CODE; |
| 34 using i18n::addressinput::STREET_ADDRESS; |
| 35 using i18n::addressinput::RECIPIENT; |
| 36 |
| 37 TEST(AddressDataTest, GetFieldValue) { |
| 27 AddressData address; | 38 AddressData address; |
| 28 std::vector<std::string> actual; | 39 address.region_code = "rrr"; |
| 29 address.FormatForDisplay(&actual); | 40 address.administrative_area = "sss"; |
| 30 EXPECT_EQ(std::vector<std::string>(), actual); | 41 address.locality = "ccc"; |
| 42 address.dependent_locality = "ddd"; |
| 43 address.sorting_code = "xxx"; |
| 44 address.postal_code = "zzz"; |
| 45 address.recipient = "nnn"; |
| 46 |
| 47 EXPECT_EQ(address.region_code, |
| 48 address.GetFieldValue(COUNTRY)); |
| 49 EXPECT_EQ(address.administrative_area, |
| 50 address.GetFieldValue(ADMIN_AREA)); |
| 51 EXPECT_EQ(address.locality, |
| 52 address.GetFieldValue(LOCALITY)); |
| 53 EXPECT_EQ(address.dependent_locality, |
| 54 address.GetFieldValue(DEPENDENT_LOCALITY)); |
| 55 EXPECT_EQ(address.sorting_code, |
| 56 address.GetFieldValue(SORTING_CODE)); |
| 57 EXPECT_EQ(address.postal_code, |
| 58 address.GetFieldValue(POSTAL_CODE)); |
| 59 EXPECT_EQ(address.recipient, |
| 60 address.GetFieldValue(RECIPIENT)); |
| 31 } | 61 } |
| 32 | 62 |
| 33 TEST(AddressDataTest, FormatForDisplayUs) { | 63 TEST(AddressDataTest, GetRepeatedFieldValue) { |
| 34 AddressData address; | 64 AddressData address; |
| 35 address.country_code = "US"; | 65 address.address_line.push_back("aaa"); |
| 36 address.administrative_area = "Texas"; | 66 address.address_line.push_back("222"); |
| 37 address.locality = "Houston"; | 67 EXPECT_EQ(address.address_line, |
| 38 address.postal_code = "77005"; | 68 address.GetRepeatedFieldValue(STREET_ADDRESS)); |
| 39 address.address_lines.push_back("123 Main St"); | |
| 40 address.address_lines.push_back("Apt 2"); | |
| 41 address.recipient = "John Doe"; | |
| 42 | |
| 43 std::vector<std::string> actual; | |
| 44 address.FormatForDisplay(&actual); | |
| 45 | |
| 46 std::vector<std::string> expected; | |
| 47 expected.push_back(address.recipient); | |
| 48 expected.insert(expected.end(), | |
| 49 address.address_lines.begin(), | |
| 50 address.address_lines.end()); | |
| 51 expected.push_back(address.locality + ", " + address.administrative_area + | |
| 52 " " + address.postal_code); | |
| 53 | |
| 54 EXPECT_EQ(expected, actual); | |
| 55 } | 69 } |
| 56 | 70 |
| 57 TEST(AddressDataTest, FormatForDisplayAr) { | 71 TEST(AddressDataTest, IsFieldEmpty) { |
| 58 AddressData address; | 72 AddressData address; |
| 59 address.country_code = "AR"; | |
| 60 address.administrative_area = "Capital Federal"; | |
| 61 address.locality = "Buenos Aires"; | |
| 62 address.postal_code = "C1001AFB"; | |
| 63 address.address_lines.push_back("Su Calle 123"); | |
| 64 address.address_lines.push_back("5° Piso"); | |
| 65 address.recipient = "Juan Perez"; | |
| 66 | 73 |
| 67 std::vector<std::string> actual; | 74 EXPECT_TRUE(address.IsFieldEmpty(COUNTRY)); |
| 68 address.FormatForDisplay(&actual); | 75 EXPECT_TRUE(address.IsFieldEmpty(ADMIN_AREA)); |
| 76 EXPECT_TRUE(address.IsFieldEmpty(LOCALITY)); |
| 77 EXPECT_TRUE(address.IsFieldEmpty(DEPENDENT_LOCALITY)); |
| 78 EXPECT_TRUE(address.IsFieldEmpty(SORTING_CODE)); |
| 79 EXPECT_TRUE(address.IsFieldEmpty(POSTAL_CODE)); |
| 80 EXPECT_TRUE(address.IsFieldEmpty(STREET_ADDRESS)); |
| 81 EXPECT_TRUE(address.IsFieldEmpty(RECIPIENT)); |
| 69 | 82 |
| 70 std::vector<std::string> expected; | 83 address.region_code = "rrr"; |
| 71 expected.push_back(address.recipient); | 84 address.administrative_area = "sss"; |
| 72 expected.insert(expected.end(), | 85 address.locality = "ccc"; |
| 73 address.address_lines.begin(), | 86 address.dependent_locality = "ddd"; |
| 74 address.address_lines.end()); | 87 address.sorting_code = "xxx"; |
| 75 expected.push_back(address.postal_code + " " + address.locality); | 88 address.postal_code = "zzz"; |
| 76 expected.push_back(address.administrative_area); | 89 address.address_line.push_back("aaa"); |
| 90 address.recipient = "nnn"; |
| 77 | 91 |
| 78 EXPECT_EQ(expected, actual); | 92 EXPECT_FALSE(address.IsFieldEmpty(COUNTRY)); |
| 93 EXPECT_FALSE(address.IsFieldEmpty(ADMIN_AREA)); |
| 94 EXPECT_FALSE(address.IsFieldEmpty(LOCALITY)); |
| 95 EXPECT_FALSE(address.IsFieldEmpty(DEPENDENT_LOCALITY)); |
| 96 EXPECT_FALSE(address.IsFieldEmpty(SORTING_CODE)); |
| 97 EXPECT_FALSE(address.IsFieldEmpty(POSTAL_CODE)); |
| 98 EXPECT_FALSE(address.IsFieldEmpty(STREET_ADDRESS)); |
| 99 EXPECT_FALSE(address.IsFieldEmpty(RECIPIENT)); |
| 79 } | 100 } |
| 80 | 101 |
| 81 TEST(AddressDataTest, FormatForDisplayJp) { | 102 TEST(AddressDataTest, IsFieldEmptyWhitespace) { |
| 82 AddressData address; | 103 AddressData address; |
| 83 address.country_code = "JP"; | 104 address.recipient = " "; |
| 84 address.language_code = "ja"; | 105 EXPECT_TRUE(address.IsFieldEmpty(RECIPIENT)); |
| 85 address.administrative_area = "東京都"; | 106 address.recipient = "abc"; |
| 86 address.locality = "渋谷区"; | 107 EXPECT_FALSE(address.IsFieldEmpty(RECIPIENT)); |
| 87 address.postal_code = "150-8512"; | 108 address.recipient = " b "; |
| 88 address.address_lines.push_back("桜丘町26-1"); | 109 EXPECT_FALSE(address.IsFieldEmpty(RECIPIENT)); |
| 89 address.address_lines.push_back("セルリアンタワー6階"); | |
| 90 address.recipient = "村上 美紀"; | |
| 91 | |
| 92 std::vector<std::string> actual; | |
| 93 address.FormatForDisplay(&actual); | |
| 94 | |
| 95 std::vector<std::string> expected; | |
| 96 expected.push_back("〒" + address.postal_code); | |
| 97 expected.push_back(address.administrative_area + address.locality); | |
| 98 expected.insert(expected.end(), | |
| 99 address.address_lines.begin(), | |
| 100 address.address_lines.end()); | |
| 101 expected.push_back(address.recipient); | |
| 102 | |
| 103 EXPECT_EQ(expected, actual); | |
| 104 } | 110 } |
| 105 | 111 |
| 106 TEST(AddressDataTest, FormatForDisplayJpLatn) { | 112 TEST(AddressDataTest, IsFieldEmptyVector) { |
| 107 AddressData address; | 113 AddressData address; |
| 108 address.country_code = "JP"; | 114 EXPECT_TRUE(address.IsFieldEmpty(STREET_ADDRESS)); |
| 109 address.language_code = "ja-latn"; | 115 address.address_line.push_back(""); |
| 110 address.administrative_area = "Tokyo"; | 116 EXPECT_TRUE(address.IsFieldEmpty(STREET_ADDRESS)); |
| 111 address.locality = "Shibuya-ku"; | 117 address.address_line.push_back("aaa"); |
| 112 address.postal_code = "150-8512"; | 118 EXPECT_FALSE(address.IsFieldEmpty(STREET_ADDRESS)); |
| 113 address.address_lines.push_back("26-1 Sakuragaoka-cho"); | 119 address.address_line.push_back(""); |
| 114 address.address_lines.push_back("Cerulean Tower 6F"); | 120 EXPECT_FALSE(address.IsFieldEmpty(STREET_ADDRESS)); |
| 115 address.recipient = "Miki Murakami"; | |
| 116 | |
| 117 std::vector<std::string> actual; | |
| 118 address.FormatForDisplay(&actual); | |
| 119 | |
| 120 std::vector<std::string> expected; | |
| 121 expected.push_back(address.recipient); | |
| 122 expected.insert(expected.end(), | |
| 123 address.address_lines.begin(), | |
| 124 address.address_lines.end()); | |
| 125 expected.push_back(address.locality + ", "+ address.administrative_area); | |
| 126 expected.push_back(address.postal_code); | |
| 127 | |
| 128 EXPECT_EQ(expected, actual); | |
| 129 } | 121 } |
| 130 | 122 |
| 131 TEST(AddressDataTest, FormatForDisplayJpLatnCapitalized) { | 123 TEST(AddressDataTest, IsFieldEmptyVectorWhitespace) { |
| 132 AddressData address; | 124 AddressData address; |
| 133 address.country_code = "JP"; | 125 address.address_line.push_back(" "); |
| 134 address.language_code = "ja-Latn"; | 126 address.address_line.push_back(" "); |
| 135 address.administrative_area = "Tokyo"; | 127 address.address_line.push_back(" "); |
| 136 address.locality = "Shibuya-ku"; | 128 EXPECT_TRUE(address.IsFieldEmpty(STREET_ADDRESS)); |
| 137 address.postal_code = "150-8512"; | 129 address.address_line.clear(); |
| 138 address.address_lines.push_back("26-1 Sakuragaoka-cho"); | 130 address.address_line.push_back("abc"); |
| 139 address.address_lines.push_back("Cerulean Tower 6F"); | 131 EXPECT_FALSE(address.IsFieldEmpty(STREET_ADDRESS)); |
| 140 address.recipient = "Miki Murakami"; | 132 address.address_line.clear(); |
| 141 | 133 address.address_line.push_back(" "); |
| 142 std::vector<std::string> actual; | 134 address.address_line.push_back(" b "); |
| 143 address.FormatForDisplay(&actual); | 135 address.address_line.push_back(" "); |
| 144 | 136 EXPECT_FALSE(address.IsFieldEmpty(STREET_ADDRESS)); |
| 145 std::vector<std::string> expected; | |
| 146 expected.push_back(address.recipient); | |
| 147 expected.insert(expected.end(), | |
| 148 address.address_lines.begin(), | |
| 149 address.address_lines.end()); | |
| 150 expected.push_back(address.locality + ", "+ address.administrative_area); | |
| 151 expected.push_back(address.postal_code); | |
| 152 | |
| 153 EXPECT_EQ(expected, actual); | |
| 154 } | 137 } |
| 155 | 138 |
| 156 TEST(AddressDataTest, FormatForDisplayJpLatnUs) { | 139 TEST(AddressDataTest, StreamFunction) { |
| 140 std::ostringstream oss; |
| 157 AddressData address; | 141 AddressData address; |
| 158 address.country_code = "JP"; | 142 address.address_line.push_back("Line 1"); |
| 159 address.language_code = "ja-latn-US"; | 143 address.address_line.push_back("Line 2"); |
| 160 address.administrative_area = "Tokyo"; | 144 address.recipient = "N"; |
| 161 address.locality = "Shibuya-ku"; | 145 address.region_code = "R"; |
| 162 address.postal_code = "150-8512"; | 146 address.postal_code = "Z"; |
| 163 address.address_lines.push_back("26-1 Sakuragaoka-cho"); | 147 address.administrative_area = "S"; |
| 164 address.address_lines.push_back("Cerulean Tower 6F"); | 148 address.locality = "C"; |
| 165 address.recipient = "Miki Murakami"; | 149 address.dependent_locality = "D"; |
| 166 | 150 address.sorting_code = "X"; |
| 167 std::vector<std::string> actual; | 151 address.language_code = "zh-Hant"; |
| 168 address.FormatForDisplay(&actual); | 152 oss << address; |
| 169 | 153 EXPECT_EQ("region_code: \"R\"\n" |
| 170 std::vector<std::string> expected; | 154 "administrative_area: \"S\"\n" |
| 171 expected.push_back(address.recipient); | 155 "locality: \"C\"\n" |
| 172 expected.insert(expected.end(), | 156 "dependent_locality: \"D\"\n" |
| 173 address.address_lines.begin(), | 157 "postal_code: \"Z\"\n" |
| 174 address.address_lines.end()); | 158 "sorting_code: \"X\"\n" |
| 175 expected.push_back(address.locality + ", "+ address.administrative_area); | 159 "address_line: \"Line 1\"\n" |
| 176 expected.push_back(address.postal_code); | 160 "address_line: \"Line 2\"\n" |
| 177 | 161 "language_code: \"zh-Hant\"\n" |
| 178 EXPECT_EQ(expected, actual); | 162 "recipient: \"N\"\n", oss.str()); |
| 179 } | 163 } |
| 180 | 164 |
| 181 TEST(AddressDataTest, FormatForDisplayWithStreetCi) { | 165 TEST(AddressDataTest, TestEquals) { |
| 182 AddressData address; | 166 AddressData address; |
| 183 address.country_code = "CI"; | 167 address.address_line.push_back("Line 1"); |
| 184 address.address_lines.push_back("Street Line 1"); | 168 address.address_line.push_back("Line 2"); |
| 185 address.locality = "City Name"; | 169 address.recipient = "N"; |
| 186 address.sorting_code = "123CEDEX"; | 170 address.region_code = "R"; |
| 171 address.postal_code = "Z"; |
| 172 address.administrative_area = "S"; |
| 173 address.locality = "C"; |
| 174 address.dependent_locality = "D"; |
| 175 address.sorting_code = "X"; |
| 176 address.language_code = "zh-Hant"; |
| 187 | 177 |
| 188 std::vector<std::string> actual; | 178 AddressData clone = address; |
| 189 address.FormatForDisplay(&actual); | |
| 190 | 179 |
| 191 std::vector<std::string> expected( | 180 EXPECT_EQ(address, clone); |
| 192 1, | 181 clone.language_code.clear(); |
| 193 address.sorting_code + " " + | 182 EXPECT_FALSE(address == clone); |
| 194 address.address_lines[0] + " " + | |
| 195 address.locality + " " + | |
| 196 address.sorting_code); | |
| 197 | |
| 198 EXPECT_EQ(expected, actual); | |
| 199 } | 183 } |
| 200 | 184 |
| 201 TEST(AddressDataTest, FormatForDisplayWithoutStreetCi) { | 185 #ifndef NDEBUG |
| 186 |
| 187 TEST(AddressDataTest, GetFieldValueInvalid) { |
| 202 AddressData address; | 188 AddressData address; |
| 203 address.country_code = "CI"; | 189 ASSERT_DEATH(address.GetFieldValue(STREET_ADDRESS), "ssertion.*failed"); |
| 204 address.locality = "City Name"; | |
| 205 address.sorting_code = "123CEDEX"; | |
| 206 | |
| 207 std::vector<std::string> actual; | |
| 208 address.FormatForDisplay(&actual); | |
| 209 | |
| 210 std::vector<std::string> expected( | |
| 211 1, | |
| 212 address.sorting_code + " " + | |
| 213 address.locality + " " + | |
| 214 address.sorting_code); | |
| 215 | |
| 216 EXPECT_EQ(expected, actual); | |
| 217 } | 190 } |
| 218 | 191 |
| 192 TEST(AddressDataTest, GetVectorFieldValueInvalid) { |
| 193 AddressData address; |
| 194 ASSERT_DEATH(address.GetRepeatedFieldValue(COUNTRY), "ssertion.*failed"); |
| 195 } |
| 196 |
| 197 TEST(AddressDataTest, IsFieldEmptyInvalid) { |
| 198 static const AddressField invalid_field = static_cast<AddressField>(-1); |
| 199 AddressData address; |
| 200 ASSERT_DEATH(address.IsFieldEmpty(invalid_field), "ssertion.*failed"); |
| 201 } |
| 202 |
| 203 #endif // NDEBUG |
| 204 |
| 219 } // namespace | 205 } // namespace |
| OLD | NEW |