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 #include <utility>
7 #include <vector>
8
9 #include "components/content_settings/core/browser/content_settings_rule.h"
10 #include "components/content_settings/core/common/content_settings_pattern.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12
13 namespace content_settings {
14
15 namespace {
16
17 class ListIterator : public RuleIterator {
18 public:
ListIterator(std::list<Rule> rules)19 explicit ListIterator(std::list<Rule> rules) : rules_(std::move(rules)) {}
20
~ListIterator()21 ~ListIterator() override {}
22
HasNext() const23 bool HasNext() const override { return !rules_.empty(); }
24
Next()25 Rule Next() override {
26 EXPECT_FALSE(rules_.empty());
27 Rule rule = std::move(rules_.front());
28 rules_.pop_front();
29 return rule;
30 }
31
32 private:
33 std::list<Rule> rules_;
34 };
35
36 } // namespace
37
TEST(RuleTest,ConcatenationIterator)38 TEST(RuleTest, ConcatenationIterator) {
39 std::list<Rule> rules1;
40 rules1.push_back(Rule(ContentSettingsPattern::FromString("a"),
41 ContentSettingsPattern::Wildcard(), base::Value(0)));
42 rules1.push_back(Rule(ContentSettingsPattern::FromString("b"),
43 ContentSettingsPattern::Wildcard(), base::Value(0)));
44 std::list<Rule> rules2;
45 rules2.push_back(Rule(ContentSettingsPattern::FromString("c"),
46 ContentSettingsPattern::Wildcard(), base::Value(0)));
47 rules2.push_back(Rule(ContentSettingsPattern::FromString("d"),
48 ContentSettingsPattern::Wildcard(), base::Value(0)));
49
50 std::vector<std::unique_ptr<RuleIterator>> iterators;
51 iterators.push_back(std::make_unique<ListIterator>(std::move(rules1)));
52 iterators.push_back(std::make_unique<ListIterator>(std::move(rules2)));
53 ConcatenationIterator concatenation_iterator(std::move(iterators), nullptr);
54
55 Rule rule;
56 ASSERT_TRUE(concatenation_iterator.HasNext());
57 rule = concatenation_iterator.Next();
58 EXPECT_EQ(rule.primary_pattern, ContentSettingsPattern::FromString("a"));
59
60 ASSERT_TRUE(concatenation_iterator.HasNext());
61 rule = concatenation_iterator.Next();
62 EXPECT_EQ(rule.primary_pattern, ContentSettingsPattern::FromString("b"));
63
64 ASSERT_TRUE(concatenation_iterator.HasNext());
65 rule = concatenation_iterator.Next();
66 EXPECT_EQ(rule.primary_pattern, ContentSettingsPattern::FromString("c"));
67
68 ASSERT_TRUE(concatenation_iterator.HasNext());
69 rule = concatenation_iterator.Next();
70 EXPECT_EQ(rule.primary_pattern, ContentSettingsPattern::FromString("d"));
71
72 EXPECT_FALSE(concatenation_iterator.HasNext());
73 }
74
75 } // namespace content_settings
76