OLD | NEW |
1 // Copyright (C) 2013 Google Inc. | 1 // Copyright (C) 2013 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 "rule.h" | 15 #include "rule.h" |
16 | 16 |
17 #include <libaddressinput/address_field.h> | 17 #include <libaddressinput/address_field.h> |
18 | 18 |
19 #include <string> | 19 #include <string> |
20 #include <utility> | 20 #include <utility> |
21 #include <vector> | 21 #include <vector> |
22 | 22 |
23 #include <gtest/gtest.h> | 23 #include <gtest/gtest.h> |
24 | 24 |
25 #include "address_field_util.h" | |
26 #include "messages.h" | 25 #include "messages.h" |
27 #include "region_data_constants.h" | 26 #include "region_data_constants.h" |
28 | 27 |
29 namespace { | 28 namespace { |
30 | 29 |
31 using i18n::addressinput::AddressField; | 30 using i18n::addressinput::AddressField; |
32 using i18n::addressinput::ADMIN_AREA; | 31 using i18n::addressinput::ADMIN_AREA; |
| 32 using i18n::addressinput::COUNTRY; |
33 using i18n::addressinput::LOCALITY; | 33 using i18n::addressinput::LOCALITY; |
34 using i18n::addressinput::NEWLINE; | |
35 using i18n::addressinput::ORGANIZATION; | 34 using i18n::addressinput::ORGANIZATION; |
36 using i18n::addressinput::POSTAL_CODE; | 35 using i18n::addressinput::POSTAL_CODE; |
37 using i18n::addressinput::RECIPIENT; | 36 using i18n::addressinput::RECIPIENT; |
38 using i18n::addressinput::RegionDataConstants; | 37 using i18n::addressinput::RegionDataConstants; |
39 using i18n::addressinput::Rule; | 38 using i18n::addressinput::Rule; |
40 using i18n::addressinput::STREET_ADDRESS; | 39 using i18n::addressinput::STREET_ADDRESS; |
41 | 40 |
| 41 bool IsFormatEmpty(const std::vector<std::vector<AddressField> >& format) { |
| 42 for (std::vector<std::vector<AddressField> >::const_iterator |
| 43 it = format.begin(); it != format.end(); ++it) { |
| 44 if (!it->empty()) { |
| 45 return false; |
| 46 } |
| 47 } |
| 48 return true; |
| 49 } |
| 50 |
42 TEST(RuleTest, CopyOverwritesRule) { | 51 TEST(RuleTest, CopyOverwritesRule) { |
43 Rule rule; | 52 Rule rule; |
44 ASSERT_TRUE(rule.ParseSerializedRule("{" | 53 ASSERT_TRUE(rule.ParseSerializedRule( |
45 "\"fmt\":\"%S%Z\"," | 54 "{" |
46 "\"state_name_type\":\"area\"," | 55 "\"fmt\":\"%S%Z\"," |
47 "\"zip_name_type\":\"postal\"," | 56 "\"require\":\"SZ\"," |
48 "\"sub_keys\":\"CA~NY~TX\"," | 57 "\"state_name_type\":\"area\"," |
49 "\"lang\":\"en\"," | 58 "\"zip_name_type\":\"postal\"," |
50 "\"languages\":\"en~fr\"" | 59 "\"sub_keys\":\"CA~NY~TX\"," |
51 "}")); | 60 "\"lang\":\"en\"," |
| 61 "\"languages\":\"en~fr\"," |
| 62 "\"zip\":\"\\\\d{5}([ \\\\-]\\\\d{4})?\"" |
| 63 "}")); |
52 | 64 |
53 Rule copy; | 65 Rule copy; |
54 EXPECT_NE(rule.GetFormat(), copy.GetFormat()); | 66 EXPECT_NE(rule.GetFormat(), copy.GetFormat()); |
| 67 EXPECT_NE(rule.GetRequired(), copy.GetRequired()); |
55 EXPECT_NE(rule.GetSubKeys(), copy.GetSubKeys()); | 68 EXPECT_NE(rule.GetSubKeys(), copy.GetSubKeys()); |
56 EXPECT_NE(rule.GetLanguages(), copy.GetLanguages()); | 69 EXPECT_NE(rule.GetLanguages(), copy.GetLanguages()); |
57 EXPECT_NE(rule.GetLanguage(), copy.GetLanguage()); | 70 EXPECT_NE(rule.GetLanguage(), copy.GetLanguage()); |
| 71 EXPECT_NE(rule.GetPostalCodeFormat(), copy.GetPostalCodeFormat()); |
58 EXPECT_NE(rule.GetAdminAreaNameMessageId(), | 72 EXPECT_NE(rule.GetAdminAreaNameMessageId(), |
59 copy.GetAdminAreaNameMessageId()); | 73 copy.GetAdminAreaNameMessageId()); |
60 EXPECT_NE(rule.GetPostalCodeNameMessageId(), | 74 EXPECT_NE(rule.GetPostalCodeNameMessageId(), |
61 copy.GetPostalCodeNameMessageId()); | 75 copy.GetPostalCodeNameMessageId()); |
62 | 76 |
63 copy.CopyFrom(rule); | 77 copy.CopyFrom(rule); |
64 EXPECT_EQ(rule.GetFormat(), copy.GetFormat()); | 78 EXPECT_EQ(rule.GetFormat(), copy.GetFormat()); |
| 79 EXPECT_EQ(rule.GetRequired(), copy.GetRequired()); |
65 EXPECT_EQ(rule.GetSubKeys(), copy.GetSubKeys()); | 80 EXPECT_EQ(rule.GetSubKeys(), copy.GetSubKeys()); |
66 EXPECT_EQ(rule.GetLanguages(), copy.GetLanguages()); | 81 EXPECT_EQ(rule.GetLanguages(), copy.GetLanguages()); |
67 EXPECT_EQ(rule.GetLanguage(), copy.GetLanguage()); | 82 EXPECT_EQ(rule.GetLanguage(), copy.GetLanguage()); |
| 83 EXPECT_EQ(rule.GetPostalCodeFormat(), copy.GetPostalCodeFormat()); |
68 EXPECT_EQ(rule.GetAdminAreaNameMessageId(), | 84 EXPECT_EQ(rule.GetAdminAreaNameMessageId(), |
69 copy.GetAdminAreaNameMessageId()); | 85 copy.GetAdminAreaNameMessageId()); |
70 EXPECT_EQ(rule.GetPostalCodeNameMessageId(), | 86 EXPECT_EQ(rule.GetPostalCodeNameMessageId(), |
71 copy.GetPostalCodeNameMessageId()); | 87 copy.GetPostalCodeNameMessageId()); |
72 } | 88 } |
73 | 89 |
74 TEST(RuleTest, ParseOverwritesRule) { | 90 TEST(RuleTest, ParseOverwritesRule) { |
75 Rule rule; | 91 Rule rule; |
76 ASSERT_TRUE(rule.ParseSerializedRule("{" | 92 ASSERT_TRUE(rule.ParseSerializedRule( |
77 "\"fmt\":\"%S%Z\"," | 93 "{" |
78 "\"state_name_type\":\"area\"," | 94 "\"fmt\":\"%S%Z\"," |
79 "\"zip_name_type\":\"postal\"," | 95 "\"require\":\"SZ\"," |
80 "\"sub_keys\":\"CA~NY~TX\"," | 96 "\"state_name_type\":\"area\"," |
81 "\"lang\":\"en\"," | 97 "\"zip_name_type\":\"postal\"," |
82 "\"languages\":\"en~fr\"" | 98 "\"sub_keys\":\"CA~NY~TX\"," |
83 "}")); | 99 "\"lang\":\"en\"," |
84 EXPECT_FALSE(rule.GetFormat().empty()); | 100 "\"languages\":\"en~fr\"," |
| 101 "\"zip\":\"\\\\d{5}([ \\\\-]\\\\d{4})?\"" |
| 102 "}")); |
| 103 EXPECT_FALSE(IsFormatEmpty(rule.GetFormat())); |
| 104 EXPECT_FALSE(rule.GetRequired().empty()); |
85 EXPECT_FALSE(rule.GetSubKeys().empty()); | 105 EXPECT_FALSE(rule.GetSubKeys().empty()); |
86 EXPECT_FALSE(rule.GetLanguages().empty()); | 106 EXPECT_FALSE(rule.GetLanguages().empty()); |
87 EXPECT_FALSE(rule.GetLanguage().empty()); | 107 EXPECT_FALSE(rule.GetLanguage().empty()); |
| 108 EXPECT_FALSE(rule.GetPostalCodeFormat().empty()); |
88 EXPECT_EQ(IDS_LIBADDRESSINPUT_I18N_AREA, | 109 EXPECT_EQ(IDS_LIBADDRESSINPUT_I18N_AREA, |
89 rule.GetAdminAreaNameMessageId()); | 110 rule.GetAdminAreaNameMessageId()); |
90 EXPECT_EQ(IDS_LIBADDRESSINPUT_I18N_POSTAL_CODE_LABEL, | 111 EXPECT_EQ(IDS_LIBADDRESSINPUT_I18N_POSTAL_CODE_LABEL, |
91 rule.GetPostalCodeNameMessageId()); | 112 rule.GetPostalCodeNameMessageId()); |
92 | 113 |
93 ASSERT_TRUE(rule.ParseSerializedRule("{" | 114 ASSERT_TRUE(rule.ParseSerializedRule( |
94 "\"fmt\":\"\"," | 115 "{" |
95 "\"state_name_type\":\"do_si\"," | 116 "\"fmt\":\"\"," |
96 "\"zip_name_type\":\"zip\"," | 117 "\"require\":\"\"," |
97 "\"sub_keys\":\"\"," | 118 "\"state_name_type\":\"do_si\"," |
98 "\"lang\":\"\"," | 119 "\"zip_name_type\":\"zip\"," |
99 "\"languages\":\"\"" | 120 "\"sub_keys\":\"\"," |
100 "}")); | 121 "\"lang\":\"\"," |
101 EXPECT_TRUE(rule.GetFormat().empty()); | 122 "\"languages\":\"\"," |
| 123 "\"zip\":\"\"" |
| 124 "}")); |
| 125 EXPECT_TRUE(IsFormatEmpty(rule.GetFormat())); |
| 126 EXPECT_TRUE(rule.GetRequired().empty()); |
102 EXPECT_TRUE(rule.GetSubKeys().empty()); | 127 EXPECT_TRUE(rule.GetSubKeys().empty()); |
103 EXPECT_TRUE(rule.GetLanguages().empty()); | 128 EXPECT_TRUE(rule.GetLanguages().empty()); |
104 EXPECT_TRUE(rule.GetLanguage().empty()); | 129 EXPECT_TRUE(rule.GetLanguage().empty()); |
| 130 EXPECT_TRUE(rule.GetPostalCodeFormat().empty()); |
105 EXPECT_EQ(IDS_LIBADDRESSINPUT_I18N_DO_SI, | 131 EXPECT_EQ(IDS_LIBADDRESSINPUT_I18N_DO_SI, |
106 rule.GetAdminAreaNameMessageId()); | 132 rule.GetAdminAreaNameMessageId()); |
107 EXPECT_EQ(IDS_LIBADDRESSINPUT_I18N_ZIP_CODE_LABEL, | 133 EXPECT_EQ(IDS_LIBADDRESSINPUT_I18N_ZIP_CODE_LABEL, |
108 rule.GetPostalCodeNameMessageId()); | 134 rule.GetPostalCodeNameMessageId()); |
109 } | 135 } |
110 | 136 |
111 TEST(RuleTest, ParsesFormatCorrectly) { | 137 TEST(RuleTest, ParseEmptyDataDoesNotOverwriteRule) { |
112 Rule rule; | 138 Rule rule; |
113 ASSERT_TRUE(rule.ParseSerializedRule("{\"fmt\":\"%S\"}")); | 139 ASSERT_TRUE(rule.ParseSerializedRule( |
114 ASSERT_EQ(1, rule.GetFormat().size()); | 140 "{" |
115 EXPECT_EQ(ADMIN_AREA, rule.GetFormat()[0]); | 141 "\"fmt\":\"%S%Z\"," |
| 142 "\"require\":\"SZ\"," |
| 143 "\"state_name_type\":\"area\"," |
| 144 "\"zip_name_type\":\"postal\"," |
| 145 "\"sub_keys\":\"CA~NY~TX\"," |
| 146 "\"lang\":\"en\"," |
| 147 "\"languages\":\"en~fr\"," |
| 148 "\"zip\":\"\\\\d{5}([ \\\\-]\\\\d{4})?\"" |
| 149 "}")); |
| 150 |
| 151 Rule copy; |
| 152 copy.CopyFrom(rule); |
| 153 ASSERT_TRUE(copy.ParseSerializedRule("{}")); |
| 154 |
| 155 EXPECT_EQ(rule.GetFormat(), copy.GetFormat()); |
| 156 EXPECT_EQ(rule.GetRequired(), copy.GetRequired()); |
| 157 EXPECT_EQ(rule.GetSubKeys(), copy.GetSubKeys()); |
| 158 EXPECT_EQ(rule.GetLanguages(), copy.GetLanguages()); |
| 159 EXPECT_EQ(rule.GetLanguage(), copy.GetLanguage()); |
| 160 EXPECT_EQ(rule.GetPostalCodeFormat(), copy.GetPostalCodeFormat()); |
| 161 EXPECT_EQ(rule.GetAdminAreaNameMessageId(), |
| 162 copy.GetAdminAreaNameMessageId()); |
| 163 EXPECT_EQ(rule.GetPostalCodeNameMessageId(), |
| 164 copy.GetPostalCodeNameMessageId()); |
| 165 } |
| 166 |
| 167 TEST(RuleTest, ParseFormatWithNewLines) { |
| 168 Rule rule; |
| 169 ASSERT_TRUE( |
| 170 rule.ParseSerializedRule("{\"fmt\":\"%O%n%N%n%A%nAX-%Z %C%nĂ…LAND\"}")); |
| 171 std::vector<std::vector<AddressField> > expected_format; |
| 172 expected_format.push_back(std::vector<AddressField>(1, ORGANIZATION)); |
| 173 expected_format.push_back(std::vector<AddressField>(1, RECIPIENT)); |
| 174 expected_format.push_back(std::vector<AddressField>(1, STREET_ADDRESS)); |
| 175 expected_format.push_back(std::vector<AddressField>(1, POSTAL_CODE)); |
| 176 expected_format.back().push_back(LOCALITY); |
| 177 expected_format.push_back(std::vector<AddressField>()); |
| 178 EXPECT_EQ(expected_format, rule.GetFormat()); |
| 179 } |
| 180 |
| 181 TEST(RuleTest, DoubleTokenPrefixDoesNotCrash) { |
| 182 Rule rule; |
| 183 EXPECT_TRUE(rule.ParseSerializedRule("{\"fmt\":\"%%R\"}")); |
| 184 } |
| 185 |
| 186 TEST(RuleTest, DoubleNewlineFormatDoesNotCrash) { |
| 187 Rule rule; |
| 188 EXPECT_TRUE(rule.ParseSerializedRule("{\"fmt\":\"%n%n\"}")); |
| 189 } |
| 190 |
| 191 TEST(RuleTest, FormatTokenWithoutPrefixDoesNotCrash) { |
| 192 Rule rule; |
| 193 ASSERT_TRUE(rule.ParseSerializedRule("{\"fmt\":\"R\"}")); |
| 194 } |
| 195 |
| 196 TEST(RuleTest, ParseDuplicateTokenInFormatDoesNotCrash) { |
| 197 Rule rule; |
| 198 EXPECT_TRUE(rule.ParseSerializedRule("{\"fmt\":\"%R%R\"}")); |
| 199 } |
| 200 |
| 201 TEST(RuleTest, ParseInvalidFormatFieldsDoesNotCrash) { |
| 202 Rule rule; |
| 203 EXPECT_TRUE(rule.ParseSerializedRule("{\"fmt\":\"%K%L\"}")); |
| 204 } |
| 205 |
| 206 TEST(RuleTest, PrefixWithoutTokenFormatDoesNotCrash) { |
| 207 Rule rule; |
| 208 EXPECT_TRUE(rule.ParseSerializedRule("{\"fmt\":\"%\"}")); |
| 209 } |
| 210 |
| 211 TEST(RuleTest, EmptyStringFormatDoesNotCrash) { |
| 212 Rule rule; |
| 213 EXPECT_TRUE(rule.ParseSerializedRule("{\"fmt\":\"\"}")); |
| 214 } |
| 215 |
| 216 TEST(RuleTest, ParseRequiredFields) { |
| 217 Rule rule; |
| 218 ASSERT_TRUE(rule.ParseSerializedRule("{\"require\":\"ONAZC\"}")); |
| 219 std::vector<AddressField> expected; |
| 220 expected.push_back(ORGANIZATION); |
| 221 expected.push_back(RECIPIENT); |
| 222 expected.push_back(STREET_ADDRESS); |
| 223 expected.push_back(POSTAL_CODE); |
| 224 expected.push_back(LOCALITY); |
| 225 EXPECT_EQ(expected, rule.GetRequired()); |
| 226 } |
| 227 |
| 228 TEST(RuleTest, ParseEmptyStringRequiredFields) { |
| 229 Rule rule; |
| 230 ASSERT_TRUE(rule.ParseSerializedRule("{\"require\":\"\"}")); |
| 231 EXPECT_TRUE(rule.GetRequired().empty()); |
| 232 } |
| 233 |
| 234 TEST(RuleTest, ParseInvalidRequiredFields) { |
| 235 Rule rule; |
| 236 ASSERT_TRUE(rule.ParseSerializedRule("{\"require\":\"garbage\"}")); |
| 237 EXPECT_TRUE(rule.GetRequired().empty()); |
| 238 } |
| 239 |
| 240 TEST(RuleTest, ParseDuplicateRequiredFields) { |
| 241 Rule rule; |
| 242 ASSERT_TRUE(rule.ParseSerializedRule("{\"require\":\"SSS\"}")); |
| 243 EXPECT_EQ(std::vector<AddressField>(3, ADMIN_AREA), rule.GetRequired()); |
116 } | 244 } |
117 | 245 |
118 TEST(RuleTest, ParsesSubKeysCorrectly) { | 246 TEST(RuleTest, ParsesSubKeysCorrectly) { |
119 Rule rule; | 247 Rule rule; |
120 ASSERT_TRUE(rule.ParseSerializedRule("{\"sub_keys\":\"CA~NY~TX\"}")); | 248 ASSERT_TRUE(rule.ParseSerializedRule("{\"sub_keys\":\"CA~NY~TX\"}")); |
121 std::vector<std::string> expected; | 249 std::vector<std::string> expected; |
122 expected.push_back("CA"); | 250 expected.push_back("CA"); |
123 expected.push_back("NY"); | 251 expected.push_back("NY"); |
124 expected.push_back("TX"); | 252 expected.push_back("TX"); |
125 EXPECT_EQ(expected, rule.GetSubKeys()); | 253 EXPECT_EQ(expected, rule.GetSubKeys()); |
126 } | 254 } |
127 | 255 |
128 TEST(RuleTest, ParsesLanguageCorrectly) { | 256 TEST(RuleTest, ParsesLanguageCorrectly) { |
129 Rule rule; | 257 Rule rule; |
130 ASSERT_TRUE(rule.ParseSerializedRule("{\"lang\":\"en\"}")); | 258 ASSERT_TRUE(rule.ParseSerializedRule("{\"lang\":\"en\"}")); |
131 EXPECT_EQ("en", rule.GetLanguage()); | 259 EXPECT_EQ("en", rule.GetLanguage()); |
132 } | 260 } |
133 | 261 |
134 TEST(RuleTest, ParsesLanguagesCorrectly) { | 262 TEST(RuleTest, ParsesLanguagesCorrectly) { |
135 Rule rule; | 263 Rule rule; |
136 ASSERT_TRUE(rule.ParseSerializedRule("{\"languages\":\"de~fr~it\"}")); | 264 ASSERT_TRUE(rule.ParseSerializedRule("{\"languages\":\"de~fr~it\"}")); |
137 std::vector<std::string> expected; | 265 std::vector<std::string> expected; |
138 expected.push_back("de"); | 266 expected.push_back("de"); |
139 expected.push_back("fr"); | 267 expected.push_back("fr"); |
140 expected.push_back("it"); | 268 expected.push_back("it"); |
141 EXPECT_EQ(expected, rule.GetLanguages()); | 269 EXPECT_EQ(expected, rule.GetLanguages()); |
142 } | 270 } |
143 | 271 |
| 272 TEST(RuleTest, ParsesPostalCodeFormatCorrectly) { |
| 273 Rule rule; |
| 274 ASSERT_TRUE(rule.ParseSerializedRule( |
| 275 "{" |
| 276 "\"zip\":\"\\\\d{5}([ \\\\-]\\\\d{4})?\"" |
| 277 "}")); |
| 278 EXPECT_EQ("\\d{5}([ \\-]\\d{4})?", rule.GetPostalCodeFormat()); |
| 279 } |
| 280 |
144 TEST(RuleTest, EmptyStringIsNotValid) { | 281 TEST(RuleTest, EmptyStringIsNotValid) { |
145 Rule rule; | 282 Rule rule; |
146 EXPECT_FALSE(rule.ParseSerializedRule(std::string())); | 283 EXPECT_FALSE(rule.ParseSerializedRule(std::string())); |
147 } | 284 } |
148 | 285 |
149 TEST(RuleTest, EmptyDictionaryIsValid) { | 286 TEST(RuleTest, EmptyDictionaryIsValid) { |
150 Rule rule; | 287 Rule rule; |
151 EXPECT_TRUE(rule.ParseSerializedRule("{}")); | 288 EXPECT_TRUE(rule.ParseSerializedRule("{}")); |
152 } | 289 } |
153 | 290 |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
209 std::make_pair("{\"state_name_type\":\"prefecture\"}", | 346 std::make_pair("{\"state_name_type\":\"prefecture\"}", |
210 IDS_LIBADDRESSINPUT_I18N_PREFECTURE), | 347 IDS_LIBADDRESSINPUT_I18N_PREFECTURE), |
211 std::make_pair("{\"state_name_type\":\"province\"}", | 348 std::make_pair("{\"state_name_type\":\"province\"}", |
212 IDS_LIBADDRESSINPUT_I18N_PROVINCE), | 349 IDS_LIBADDRESSINPUT_I18N_PROVINCE), |
213 std::make_pair("{\"state_name_type\":\"state\"}", | 350 std::make_pair("{\"state_name_type\":\"state\"}", |
214 IDS_LIBADDRESSINPUT_I18N_STATE_LABEL))); | 351 IDS_LIBADDRESSINPUT_I18N_STATE_LABEL))); |
215 | 352 |
216 // Tests for rule parsing. | 353 // Tests for rule parsing. |
217 class RuleParseTest : public testing::TestWithParam<std::string> { | 354 class RuleParseTest : public testing::TestWithParam<std::string> { |
218 protected: | 355 protected: |
| 356 const std::string& GetData() const { |
| 357 return RegionDataConstants::GetRegionData(GetParam()); |
| 358 } |
| 359 |
219 Rule rule_; | 360 Rule rule_; |
220 }; | 361 }; |
221 | 362 |
222 // Verifies that a region data can be parsed successfully. | 363 // Verifies that an address format does not contain consecutive lines with |
223 TEST_P(RuleParseTest, RegionDataParsedSuccessfully) { | 364 // multiple fields each. Such address format (e.g. {{ELEMENT, ELEMENT}, |
224 EXPECT_TRUE(rule_.ParseSerializedRule( | 365 // {ELEMENT, ELEMENT}}) will result in incorrect behavior of BuildComponents() |
225 RegionDataConstants::GetRegionData(GetParam()))); | 366 // public API. |
| 367 TEST_P(RuleParseTest, ConsecutiveLinesWithMultipleFields) { |
| 368 ASSERT_TRUE(rule_.ParseSerializedRule(GetData())); |
| 369 bool previous_line_has_single_field = true; |
| 370 for (std::vector<std::vector<AddressField> >::const_iterator |
| 371 line_it = rule_.GetFormat().begin(); |
| 372 line_it != rule_.GetFormat().end(); |
| 373 ++line_it) { |
| 374 if (line_it->empty()) { |
| 375 continue; |
| 376 } |
| 377 ASSERT_TRUE(line_it->size() == 1 || previous_line_has_single_field) |
| 378 << GetParam() << ": " << GetData(); |
| 379 previous_line_has_single_field = line_it->size() == 1; |
| 380 } |
226 } | 381 } |
227 | 382 |
228 // Test parsing all region data. | 383 // Test parsing all region data. |
229 INSTANTIATE_TEST_CASE_P( | 384 INSTANTIATE_TEST_CASE_P( |
230 AllRulesTest, RuleParseTest, | 385 AllRulesTest, RuleParseTest, |
231 testing::ValuesIn(RegionDataConstants::GetRegionCodes())); | 386 testing::ValuesIn(RegionDataConstants::GetRegionCodes())); |
232 | 387 |
233 } // namespace | 388 } // namespace |
OLD | NEW |