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.
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"
11 namespace content_settings {
15 class ListIterator : public RuleIterator {
17 explicit ListIterator(const std::list<Rule>& rules)
20 ~ListIterator() override {}
22 bool HasNext() const override { return !rules_.empty(); }
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();
34 std::list<Rule> rules_;
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)));
55 ScopedVector<RuleIterator> iterators;
56 iterators.push_back(new ListIterator(rules1));
57 iterators.push_back(new ListIterator(rules2));
58 ConcatenationIterator concatenation_iterator(&iterators, NULL);
61 ASSERT_TRUE(concatenation_iterator.HasNext());
62 rule = concatenation_iterator.Next();
63 EXPECT_EQ(rule.primary_pattern, ContentSettingsPattern::FromString("a"));
65 ASSERT_TRUE(concatenation_iterator.HasNext());
66 rule = concatenation_iterator.Next();
67 EXPECT_EQ(rule.primary_pattern, ContentSettingsPattern::FromString("b"));
69 ASSERT_TRUE(concatenation_iterator.HasNext());
70 rule = concatenation_iterator.Next();
71 EXPECT_EQ(rule.primary_pattern, ContentSettingsPattern::FromString("c"));
73 ASSERT_TRUE(concatenation_iterator.HasNext());
74 rule = concatenation_iterator.Next();
75 EXPECT_EQ(rule.primary_pattern, ContentSettingsPattern::FromString("d"));
77 EXPECT_FALSE(concatenation_iterator.HasNext());
80 } // namespace content_settings