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