12fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org// Copyright (C) 2014 Google Inc.
22fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org//
32fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org// Licensed under the Apache License, Version 2.0 (the "License");
42fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org// you may not use this file except in compliance with the License.
52fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org// You may obtain a copy of the License at
62fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org//
72fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org// http://www.apache.org/licenses/LICENSE-2.0
82fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org//
92fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org// Unless required by applicable law or agreed to in writing, software
102fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org// distributed under the License is distributed on an "AS IS" BASIS,
112fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
122fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org// See the License for the specific language governing permissions and
132fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org// limitations under the License.
142fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org
1526e0a878fc7765d1fa2fbd279f2168b27933f63flararennie@google.com#include <libaddressinput/address_normalizer.h>
162fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org
172fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org#include <libaddressinput/address_data.h>
182fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org#include <libaddressinput/callback.h>
192fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org#include <libaddressinput/null_storage.h>
202fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org#include <libaddressinput/preload_supplier.h>
212fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org#include <libaddressinput/util/basictypes.h>
222fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org#include <libaddressinput/util/scoped_ptr.h>
232fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org
249f47fe3ed525accac995b095d408a825673a2ee1roubert@google.com#include <string>
252fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org
262fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org#include <gtest/gtest.h>
272fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org
288466869ca5e66ec41d133c8ca2f25789028ef4dfroubert@google.com#include "testdata_source.h"
299f47fe3ed525accac995b095d408a825673a2ee1roubert@google.com
302fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.orgnamespace {
312fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org
322fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.orgusing i18n::addressinput::AddressData;
3326e0a878fc7765d1fa2fbd279f2168b27933f63flararennie@google.comusing i18n::addressinput::AddressNormalizer;
342fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.orgusing i18n::addressinput::BuildCallback;
352fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.orgusing i18n::addressinput::NullStorage;
362fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.orgusing i18n::addressinput::PreloadSupplier;
372fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.orgusing i18n::addressinput::scoped_ptr;
388466869ca5e66ec41d133c8ca2f25789028ef4dfroubert@google.comusing i18n::addressinput::TestdataSource;
392fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org
4026e0a878fc7765d1fa2fbd279f2168b27933f63flararennie@google.comclass AddressNormalizerTest : public testing::Test {
412fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org protected:
4226e0a878fc7765d1fa2fbd279f2168b27933f63flararennie@google.com  AddressNormalizerTest()
438466869ca5e66ec41d133c8ca2f25789028ef4dfroubert@google.com      : supplier_(new TestdataSource(true), new NullStorage),
4426e0a878fc7765d1fa2fbd279f2168b27933f63flararennie@google.com        loaded_(BuildCallback(this, &AddressNormalizerTest::OnLoaded)),
4526e0a878fc7765d1fa2fbd279f2168b27933f63flararennie@google.com        normalizer_(&supplier_) {}
462fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org
472fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org  PreloadSupplier supplier_;
482fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org  const scoped_ptr<const PreloadSupplier::Callback> loaded_;
4926e0a878fc7765d1fa2fbd279f2168b27933f63flararennie@google.com  const AddressNormalizer normalizer_;
502fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org
512fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org private:
528c9b0e35847b85f4cc7434058e4e4ec5d5560c40roubert@google.com  void OnLoaded(bool success, const std::string& region_code, int num_rules) {
532fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org    ASSERT_TRUE(success);
542fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org    ASSERT_FALSE(region_code.empty());
552fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org    ASSERT_LT(0, num_rules);
562fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org  }
572fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org
5826e0a878fc7765d1fa2fbd279f2168b27933f63flararennie@google.com  DISALLOW_COPY_AND_ASSIGN(AddressNormalizerTest);
592fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org};
602fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org
6126e0a878fc7765d1fa2fbd279f2168b27933f63flararennie@google.comTEST_F(AddressNormalizerTest, CaliforniaShortNameCa) {
622fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org  supplier_.LoadRules("US", *loaded_);
632fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org  AddressData address;
642fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org  address.language_code = "en-US";
652fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org  address.region_code = "US";
662fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org  address.administrative_area = "California";
672fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org  address.locality = "Mountain View";
6826e0a878fc7765d1fa2fbd279f2168b27933f63flararennie@google.com  normalizer_.Normalize(&address);
692fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org  EXPECT_EQ("CA", address.administrative_area);
702fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org}
712fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org
7226e0a878fc7765d1fa2fbd279f2168b27933f63flararennie@google.comTEST_F(AddressNormalizerTest, GangwonLatinNameStaysUnchanged) {
732fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org  supplier_.LoadRules("KR", *loaded_);
742fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org  AddressData address;
752fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org  address.language_code = "ko-Latn";
762fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org  address.region_code = "KR";
772fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org  address.administrative_area = "Gangwon";
7826e0a878fc7765d1fa2fbd279f2168b27933f63flararennie@google.com  normalizer_.Normalize(&address);
792fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org  EXPECT_EQ("Gangwon", address.administrative_area);
802fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org}
812fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org
8226e0a878fc7765d1fa2fbd279f2168b27933f63flararennie@google.comTEST_F(AddressNormalizerTest, GangwonKoreanName) {
832fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org  supplier_.LoadRules("KR", *loaded_);
842fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org  AddressData address;
852fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org  address.language_code = "ko-KR";
862fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org  address.region_code = "KR";
879df6dae6a50aaed83d010be8a05030c15be204a0roubert@google.com  address.administrative_area = "\xEA\xB0\x95\xEC\x9B\x90";  /* "강원" */
8826e0a878fc7765d1fa2fbd279f2168b27933f63flararennie@google.com  normalizer_.Normalize(&address);
899df6dae6a50aaed83d010be8a05030c15be204a0roubert@google.com  EXPECT_EQ(
909df6dae6a50aaed83d010be8a05030c15be204a0roubert@google.com      "\xEA\xB0\x95\xEC\x9B\x90\xEB\x8F\x84",  /* "강원도" */
919df6dae6a50aaed83d010be8a05030c15be204a0roubert@google.com      address.administrative_area);
922fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org}
932fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org
9426e0a878fc7765d1fa2fbd279f2168b27933f63flararennie@google.comTEST_F(AddressNormalizerTest, DontSwitchLatinScriptForUnknownLanguage) {
952fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org  supplier_.LoadRules("KR", *loaded_);
962fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org  AddressData address;
972fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org  address.region_code = "KR";
982fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org  address.administrative_area = "Gangwon";
9926e0a878fc7765d1fa2fbd279f2168b27933f63flararennie@google.com  normalizer_.Normalize(&address);
1002fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org  EXPECT_EQ("Gangwon", address.administrative_area);
1012fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org}
1022fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org
10326e0a878fc7765d1fa2fbd279f2168b27933f63flararennie@google.comTEST_F(AddressNormalizerTest, DontSwitchLocalScriptForUnknownLanguage) {
1042fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org  supplier_.LoadRules("KR", *loaded_);
1052fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org  AddressData address;
1062fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org  address.region_code = "KR";
1079df6dae6a50aaed83d010be8a05030c15be204a0roubert@google.com  address.administrative_area = "\xEA\xB0\x95\xEC\x9B\x90";  /* "강원" */
10826e0a878fc7765d1fa2fbd279f2168b27933f63flararennie@google.com  normalizer_.Normalize(&address);
1099df6dae6a50aaed83d010be8a05030c15be204a0roubert@google.com  EXPECT_EQ(
1109df6dae6a50aaed83d010be8a05030c15be204a0roubert@google.com      "\xEA\xB0\x95\xEC\x9B\x90\xEB\x8F\x84",  /* "강원도" */
1119df6dae6a50aaed83d010be8a05030c15be204a0roubert@google.com      address.administrative_area);
1122fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org}
1132fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org
1142fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org}  // namespace
115