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