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