Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / components / content_settings / core / browser / content_settings_rule_unittest.cc
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include <list>
6
7 #include "components/content_settings/core/browser/content_settings_rule.h"
8 #include "components/content_settings/core/common/content_settings_pattern.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10
11 namespace content_settings {
12
13 namespace {
14
15 class ListIterator : public RuleIterator {
16  public:
17   explicit ListIterator(const std::list<Rule>& rules)
18       : rules_(rules) {}
19
20   ~ListIterator() override {}
21
22   bool HasNext() const override { return !rules_.empty(); }
23
24   Rule Next() override {
25     EXPECT_FALSE(rules_.empty());
26     // |front()| returns a reference but we're going to discard the object
27     // referred to; force copying here.
28     Rule rule = rules_.front();
29     rules_.pop_front();
30     return rule;
31   }
32
33  private:
34   std::list<Rule> rules_;
35 };
36
37 }  // namespace
38
39 TEST(RuleTest, ConcatenationIterator) {
40   std::list<Rule> rules1;
41   rules1.push_back(Rule(ContentSettingsPattern::FromString("a"),
42                         ContentSettingsPattern::Wildcard(),
43                         new base::FundamentalValue(0)));
44   rules1.push_back(Rule(ContentSettingsPattern::FromString("b"),
45                         ContentSettingsPattern::Wildcard(),
46                         new base::FundamentalValue(0)));
47   std::list<Rule> rules2;
48   rules2.push_back(Rule(ContentSettingsPattern::FromString("c"),
49                         ContentSettingsPattern::Wildcard(),
50                         new base::FundamentalValue(0)));
51   rules2.push_back(Rule(ContentSettingsPattern::FromString("d"),
52                         ContentSettingsPattern::Wildcard(),
53                         new base::FundamentalValue(0)));
54
55   ScopedVector<RuleIterator> iterators;
56   iterators.push_back(new ListIterator(rules1));
57   iterators.push_back(new ListIterator(rules2));
58   ConcatenationIterator concatenation_iterator(&iterators, NULL);
59
60   Rule rule;
61   ASSERT_TRUE(concatenation_iterator.HasNext());
62   rule = concatenation_iterator.Next();
63   EXPECT_EQ(rule.primary_pattern, ContentSettingsPattern::FromString("a"));
64
65   ASSERT_TRUE(concatenation_iterator.HasNext());
66   rule = concatenation_iterator.Next();
67   EXPECT_EQ(rule.primary_pattern, ContentSettingsPattern::FromString("b"));
68
69   ASSERT_TRUE(concatenation_iterator.HasNext());
70   rule = concatenation_iterator.Next();
71   EXPECT_EQ(rule.primary_pattern, ContentSettingsPattern::FromString("c"));
72
73   ASSERT_TRUE(concatenation_iterator.HasNext());
74   rule = concatenation_iterator.Next();
75   EXPECT_EQ(rule.primary_pattern, ContentSettingsPattern::FromString("d"));
76
77   EXPECT_FALSE(concatenation_iterator.HasNext());
78 }
79
80 }  // namespace content_settings