| Index: third_party/libaddressinput/chromium/cpp/test/rule_test.cc
|
| diff --git a/third_party/libaddressinput/chromium/cpp/test/rule_test.cc b/third_party/libaddressinput/chromium/cpp/test/rule_test.cc
|
| index 7f7609f11b20f27baccc201b337345f5953d3659..b484555bcdb94364b721db134eb1ab21ecf9620b 100644
|
| --- a/third_party/libaddressinput/chromium/cpp/test/rule_test.cc
|
| +++ b/third_party/libaddressinput/chromium/cpp/test/rule_test.cc
|
| @@ -22,7 +22,6 @@
|
|
|
| #include <gtest/gtest.h>
|
|
|
| -#include "address_field_util.h"
|
| #include "messages.h"
|
| #include "region_data_constants.h"
|
|
|
| @@ -30,8 +29,8 @@ namespace {
|
|
|
| using i18n::addressinput::AddressField;
|
| using i18n::addressinput::ADMIN_AREA;
|
| +using i18n::addressinput::COUNTRY;
|
| using i18n::addressinput::LOCALITY;
|
| -using i18n::addressinput::NEWLINE;
|
| using i18n::addressinput::ORGANIZATION;
|
| using i18n::addressinput::POSTAL_CODE;
|
| using i18n::addressinput::RECIPIENT;
|
| @@ -39,22 +38,37 @@ using i18n::addressinput::RegionDataConstants;
|
| using i18n::addressinput::Rule;
|
| using i18n::addressinput::STREET_ADDRESS;
|
|
|
| +bool IsFormatEmpty(const std::vector<std::vector<AddressField> >& format) {
|
| + for (std::vector<std::vector<AddressField> >::const_iterator
|
| + it = format.begin(); it != format.end(); ++it) {
|
| + if (!it->empty()) {
|
| + return false;
|
| + }
|
| + }
|
| + return true;
|
| +}
|
| +
|
| TEST(RuleTest, CopyOverwritesRule) {
|
| Rule rule;
|
| - ASSERT_TRUE(rule.ParseSerializedRule("{"
|
| - "\"fmt\":\"%S%Z\","
|
| - "\"state_name_type\":\"area\","
|
| - "\"zip_name_type\":\"postal\","
|
| - "\"sub_keys\":\"CA~NY~TX\","
|
| - "\"lang\":\"en\","
|
| - "\"languages\":\"en~fr\""
|
| - "}"));
|
| + ASSERT_TRUE(rule.ParseSerializedRule(
|
| + "{"
|
| + "\"fmt\":\"%S%Z\","
|
| + "\"require\":\"SZ\","
|
| + "\"state_name_type\":\"area\","
|
| + "\"zip_name_type\":\"postal\","
|
| + "\"sub_keys\":\"CA~NY~TX\","
|
| + "\"lang\":\"en\","
|
| + "\"languages\":\"en~fr\","
|
| + "\"zip\":\"\\\\d{5}([ \\\\-]\\\\d{4})?\""
|
| + "}"));
|
|
|
| Rule copy;
|
| EXPECT_NE(rule.GetFormat(), copy.GetFormat());
|
| + EXPECT_NE(rule.GetRequired(), copy.GetRequired());
|
| EXPECT_NE(rule.GetSubKeys(), copy.GetSubKeys());
|
| EXPECT_NE(rule.GetLanguages(), copy.GetLanguages());
|
| EXPECT_NE(rule.GetLanguage(), copy.GetLanguage());
|
| + EXPECT_NE(rule.GetPostalCodeFormat(), copy.GetPostalCodeFormat());
|
| EXPECT_NE(rule.GetAdminAreaNameMessageId(),
|
| copy.GetAdminAreaNameMessageId());
|
| EXPECT_NE(rule.GetPostalCodeNameMessageId(),
|
| @@ -62,9 +76,11 @@ TEST(RuleTest, CopyOverwritesRule) {
|
|
|
| copy.CopyFrom(rule);
|
| EXPECT_EQ(rule.GetFormat(), copy.GetFormat());
|
| + EXPECT_EQ(rule.GetRequired(), copy.GetRequired());
|
| EXPECT_EQ(rule.GetSubKeys(), copy.GetSubKeys());
|
| EXPECT_EQ(rule.GetLanguages(), copy.GetLanguages());
|
| EXPECT_EQ(rule.GetLanguage(), copy.GetLanguage());
|
| + EXPECT_EQ(rule.GetPostalCodeFormat(), copy.GetPostalCodeFormat());
|
| EXPECT_EQ(rule.GetAdminAreaNameMessageId(),
|
| copy.GetAdminAreaNameMessageId());
|
| EXPECT_EQ(rule.GetPostalCodeNameMessageId(),
|
| @@ -73,46 +89,158 @@ TEST(RuleTest, CopyOverwritesRule) {
|
|
|
| TEST(RuleTest, ParseOverwritesRule) {
|
| Rule rule;
|
| - ASSERT_TRUE(rule.ParseSerializedRule("{"
|
| - "\"fmt\":\"%S%Z\","
|
| - "\"state_name_type\":\"area\","
|
| - "\"zip_name_type\":\"postal\","
|
| - "\"sub_keys\":\"CA~NY~TX\","
|
| - "\"lang\":\"en\","
|
| - "\"languages\":\"en~fr\""
|
| - "}"));
|
| - EXPECT_FALSE(rule.GetFormat().empty());
|
| + ASSERT_TRUE(rule.ParseSerializedRule(
|
| + "{"
|
| + "\"fmt\":\"%S%Z\","
|
| + "\"require\":\"SZ\","
|
| + "\"state_name_type\":\"area\","
|
| + "\"zip_name_type\":\"postal\","
|
| + "\"sub_keys\":\"CA~NY~TX\","
|
| + "\"lang\":\"en\","
|
| + "\"languages\":\"en~fr\","
|
| + "\"zip\":\"\\\\d{5}([ \\\\-]\\\\d{4})?\""
|
| + "}"));
|
| + EXPECT_FALSE(IsFormatEmpty(rule.GetFormat()));
|
| + EXPECT_FALSE(rule.GetRequired().empty());
|
| EXPECT_FALSE(rule.GetSubKeys().empty());
|
| EXPECT_FALSE(rule.GetLanguages().empty());
|
| EXPECT_FALSE(rule.GetLanguage().empty());
|
| + EXPECT_FALSE(rule.GetPostalCodeFormat().empty());
|
| EXPECT_EQ(IDS_LIBADDRESSINPUT_I18N_AREA,
|
| rule.GetAdminAreaNameMessageId());
|
| EXPECT_EQ(IDS_LIBADDRESSINPUT_I18N_POSTAL_CODE_LABEL,
|
| rule.GetPostalCodeNameMessageId());
|
|
|
| - ASSERT_TRUE(rule.ParseSerializedRule("{"
|
| - "\"fmt\":\"\","
|
| - "\"state_name_type\":\"do_si\","
|
| - "\"zip_name_type\":\"zip\","
|
| - "\"sub_keys\":\"\","
|
| - "\"lang\":\"\","
|
| - "\"languages\":\"\""
|
| - "}"));
|
| - EXPECT_TRUE(rule.GetFormat().empty());
|
| + ASSERT_TRUE(rule.ParseSerializedRule(
|
| + "{"
|
| + "\"fmt\":\"\","
|
| + "\"require\":\"\","
|
| + "\"state_name_type\":\"do_si\","
|
| + "\"zip_name_type\":\"zip\","
|
| + "\"sub_keys\":\"\","
|
| + "\"lang\":\"\","
|
| + "\"languages\":\"\","
|
| + "\"zip\":\"\""
|
| + "}"));
|
| + EXPECT_TRUE(IsFormatEmpty(rule.GetFormat()));
|
| + EXPECT_TRUE(rule.GetRequired().empty());
|
| EXPECT_TRUE(rule.GetSubKeys().empty());
|
| EXPECT_TRUE(rule.GetLanguages().empty());
|
| EXPECT_TRUE(rule.GetLanguage().empty());
|
| + EXPECT_TRUE(rule.GetPostalCodeFormat().empty());
|
| EXPECT_EQ(IDS_LIBADDRESSINPUT_I18N_DO_SI,
|
| rule.GetAdminAreaNameMessageId());
|
| EXPECT_EQ(IDS_LIBADDRESSINPUT_I18N_ZIP_CODE_LABEL,
|
| rule.GetPostalCodeNameMessageId());
|
| }
|
|
|
| -TEST(RuleTest, ParsesFormatCorrectly) {
|
| +TEST(RuleTest, ParseEmptyDataDoesNotOverwriteRule) {
|
| + Rule rule;
|
| + ASSERT_TRUE(rule.ParseSerializedRule(
|
| + "{"
|
| + "\"fmt\":\"%S%Z\","
|
| + "\"require\":\"SZ\","
|
| + "\"state_name_type\":\"area\","
|
| + "\"zip_name_type\":\"postal\","
|
| + "\"sub_keys\":\"CA~NY~TX\","
|
| + "\"lang\":\"en\","
|
| + "\"languages\":\"en~fr\","
|
| + "\"zip\":\"\\\\d{5}([ \\\\-]\\\\d{4})?\""
|
| + "}"));
|
| +
|
| + Rule copy;
|
| + copy.CopyFrom(rule);
|
| + ASSERT_TRUE(copy.ParseSerializedRule("{}"));
|
| +
|
| + EXPECT_EQ(rule.GetFormat(), copy.GetFormat());
|
| + EXPECT_EQ(rule.GetRequired(), copy.GetRequired());
|
| + EXPECT_EQ(rule.GetSubKeys(), copy.GetSubKeys());
|
| + EXPECT_EQ(rule.GetLanguages(), copy.GetLanguages());
|
| + EXPECT_EQ(rule.GetLanguage(), copy.GetLanguage());
|
| + EXPECT_EQ(rule.GetPostalCodeFormat(), copy.GetPostalCodeFormat());
|
| + EXPECT_EQ(rule.GetAdminAreaNameMessageId(),
|
| + copy.GetAdminAreaNameMessageId());
|
| + EXPECT_EQ(rule.GetPostalCodeNameMessageId(),
|
| + copy.GetPostalCodeNameMessageId());
|
| +}
|
| +
|
| +TEST(RuleTest, ParseFormatWithNewLines) {
|
| + Rule rule;
|
| + ASSERT_TRUE(
|
| + rule.ParseSerializedRule("{\"fmt\":\"%O%n%N%n%A%nAX-%Z %C%nĂ…LAND\"}"));
|
| + std::vector<std::vector<AddressField> > expected_format;
|
| + expected_format.push_back(std::vector<AddressField>(1, ORGANIZATION));
|
| + expected_format.push_back(std::vector<AddressField>(1, RECIPIENT));
|
| + expected_format.push_back(std::vector<AddressField>(1, STREET_ADDRESS));
|
| + expected_format.push_back(std::vector<AddressField>(1, POSTAL_CODE));
|
| + expected_format.back().push_back(LOCALITY);
|
| + expected_format.push_back(std::vector<AddressField>());
|
| + EXPECT_EQ(expected_format, rule.GetFormat());
|
| +}
|
| +
|
| +TEST(RuleTest, DoubleTokenPrefixDoesNotCrash) {
|
| + Rule rule;
|
| + EXPECT_TRUE(rule.ParseSerializedRule("{\"fmt\":\"%%R\"}"));
|
| +}
|
| +
|
| +TEST(RuleTest, DoubleNewlineFormatDoesNotCrash) {
|
| + Rule rule;
|
| + EXPECT_TRUE(rule.ParseSerializedRule("{\"fmt\":\"%n%n\"}"));
|
| +}
|
| +
|
| +TEST(RuleTest, FormatTokenWithoutPrefixDoesNotCrash) {
|
| + Rule rule;
|
| + ASSERT_TRUE(rule.ParseSerializedRule("{\"fmt\":\"R\"}"));
|
| +}
|
| +
|
| +TEST(RuleTest, ParseDuplicateTokenInFormatDoesNotCrash) {
|
| + Rule rule;
|
| + EXPECT_TRUE(rule.ParseSerializedRule("{\"fmt\":\"%R%R\"}"));
|
| +}
|
| +
|
| +TEST(RuleTest, ParseInvalidFormatFieldsDoesNotCrash) {
|
| + Rule rule;
|
| + EXPECT_TRUE(rule.ParseSerializedRule("{\"fmt\":\"%K%L\"}"));
|
| +}
|
| +
|
| +TEST(RuleTest, PrefixWithoutTokenFormatDoesNotCrash) {
|
| + Rule rule;
|
| + EXPECT_TRUE(rule.ParseSerializedRule("{\"fmt\":\"%\"}"));
|
| +}
|
| +
|
| +TEST(RuleTest, EmptyStringFormatDoesNotCrash) {
|
| + Rule rule;
|
| + EXPECT_TRUE(rule.ParseSerializedRule("{\"fmt\":\"\"}"));
|
| +}
|
| +
|
| +TEST(RuleTest, ParseRequiredFields) {
|
| Rule rule;
|
| - ASSERT_TRUE(rule.ParseSerializedRule("{\"fmt\":\"%S\"}"));
|
| - ASSERT_EQ(1, rule.GetFormat().size());
|
| - EXPECT_EQ(ADMIN_AREA, rule.GetFormat()[0]);
|
| + ASSERT_TRUE(rule.ParseSerializedRule("{\"require\":\"ONAZC\"}"));
|
| + std::vector<AddressField> expected;
|
| + expected.push_back(ORGANIZATION);
|
| + expected.push_back(RECIPIENT);
|
| + expected.push_back(STREET_ADDRESS);
|
| + expected.push_back(POSTAL_CODE);
|
| + expected.push_back(LOCALITY);
|
| + EXPECT_EQ(expected, rule.GetRequired());
|
| +}
|
| +
|
| +TEST(RuleTest, ParseEmptyStringRequiredFields) {
|
| + Rule rule;
|
| + ASSERT_TRUE(rule.ParseSerializedRule("{\"require\":\"\"}"));
|
| + EXPECT_TRUE(rule.GetRequired().empty());
|
| +}
|
| +
|
| +TEST(RuleTest, ParseInvalidRequiredFields) {
|
| + Rule rule;
|
| + ASSERT_TRUE(rule.ParseSerializedRule("{\"require\":\"garbage\"}"));
|
| + EXPECT_TRUE(rule.GetRequired().empty());
|
| +}
|
| +
|
| +TEST(RuleTest, ParseDuplicateRequiredFields) {
|
| + Rule rule;
|
| + ASSERT_TRUE(rule.ParseSerializedRule("{\"require\":\"SSS\"}"));
|
| + EXPECT_EQ(std::vector<AddressField>(3, ADMIN_AREA), rule.GetRequired());
|
| }
|
|
|
| TEST(RuleTest, ParsesSubKeysCorrectly) {
|
| @@ -141,6 +269,15 @@ TEST(RuleTest, ParsesLanguagesCorrectly) {
|
| EXPECT_EQ(expected, rule.GetLanguages());
|
| }
|
|
|
| +TEST(RuleTest, ParsesPostalCodeFormatCorrectly) {
|
| + Rule rule;
|
| + ASSERT_TRUE(rule.ParseSerializedRule(
|
| + "{"
|
| + "\"zip\":\"\\\\d{5}([ \\\\-]\\\\d{4})?\""
|
| + "}"));
|
| + EXPECT_EQ("\\d{5}([ \\-]\\d{4})?", rule.GetPostalCodeFormat());
|
| +}
|
| +
|
| TEST(RuleTest, EmptyStringIsNotValid) {
|
| Rule rule;
|
| EXPECT_FALSE(rule.ParseSerializedRule(std::string()));
|
| @@ -216,13 +353,31 @@ INSTANTIATE_TEST_CASE_P(
|
| // Tests for rule parsing.
|
| class RuleParseTest : public testing::TestWithParam<std::string> {
|
| protected:
|
| + const std::string& GetData() const {
|
| + return RegionDataConstants::GetRegionData(GetParam());
|
| + }
|
| +
|
| Rule rule_;
|
| };
|
|
|
| -// Verifies that a region data can be parsed successfully.
|
| -TEST_P(RuleParseTest, RegionDataParsedSuccessfully) {
|
| - EXPECT_TRUE(rule_.ParseSerializedRule(
|
| - RegionDataConstants::GetRegionData(GetParam())));
|
| +// Verifies that an address format does not contain consecutive lines with
|
| +// multiple fields each. Such address format (e.g. {{ELEMENT, ELEMENT},
|
| +// {ELEMENT, ELEMENT}}) will result in incorrect behavior of BuildComponents()
|
| +// public API.
|
| +TEST_P(RuleParseTest, ConsecutiveLinesWithMultipleFields) {
|
| + ASSERT_TRUE(rule_.ParseSerializedRule(GetData()));
|
| + bool previous_line_has_single_field = true;
|
| + for (std::vector<std::vector<AddressField> >::const_iterator
|
| + line_it = rule_.GetFormat().begin();
|
| + line_it != rule_.GetFormat().end();
|
| + ++line_it) {
|
| + if (line_it->empty()) {
|
| + continue;
|
| + }
|
| + ASSERT_TRUE(line_it->size() == 1 || previous_line_has_single_field)
|
| + << GetParam() << ": " << GetData();
|
| + previous_line_has_single_field = line_it->size() == 1;
|
| + }
|
| }
|
|
|
| // Test parsing all region data.
|
|
|