1c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com// Copyright (C) 2014 Google Inc. 2c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com// 3c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com// Licensed under the Apache License, Version 2.0 (the "License"); 4c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com// you may not use this file except in compliance with the License. 5c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com// You may obtain a copy of the License at 6c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com// 7c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com// http://www.apache.org/licenses/LICENSE-2.0 8c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com// 9c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com// Unless required by applicable law or agreed to in writing, software 10c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com// distributed under the License is distributed on an "AS IS" BASIS, 11c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com// See the License for the specific language governing permissions and 13c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com// limitations under the License. 14c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com 15c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com#include "post_box_matchers.h" 16c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com 17c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com#include <cstddef> 18c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com#include <vector> 19c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com 20c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com#include <gtest/gtest.h> 21c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com 229f47fe3ed525accac995b095d408a825673a2ee1roubert@google.com#include "rule.h" 239f47fe3ed525accac995b095d408a825673a2ee1roubert@google.com 24c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.comnamespace i18n { 25c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.comnamespace addressinput { 26fc1f6dd0d327c108cd8b0f7ed194099d5324d2f6rouslan@chromium.orgstruct RE2ptr; 27c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com} // namespace addressinput 28c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com} // namespace i18n 29c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com 30c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.comnamespace { 31c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com 32c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.comusing i18n::addressinput::PostBoxMatchers; 33c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.comusing i18n::addressinput::RE2ptr; 34c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.comusing i18n::addressinput::Rule; 35c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com 36c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.comTEST(PostBoxMatchersTest, AlwaysGetMatcherForLanguageUnd) { 37c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com Rule rule; 38c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com std::vector<const RE2ptr*> matchers = PostBoxMatchers::GetMatchers(rule); 39c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com EXPECT_EQ(1, matchers.size()); 40c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com EXPECT_TRUE(matchers[0] != NULL); 41c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com} 42c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com 43c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.comTEST(PostBoxMatchersTest, NoMatcherForInvalidLanguage) { 44c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com Rule rule; 45c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com ASSERT_TRUE(rule.ParseSerializedRule("{\"languages\":\"xx\"}")); 46c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com std::vector<const RE2ptr*> matchers = PostBoxMatchers::GetMatchers(rule); 47c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com EXPECT_EQ(1, matchers.size()); 48c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com EXPECT_TRUE(matchers[0] != NULL); 49c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com} 50c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com 51c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.comTEST(PostBoxMatchersTest, HasMatcherForValidLanguage) { 52c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com Rule rule; 53c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com ASSERT_TRUE(rule.ParseSerializedRule("{\"languages\":\"sv\"}")); 54c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com std::vector<const RE2ptr*> matchers = PostBoxMatchers::GetMatchers(rule); 55c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com EXPECT_EQ(2, matchers.size()); 56c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com EXPECT_TRUE(matchers[0] != NULL); 57c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com EXPECT_TRUE(matchers[1] != NULL); 58c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com} 59c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com 60c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.comTEST(PostBoxMatchersTest, MixValidAndInvalidLanguage) { 61c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com Rule rule; 62c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com ASSERT_TRUE(rule.ParseSerializedRule("{\"languages\":\"xx~sv\"}")); 63c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com std::vector<const RE2ptr*> matchers = PostBoxMatchers::GetMatchers(rule); 64c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com EXPECT_EQ(2, matchers.size()); 65c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com EXPECT_TRUE(matchers[0] != NULL); 66c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com EXPECT_TRUE(matchers[1] != NULL); 67c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com} 68c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com 69c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.comTEST(PostBoxMatchersTest, UseBaseLanguageForMatching) { 70c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com Rule rule; 71c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com ASSERT_TRUE(rule.ParseSerializedRule("{\"languages\":\"sv-SE\"}")); 72c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com std::vector<const RE2ptr*> matchers = PostBoxMatchers::GetMatchers(rule); 73c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com EXPECT_EQ(2, matchers.size()); 74c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com EXPECT_TRUE(matchers[0] != NULL); 75c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com EXPECT_TRUE(matchers[1] != NULL); 76c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com} 77c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com 78c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.comTEST(PostBoxMatchersTest, LenientLanguageTagParsing) { 79c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com Rule rule; 80c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com ASSERT_TRUE(rule.ParseSerializedRule("{\"languages\":\"SV_SE\"}")); 81c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com std::vector<const RE2ptr*> matchers = PostBoxMatchers::GetMatchers(rule); 82c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com EXPECT_EQ(2, matchers.size()); 83c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com EXPECT_TRUE(matchers[0] != NULL); 84c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com EXPECT_TRUE(matchers[1] != NULL); 85c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com} 86c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com 87c3c546166647eeda301711d0ee83d4f7187f3a9croubert@google.com} // namespace 88