Bugfix: PreloadSupplier drops language tags when building index.
TBR=rouslan@chromium.org
BUG=
Review URL: https://codereview.appspot.com/101350044
diff --git a/cpp/src/preload_supplier.cc b/cpp/src/preload_supplier.cc
index 1a1ecf6..cf9ed80 100644
--- a/cpp/src/preload_supplier.cc
+++ b/cpp/src/preload_supplier.cc
@@ -214,6 +214,15 @@
}
}
+ // If the ID has a language tag, copy it.
+ {
+ const std::string& id = (*it)->GetId();
+ std::string::size_type pos = id.rfind("--");
+ if (pos != std::string::npos) {
+ human_id.append(id, pos, id.size() - pos);
+ }
+ }
+
rule_index_->insert(std::make_pair(human_id, *it));
// Add the Latin script ID, if a Latin script name could be found for
diff --git a/cpp/test/address_validator_test.cc b/cpp/test/address_validator_test.cc
index 5703a37..79195e3 100644
--- a/cpp/test/address_validator_test.cc
+++ b/cpp/test/address_validator_test.cc
@@ -381,4 +381,38 @@
EXPECT_EQ(expected_, problems_);
}
+TEST_P(AddressValidatorTest, ValidAddressCA_en) {
+ // Skip this test case when using the OndemandSupplier, which depends on the
+ // address metadata server to map natural language names to metadata IDs.
+ if (GetParam() == &OndemandValidatorWrapper::Build) return;
+
+ address_.region_code = "CA";
+ address_.administrative_area = "New Brunswick";
+ address_.locality = "Saint John County";
+ address_.postal_code = "E2L 4Z6";
+ address_.address_line.push_back("...");
+ address_.language_code = "en";
+
+ ASSERT_NO_FATAL_FAILURE(Validate());
+ ASSERT_TRUE(called_);
+ EXPECT_EQ(expected_, problems_);
+}
+
+TEST_P(AddressValidatorTest, ValidAddressCA_fr) {
+ // Skip this test case when using the OndemandSupplier, which depends on the
+ // address metadata server to map natural language names to metadata IDs.
+ if (GetParam() == &OndemandValidatorWrapper::Build) return;
+
+ address_.region_code = "CA";
+ address_.administrative_area = "Nouveau-Brunswick";
+ address_.locality = "Comt\xC3\xA9 de Saint-Jean"; /* Comté de Saint-Jean */
+ address_.postal_code = "E2L 4Z6";
+ address_.address_line.push_back("...");
+ address_.language_code = "fr";
+
+ ASSERT_NO_FATAL_FAILURE(Validate());
+ ASSERT_TRUE(called_);
+ EXPECT_EQ(expected_, problems_);
+}
+
} // namespace