| OLD | NEW |
| (Empty) |
| 1 // Copyright (C) 2013 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 governing permissions and | |
| 13 // limitations under the License. | |
| 14 | |
| 15 #include <libaddressinput/address_ui.h> | |
| 16 | |
| 17 #include <libaddressinput/address_field.h> | |
| 18 #include <libaddressinput/address_ui_component.h> | |
| 19 | |
| 20 #include <set> | |
| 21 #include <string> | |
| 22 #include <vector> | |
| 23 | |
| 24 #include <gtest/gtest.h> | |
| 25 | |
| 26 #include "grit.h" | |
| 27 | |
| 28 namespace i18n { | |
| 29 namespace addressinput { | |
| 30 | |
| 31 namespace { | |
| 32 | |
| 33 // Returns testing::AssertionSuccess if the |components| are valid. | |
| 34 testing::AssertionResult ComponentsAreValid( | |
| 35 const std::vector<AddressUiComponent>& components) { | |
| 36 if (components.empty()) { | |
| 37 return testing::AssertionFailure() << "no components"; | |
| 38 } | |
| 39 | |
| 40 std::set<AddressField> fields; | |
| 41 for (std::vector<AddressUiComponent>::const_iterator | |
| 42 component_it = components.begin(); | |
| 43 component_it != components.end(); | |
| 44 ++component_it) { | |
| 45 static const AddressField kMinAddressField = COUNTRY; | |
| 46 static const AddressField kMaxAddressField = RECIPIENT; | |
| 47 if (component_it->field < kMinAddressField || | |
| 48 component_it->field > kMaxAddressField) { | |
| 49 return testing::AssertionFailure() << "unexpected input field " | |
| 50 << component_it->field; | |
| 51 } | |
| 52 | |
| 53 if (fields.find(component_it->field) != fields.end()) { | |
| 54 return testing::AssertionFailure() << "duplicate input field " | |
| 55 << component_it->field; | |
| 56 } | |
| 57 fields.insert(component_it->field); | |
| 58 | |
| 59 if (component_it->name_id == INVALID_MESSAGE_ID) { | |
| 60 return testing::AssertionFailure() << "invalid field name_id for field " | |
| 61 << component_it->field; | |
| 62 } | |
| 63 } | |
| 64 | |
| 65 return testing::AssertionSuccess(); | |
| 66 } | |
| 67 | |
| 68 // 1) Verifies that a region code consists of two characters, for example "TW". | |
| 69 // 2) Verifies that BuildComponents() returns valid UI components for a region | |
| 70 // code. | |
| 71 // 3) Verifies that BuildComponents() returns a non-empty vector for a region | |
| 72 // code. | |
| 73 TEST(AddressUiTest, RegionsAndComponentsAreValid) { | |
| 74 const std::vector<std::string>& region_codes = GetRegionCodes(); | |
| 75 for (size_t i = 0; i < region_codes.size(); ++i) { | |
| 76 SCOPED_TRACE("Region code: " + region_codes[i]); | |
| 77 EXPECT_EQ(2U, region_codes[i].size()); | |
| 78 EXPECT_TRUE(ComponentsAreValid( | |
| 79 BuildComponents(region_codes[i], std::string(), NULL))); | |
| 80 } | |
| 81 } | |
| 82 | |
| 83 // Verifies that BuildComponents() returns an empty | |
| 84 // vector for an invalid region code. | |
| 85 TEST(AddressUiTest, InvalidRegionCodeReturnsEmptyVector) { | |
| 86 EXPECT_TRUE( | |
| 87 BuildComponents("INVALID-REGION-CODE", std::string(), NULL).empty()); | |
| 88 } | |
| 89 | |
| 90 struct SeparatorData { | |
| 91 SeparatorData(const std::string& language_code, | |
| 92 const std::string& compact_line_separator) | |
| 93 : language_code(language_code), | |
| 94 compact_line_separator(compact_line_separator) {} | |
| 95 | |
| 96 ~SeparatorData() {} | |
| 97 | |
| 98 std::string language_code; | |
| 99 std::string compact_line_separator; | |
| 100 }; | |
| 101 | |
| 102 // Tests for compact line separator. | |
| 103 class CompactLineSeparatorTest | |
| 104 : public testing::TestWithParam<SeparatorData> {}; | |
| 105 | |
| 106 TEST_P(CompactLineSeparatorTest, BasicTest) { | |
| 107 EXPECT_EQ(GetParam().compact_line_separator, | |
| 108 GetCompactAddressLinesSeparator(GetParam().language_code)); | |
| 109 } | |
| 110 | |
| 111 INSTANTIATE_TEST_CASE_P( | |
| 112 CompactLineSeparators, CompactLineSeparatorTest, | |
| 113 testing::Values( | |
| 114 SeparatorData("ja", ""), | |
| 115 SeparatorData("zh", ""), | |
| 116 SeparatorData("zh-hans", ""), | |
| 117 SeparatorData("ar", "، "), | |
| 118 SeparatorData("ko", " "), | |
| 119 SeparatorData("th", " "), | |
| 120 SeparatorData("en", ", "))); | |
| 121 | |
| 122 TEST(AddressUiTest, ComponentLanguageCodeTest) { | |
| 123 static const struct LanguageCodeData { | |
| 124 const char* region_code; | |
| 125 const char* ui_language_code; | |
| 126 const char* components_language_code; | |
| 127 } kLangugeCodes[] = { | |
| 128 {"AM", "", "hy"}, | |
| 129 {"AM", "hy", "hy"}, | |
| 130 {"AM", "en", "hy-latn"}, | |
| 131 {"CN", "zh-hans", "zh-hans"}, | |
| 132 {"CN", "zh-hant", "zh-hant"}, | |
| 133 {"CN", "zh", "zh"}, | |
| 134 {"CN", "zh-latn", "zh-latn"}, | |
| 135 {"CN", "zh-Latn", "zh-latn"}, | |
| 136 {"CN", "zh-latn-US", "zh-latn"}, | |
| 137 {"CN", "zh-Latn-US", "zh-latn"}, | |
| 138 {"CN", "en", "zh-latn"}, | |
| 139 {"CN", "ja", "zh-latn"}, | |
| 140 {"CN", "ko", "zh-latn"}, | |
| 141 {"HK", "zh", "zh"}, | |
| 142 {"HK", "zh-hans", "zh-hans"}, | |
| 143 {"HK", "zh-hant", "zh-hant"}, | |
| 144 {"HK", "zh-latn", "zh-latn"}, | |
| 145 {"HK", "en", "en"}, | |
| 146 {"HK", "fr", "zh-latn"}, | |
| 147 {"HK", "ja", "zh-latn"}, | |
| 148 {"HK", "ko", "zh-latn"}, | |
| 149 {"MO", "zh", "zh"}, | |
| 150 {"MO", "pt", "pt"}, | |
| 151 {"MO", "en", "zh-latn"}, | |
| 152 {"AQ", "en", "en"}, | |
| 153 {"AQ", "fr", "fr"}, | |
| 154 {"AQ", "es", "es"}, | |
| 155 {"AQ", "zh", "zh"} | |
| 156 }; | |
| 157 static const size_t kArraySize = | |
| 158 sizeof kLangugeCodes / sizeof (LanguageCodeData); | |
| 159 for (size_t i = 0; i < kArraySize; ++i) { | |
| 160 SCOPED_TRACE(std::string("region code = ") + | |
| 161 kLangugeCodes[i].region_code + ", ui language code = " + | |
| 162 kLangugeCodes[i].ui_language_code + ", components language code = " + | |
| 163 kLangugeCodes[i].components_language_code); | |
| 164 std::string components_language_code; | |
| 165 EXPECT_FALSE(BuildComponents(kLangugeCodes[i].region_code, | |
| 166 kLangugeCodes[i].ui_language_code, | |
| 167 &components_language_code).empty()); | |
| 168 EXPECT_EQ( | |
| 169 kLangugeCodes[i].components_language_code, components_language_code); | |
| 170 } | |
| 171 } | |
| 172 | |
| 173 } // namespace | |
| 174 | |
| 175 } // namespace addressinput | |
| 176 } // namespace i18n | |
| OLD | NEW |