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