175a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org// Copyright (C) 2013 Google Inc. 275a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org// 375a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org// Licensed under the Apache License, Version 2.0 (the "License"); 475a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org// you may not use this file except in compliance with the License. 575a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org// You may obtain a copy of the License at 675a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org// 775a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org// http://www.apache.org/licenses/LICENSE-2.0 875a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org// 975a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org// Unless required by applicable law or agreed to in writing, software 1075a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org// distributed under the License is distributed on an "AS IS" BASIS, 1175a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1275a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org// See the License for the specific language governing permissions and 1375a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org// limitations under the License. 1475a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org 1575a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org#include "util/string_compare.h" 1675a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org 176c42355ce8c105bbadf57deb999c777b5c49df59roubert@google.com#include <libaddressinput/util/basictypes.h> 186c42355ce8c105bbadf57deb999c777b5c49df59roubert@google.com 1975a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org#include <string> 2075a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org 2175a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org#include <gtest/gtest.h> 2275a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org 2375a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.orgnamespace { 2475a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org 2575a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.orgusing i18n::addressinput::StringCompare; 2675a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org 2775a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.orgstruct TestCase { 2875a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org TestCase(const std::string& left, 2975a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org const std::string& right, 3090e624a56973856b6b81112fc1cd815a4224aa96roubert@google.com bool should_be_equal, 3190e624a56973856b6b81112fc1cd815a4224aa96roubert@google.com bool should_be_less) 3290e624a56973856b6b81112fc1cd815a4224aa96roubert@google.com : left(left), 3390e624a56973856b6b81112fc1cd815a4224aa96roubert@google.com right(right), 3490e624a56973856b6b81112fc1cd815a4224aa96roubert@google.com should_be_equal(should_be_equal), 3590e624a56973856b6b81112fc1cd815a4224aa96roubert@google.com should_be_less(should_be_less) {} 3675a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org 3775a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org ~TestCase() {} 3875a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org 3975a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org std::string left; 4075a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org std::string right; 4175a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org bool should_be_equal; 4290e624a56973856b6b81112fc1cd815a4224aa96roubert@google.com bool should_be_less; 4375a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org}; 4475a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org 4575a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.orgclass StringCompareTest : public testing::TestWithParam<TestCase> { 4675a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org protected: 476c42355ce8c105bbadf57deb999c777b5c49df59roubert@google.com StringCompareTest() {} 4875a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org StringCompare compare_; 496c42355ce8c105bbadf57deb999c777b5c49df59roubert@google.com 506c42355ce8c105bbadf57deb999c777b5c49df59roubert@google.com private: 516c42355ce8c105bbadf57deb999c777b5c49df59roubert@google.com DISALLOW_COPY_AND_ASSIGN(StringCompareTest); 5275a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org}; 5375a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org 5475a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.orgTEST_P(StringCompareTest, CorrectComparison) { 5575a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org if (GetParam().should_be_equal) { 5675a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org EXPECT_TRUE(compare_.NaturalEquals(GetParam().left, GetParam().right)); 5775a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org } else { 5875a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org EXPECT_FALSE(compare_.NaturalEquals(GetParam().left, GetParam().right)); 5975a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org } 6075a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org} 6175a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org 6290e624a56973856b6b81112fc1cd815a4224aa96roubert@google.comTEST_P(StringCompareTest, CorrectLess) { 6390e624a56973856b6b81112fc1cd815a4224aa96roubert@google.com if (GetParam().should_be_less) { 6490e624a56973856b6b81112fc1cd815a4224aa96roubert@google.com EXPECT_TRUE(compare_.NaturalLess(GetParam().left, GetParam().right)); 6590e624a56973856b6b81112fc1cd815a4224aa96roubert@google.com } else { 6690e624a56973856b6b81112fc1cd815a4224aa96roubert@google.com EXPECT_FALSE(compare_.NaturalLess(GetParam().left, GetParam().right)); 6790e624a56973856b6b81112fc1cd815a4224aa96roubert@google.com } 6890e624a56973856b6b81112fc1cd815a4224aa96roubert@google.com} 6990e624a56973856b6b81112fc1cd815a4224aa96roubert@google.com 7075a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.orgINSTANTIATE_TEST_CASE_P( 7175a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org Comparisons, StringCompareTest, 729df6dae6a50aaed83d010be8a05030c15be204a0roubert@google.com testing::Values( 739df6dae6a50aaed83d010be8a05030c15be204a0roubert@google.com TestCase("foo", "foo", true, false), 749df6dae6a50aaed83d010be8a05030c15be204a0roubert@google.com TestCase("foo", "FOO", true, false), 759df6dae6a50aaed83d010be8a05030c15be204a0roubert@google.com TestCase("bar", "foo", false, true), 769df6dae6a50aaed83d010be8a05030c15be204a0roubert@google.com TestCase( 779df6dae6a50aaed83d010be8a05030c15be204a0roubert@google.com "\xEA\xB0\x95\xEC\x9B\x90\xEB\x8F\x84", /* "강원도" */ 789df6dae6a50aaed83d010be8a05030c15be204a0roubert@google.com "\xEA\xB0\x95\xEC\x9B\x90\xEB\x8F\x84", /* "강원도" */ 799df6dae6a50aaed83d010be8a05030c15be204a0roubert@google.com true, false), 809df6dae6a50aaed83d010be8a05030c15be204a0roubert@google.com TestCase( 819df6dae6a50aaed83d010be8a05030c15be204a0roubert@google.com /* "강원도" */ 829df6dae6a50aaed83d010be8a05030c15be204a0roubert@google.com "\xEA\xB0\x95\xEC\x9B\x90\xEB\x8F\x84", 839df6dae6a50aaed83d010be8a05030c15be204a0roubert@google.com /* "대구광역시" */ 849df6dae6a50aaed83d010be8a05030c15be204a0roubert@google.com "\xEB\x8C\x80\xEA\xB5\xAC\xEA\xB4\x91\xEC\x97\xAD\xEC\x8B\x9C", 859df6dae6a50aaed83d010be8a05030c15be204a0roubert@google.com false, true), 869df6dae6a50aaed83d010be8a05030c15be204a0roubert@google.com TestCase( 879df6dae6a50aaed83d010be8a05030c15be204a0roubert@google.com "Z\xC3\x9CRICH", /* "ZÜRICH" */ 889df6dae6a50aaed83d010be8a05030c15be204a0roubert@google.com "z\xC3\xBCrich", /* "zürich" */ 899df6dae6a50aaed83d010be8a05030c15be204a0roubert@google.com true, false), 909df6dae6a50aaed83d010be8a05030c15be204a0roubert@google.com TestCase( 919df6dae6a50aaed83d010be8a05030c15be204a0roubert@google.com "\xD0\xB0\xD0\xB1\xD0\xB2", /* "абв" */ 929df6dae6a50aaed83d010be8a05030c15be204a0roubert@google.com "\xD0\xB3\xD0\xB4\xD0\xB5", /* "где" */ 939df6dae6a50aaed83d010be8a05030c15be204a0roubert@google.com false, true), 949df6dae6a50aaed83d010be8a05030c15be204a0roubert@google.com TestCase( 959df6dae6a50aaed83d010be8a05030c15be204a0roubert@google.com "\xD0\xB0\xD0\xB1\xD0\xB2", /* "абв" */ 969df6dae6a50aaed83d010be8a05030c15be204a0roubert@google.com "\xD0\x93\xD0\x94\xD0\x95", /* "ГДЕ" */ 979df6dae6a50aaed83d010be8a05030c15be204a0roubert@google.com false, true), 989df6dae6a50aaed83d010be8a05030c15be204a0roubert@google.com TestCase( 999df6dae6a50aaed83d010be8a05030c15be204a0roubert@google.com "\xD0\xB3\xD0\xB4\xD0\xB5", /* "где" */ 1009df6dae6a50aaed83d010be8a05030c15be204a0roubert@google.com "\xD0\xB0\xD0\xB1\xD0\xB2", /* "абв" */ 1019df6dae6a50aaed83d010be8a05030c15be204a0roubert@google.com false, false), 1029df6dae6a50aaed83d010be8a05030c15be204a0roubert@google.com TestCase( 1039df6dae6a50aaed83d010be8a05030c15be204a0roubert@google.com "\xD0\xB3\xD0\xB4\xD0\xB5", /* "где" */ 1049df6dae6a50aaed83d010be8a05030c15be204a0roubert@google.com "\xD0\x90\xD0\x91\xD0\x92", /* "АБВ" */ 1059df6dae6a50aaed83d010be8a05030c15be204a0roubert@google.com false, false))); 10675a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org 10775a0cfdaa6edd47c9917172fa57701b5d22e83efrouslan@chromium.org} // namespace 108