Home | History | Annotate | Download | only in util
      1 // Copyright (C) 2013 Google Inc.
      2 //
      3 // Licensed under the Apache License, Version 2.0 (the "License");
      4 // you may not use this file except in compliance with the License.
      5 // You may obtain a copy of the License at
      6 //
      7 // http://www.apache.org/licenses/LICENSE-2.0
      8 //
      9 // Unless required by applicable law or agreed to in writing, software
     10 // distributed under the License is distributed on an "AS IS" BASIS,
     11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     12 // See the License for the specific language governing permissions and
     13 // limitations under the License.
     14 
     15 #include "util/string_compare.h"
     16 
     17 #include <libaddressinput/util/basictypes.h>
     18 
     19 #include <string>
     20 
     21 #include <gtest/gtest.h>
     22 
     23 namespace {
     24 
     25 using i18n::addressinput::StringCompare;
     26 
     27 struct TestCase {
     28   TestCase(const std::string& left,
     29            const std::string& right,
     30            bool should_be_equal,
     31            bool should_be_less)
     32       : left(left),
     33         right(right),
     34         should_be_equal(should_be_equal),
     35         should_be_less(should_be_less) {}
     36 
     37   ~TestCase() {}
     38 
     39   std::string left;
     40   std::string right;
     41   bool should_be_equal;
     42   bool should_be_less;
     43 };
     44 
     45 class StringCompareTest : public testing::TestWithParam<TestCase> {
     46  protected:
     47   StringCompareTest() {}
     48   StringCompare compare_;
     49 
     50  private:
     51   DISALLOW_COPY_AND_ASSIGN(StringCompareTest);
     52 };
     53 
     54 TEST_P(StringCompareTest, CorrectComparison) {
     55   if (GetParam().should_be_equal) {
     56     EXPECT_TRUE(compare_.NaturalEquals(GetParam().left, GetParam().right));
     57   } else {
     58     EXPECT_FALSE(compare_.NaturalEquals(GetParam().left, GetParam().right));
     59   }
     60 }
     61 
     62 TEST_P(StringCompareTest, CorrectLess) {
     63   if (GetParam().should_be_less) {
     64     EXPECT_TRUE(compare_.NaturalLess(GetParam().left, GetParam().right));
     65   } else {
     66     EXPECT_FALSE(compare_.NaturalLess(GetParam().left, GetParam().right));
     67   }
     68 }
     69 
     70 INSTANTIATE_TEST_CASE_P(
     71     Comparisons, StringCompareTest,
     72     testing::Values(
     73         TestCase("foo", "foo", true, false),
     74         TestCase("foo", "FOO", true, false),
     75         TestCase("bar", "foo", false, true),
     76         TestCase(
     77             "\xEA\xB0\x95\xEC\x9B\x90\xEB\x8F\x84",  /* "" */
     78             "\xEA\xB0\x95\xEC\x9B\x90\xEB\x8F\x84",  /* "" */
     79             true, false),
     80         TestCase(
     81             /* "" */
     82             "\xEA\xB0\x95\xEC\x9B\x90\xEB\x8F\x84",
     83             /* "" */
     84             "\xEB\x8C\x80\xEA\xB5\xAC\xEA\xB4\x91\xEC\x97\xAD\xEC\x8B\x9C",
     85             false, true),
     86         TestCase(
     87             "Z\xC3\x9CRICH",  /* "ZRICH" */
     88             "z\xC3\xBCrich",  /* "zrich" */
     89             true, false),
     90         TestCase(
     91             "\xD0\xB0\xD0\xB1\xD0\xB2",  /* "" */
     92             "\xD0\xB3\xD0\xB4\xD0\xB5",  /* "" */
     93             false, true),
     94         TestCase(
     95             "\xD0\xB0\xD0\xB1\xD0\xB2",  /* "" */
     96             "\xD0\x93\xD0\x94\xD0\x95",  /* "" */
     97             false, true),
     98         TestCase(
     99             "\xD0\xB3\xD0\xB4\xD0\xB5",  /* "" */
    100             "\xD0\xB0\xD0\xB1\xD0\xB2",  /* "" */
    101             false, false),
    102         TestCase(
    103             "\xD0\xB3\xD0\xB4\xD0\xB5",  /* "" */
    104             "\xD0\x90\xD0\x91\xD0\x92",  /* "" */
    105             false, false)));
    106 
    107 }  // namespace
    108