Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(579)

Unified Diff: chrome/browser/extensions/api/declarative/declarative_rule_unittest.cc

Issue 550403003: Move declarative api files to extensions/browser/api/declarative. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix browser tests. Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/api/declarative/declarative_rule_unittest.cc
diff --git a/chrome/browser/extensions/api/declarative/declarative_rule_unittest.cc b/chrome/browser/extensions/api/declarative/declarative_rule_unittest.cc
deleted file mode 100644
index 8eeda274725a92be345286eeb1e82b9cf5403edc..0000000000000000000000000000000000000000
--- a/chrome/browser/extensions/api/declarative/declarative_rule_unittest.cc
+++ /dev/null
@@ -1,442 +0,0 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/extensions/api/declarative/declarative_rule.h"
-
-#include "base/bind.h"
-#include "base/message_loop/message_loop.h"
-#include "base/test/values_test_util.h"
-#include "base/values.h"
-#include "components/url_matcher/url_matcher_constants.h"
-#include "extensions/common/extension_builder.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-using base::test::ParseJson;
-using url_matcher::URLMatcher;
-using url_matcher::URLMatcherConditionFactory;
-using url_matcher::URLMatcherConditionSet;
-
-namespace extensions {
-
-namespace {
-
-template<typename T>
-linked_ptr<T> ScopedToLinkedPtr(scoped_ptr<T> ptr) {
- return linked_ptr<T>(ptr.release());
-}
-
-scoped_ptr<base::DictionaryValue> SimpleManifest() {
- return DictionaryBuilder()
- .Set("name", "extension")
- .Set("manifest_version", 2)
- .Set("version", "1.0")
- .Build();
-}
-
-} // namespace
-
-struct RecordingCondition {
- typedef int MatchData;
-
- URLMatcherConditionFactory* factory;
- scoped_ptr<base::Value> value;
-
- void GetURLMatcherConditionSets(
- URLMatcherConditionSet::Vector* condition_sets) const {
- // No condition sets.
- }
-
- static scoped_ptr<RecordingCondition> Create(
- const Extension* extension,
- URLMatcherConditionFactory* url_matcher_condition_factory,
- const base::Value& condition,
- std::string* error) {
- const base::DictionaryValue* dict = NULL;
- if (condition.GetAsDictionary(&dict) && dict->HasKey("bad_key")) {
- *error = "Found error key";
- return scoped_ptr<RecordingCondition>();
- }
-
- scoped_ptr<RecordingCondition> result(new RecordingCondition());
- result->factory = url_matcher_condition_factory;
- result->value.reset(condition.DeepCopy());
- return result.Pass();
- }
-};
-typedef DeclarativeConditionSet<RecordingCondition> RecordingConditionSet;
-
-TEST(DeclarativeConditionTest, ErrorConditionSet) {
- URLMatcher matcher;
- RecordingConditionSet::AnyVector conditions;
- conditions.push_back(ScopedToLinkedPtr(ParseJson("{\"key\": 1}")));
- conditions.push_back(ScopedToLinkedPtr(ParseJson("{\"bad_key\": 2}")));
-
- std::string error;
- scoped_ptr<RecordingConditionSet> result = RecordingConditionSet::Create(
- NULL, matcher.condition_factory(), conditions, &error);
- EXPECT_EQ("Found error key", error);
- ASSERT_FALSE(result);
-}
-
-TEST(DeclarativeConditionTest, CreateConditionSet) {
- URLMatcher matcher;
- RecordingConditionSet::AnyVector conditions;
- conditions.push_back(ScopedToLinkedPtr(ParseJson("{\"key\": 1}")));
- conditions.push_back(ScopedToLinkedPtr(ParseJson("[\"val1\", 2]")));
-
- // Test insertion
- std::string error;
- scoped_ptr<RecordingConditionSet> result = RecordingConditionSet::Create(
- NULL, matcher.condition_factory(), conditions, &error);
- EXPECT_EQ("", error);
- ASSERT_TRUE(result);
- EXPECT_EQ(2u, result->conditions().size());
-
- EXPECT_EQ(matcher.condition_factory(), result->conditions()[0]->factory);
- EXPECT_TRUE(ParseJson("{\"key\": 1}")->Equals(
- result->conditions()[0]->value.get()));
-}
-
-struct FulfillableCondition {
- struct MatchData {
- int value;
- const std::set<URLMatcherConditionSet::ID>& url_matches;
- };
-
- scoped_refptr<URLMatcherConditionSet> condition_set;
- int condition_set_id;
- int max_value;
-
- URLMatcherConditionSet::ID url_matcher_condition_set_id() const {
- return condition_set_id;
- }
-
- scoped_refptr<URLMatcherConditionSet> url_matcher_condition_set() const {
- return condition_set;
- }
-
- void GetURLMatcherConditionSets(
- URLMatcherConditionSet::Vector* condition_sets) const {
- if (condition_set.get())
- condition_sets->push_back(condition_set);
- }
-
- bool IsFulfilled(const MatchData& match_data) const {
- if (condition_set_id != -1 &&
- !ContainsKey(match_data.url_matches, condition_set_id))
- return false;
- return match_data.value <= max_value;
- }
-
- static scoped_ptr<FulfillableCondition> Create(
- const Extension* extension,
- URLMatcherConditionFactory* url_matcher_condition_factory,
- const base::Value& condition,
- std::string* error) {
- scoped_ptr<FulfillableCondition> result(new FulfillableCondition());
- const base::DictionaryValue* dict;
- if (!condition.GetAsDictionary(&dict)) {
- *error = "Expected dict";
- return result.Pass();
- }
- if (!dict->GetInteger("url_id", &result->condition_set_id))
- result->condition_set_id = -1;
- if (!dict->GetInteger("max", &result->max_value))
- *error = "Expected integer at ['max']";
- if (result->condition_set_id != -1) {
- result->condition_set = new URLMatcherConditionSet(
- result->condition_set_id,
- URLMatcherConditionSet::Conditions());
- }
- return result.Pass();
- }
-};
-
-TEST(DeclarativeConditionTest, FulfillConditionSet) {
- typedef DeclarativeConditionSet<FulfillableCondition> FulfillableConditionSet;
- FulfillableConditionSet::AnyVector conditions;
- conditions.push_back(ScopedToLinkedPtr(ParseJson(
- "{\"url_id\": 1, \"max\": 3}")));
- conditions.push_back(ScopedToLinkedPtr(ParseJson(
- "{\"url_id\": 2, \"max\": 5}")));
- conditions.push_back(ScopedToLinkedPtr(ParseJson(
- "{\"url_id\": 3, \"max\": 1}")));
- conditions.push_back(ScopedToLinkedPtr(ParseJson(
- "{\"max\": -5}"))); // No url.
-
- // Test insertion
- std::string error;
- scoped_ptr<FulfillableConditionSet> result =
- FulfillableConditionSet::Create(NULL, NULL, conditions, &error);
- ASSERT_EQ("", error);
- ASSERT_TRUE(result);
- EXPECT_EQ(4u, result->conditions().size());
-
- std::set<URLMatcherConditionSet::ID> url_matches;
- FulfillableCondition::MatchData match_data = { 0, url_matches };
- EXPECT_FALSE(result->IsFulfilled(1, match_data))
- << "Testing an ID that's not in url_matches forwards to the Condition, "
- << "which doesn't match.";
- EXPECT_FALSE(result->IsFulfilled(-1, match_data))
- << "Testing the 'no ID' value tries to match the 4th condition, but "
- << "its max is too low.";
- match_data.value = -5;
- EXPECT_TRUE(result->IsFulfilled(-1, match_data))
- << "Testing the 'no ID' value tries to match the 4th condition, and "
- << "this value is low enough.";
-
- url_matches.insert(1);
- match_data.value = 3;
- EXPECT_TRUE(result->IsFulfilled(1, match_data))
- << "Tests a condition with a url matcher, for a matching value.";
- match_data.value = 4;
- EXPECT_FALSE(result->IsFulfilled(1, match_data))
- << "Tests a condition with a url matcher, for a non-matching value "
- << "that would match a different condition.";
- url_matches.insert(2);
- EXPECT_TRUE(result->IsFulfilled(2, match_data))
- << "Tests with 2 elements in the match set.";
-
- // Check the condition sets:
- URLMatcherConditionSet::Vector condition_sets;
- result->GetURLMatcherConditionSets(&condition_sets);
- ASSERT_EQ(3U, condition_sets.size());
- EXPECT_EQ(1, condition_sets[0]->id());
- EXPECT_EQ(2, condition_sets[1]->id());
- EXPECT_EQ(3, condition_sets[2]->id());
-}
-
-// DeclarativeAction
-
-class SummingAction : public base::RefCounted<SummingAction> {
- public:
- typedef int ApplyInfo;
-
- SummingAction(int increment, int min_priority)
- : increment_(increment), min_priority_(min_priority) {}
-
- static scoped_refptr<const SummingAction> Create(
- content::BrowserContext* browser_context,
- const Extension* extension,
- const base::Value& action,
- std::string* error,
- bool* bad_message) {
- int increment = 0;
- int min_priority = 0;
- const base::DictionaryValue* dict = NULL;
- EXPECT_TRUE(action.GetAsDictionary(&dict));
- if (dict->HasKey("error")) {
- EXPECT_TRUE(dict->GetString("error", error));
- return scoped_refptr<const SummingAction>(NULL);
- }
- if (dict->HasKey("bad")) {
- *bad_message = true;
- return scoped_refptr<const SummingAction>(NULL);
- }
-
- EXPECT_TRUE(dict->GetInteger("value", &increment));
- dict->GetInteger("priority", &min_priority);
- return scoped_refptr<const SummingAction>(
- new SummingAction(increment, min_priority));
- }
-
- void Apply(const std::string& extension_id,
- const base::Time& install_time,
- int* sum) const {
- *sum += increment_;
- }
-
- int increment() const { return increment_; }
- int minimum_priority() const {
- return min_priority_;
- }
-
- private:
- friend class base::RefCounted<SummingAction>;
- virtual ~SummingAction() {}
-
- int increment_;
- int min_priority_;
-};
-typedef DeclarativeActionSet<SummingAction> SummingActionSet;
-
-TEST(DeclarativeActionTest, ErrorActionSet) {
- SummingActionSet::AnyVector actions;
- actions.push_back(ScopedToLinkedPtr(ParseJson("{\"value\": 1}")));
- actions.push_back(ScopedToLinkedPtr(ParseJson("{\"error\": \"the error\"}")));
-
- std::string error;
- bool bad = false;
- scoped_ptr<SummingActionSet> result =
- SummingActionSet::Create(NULL, NULL, actions, &error, &bad);
- EXPECT_EQ("the error", error);
- EXPECT_FALSE(bad);
- EXPECT_FALSE(result);
-
- actions.clear();
- actions.push_back(ScopedToLinkedPtr(ParseJson("{\"value\": 1}")));
- actions.push_back(ScopedToLinkedPtr(ParseJson("{\"bad\": 3}")));
- result = SummingActionSet::Create(NULL, NULL, actions, &error, &bad);
- EXPECT_EQ("", error);
- EXPECT_TRUE(bad);
- EXPECT_FALSE(result);
-}
-
-TEST(DeclarativeActionTest, ApplyActionSet) {
- SummingActionSet::AnyVector actions;
- actions.push_back(ScopedToLinkedPtr(ParseJson(
- "{\"value\": 1,"
- " \"priority\": 5}")));
- actions.push_back(ScopedToLinkedPtr(ParseJson("{\"value\": 2}")));
-
- // Test insertion
- std::string error;
- bool bad = false;
- scoped_ptr<SummingActionSet> result =
- SummingActionSet::Create(NULL, NULL, actions, &error, &bad);
- EXPECT_EQ("", error);
- EXPECT_FALSE(bad);
- ASSERT_TRUE(result);
- EXPECT_EQ(2u, result->actions().size());
-
- int sum = 0;
- result->Apply("ext_id", base::Time(), &sum);
- EXPECT_EQ(3, sum);
- EXPECT_EQ(5, result->GetMinimumPriority());
-}
-
-TEST(DeclarativeRuleTest, Create) {
- typedef DeclarativeRule<FulfillableCondition, SummingAction> Rule;
- linked_ptr<Rule::JsonRule> json_rule(new Rule::JsonRule);
- ASSERT_TRUE(Rule::JsonRule::Populate(
- *ParseJson("{ \n"
- " \"id\": \"rule1\", \n"
- " \"conditions\": [ \n"
- " {\"url_id\": 1, \"max\": 3}, \n"
- " {\"url_id\": 2, \"max\": 5}, \n"
- " ], \n"
- " \"actions\": [ \n"
- " { \n"
- " \"value\": 2 \n"
- " } \n"
- " ], \n"
- " \"priority\": 200 \n"
- "}"),
- json_rule.get()));
-
- const char kExtensionId[] = "ext1";
- scoped_refptr<Extension> extension = ExtensionBuilder()
- .SetManifest(SimpleManifest())
- .SetID(kExtensionId)
- .Build();
-
- base::Time install_time = base::Time::Now();
-
- URLMatcher matcher;
- std::string error;
- scoped_ptr<Rule> rule(Rule::Create(matcher.condition_factory(),
- NULL,
- extension.get(),
- install_time,
- json_rule,
- Rule::ConsistencyChecker(),
- &error));
- EXPECT_EQ("", error);
- ASSERT_TRUE(rule.get());
-
- EXPECT_EQ(kExtensionId, rule->id().first);
- EXPECT_EQ("rule1", rule->id().second);
-
- EXPECT_EQ(200, rule->priority());
-
- const Rule::ConditionSet& condition_set = rule->conditions();
- const Rule::ConditionSet::Conditions& conditions =
- condition_set.conditions();
- ASSERT_EQ(2u, conditions.size());
- EXPECT_EQ(3, conditions[0]->max_value);
- EXPECT_EQ(5, conditions[1]->max_value);
-
- const Rule::ActionSet& action_set = rule->actions();
- const Rule::ActionSet::Actions& actions = action_set.actions();
- ASSERT_EQ(1u, actions.size());
- EXPECT_EQ(2, actions[0]->increment());
-
- int sum = 0;
- rule->Apply(&sum);
- EXPECT_EQ(2, sum);
-}
-
-bool AtLeastOneCondition(
- const DeclarativeConditionSet<FulfillableCondition>* conditions,
- const DeclarativeActionSet<SummingAction>* actions,
- std::string* error) {
- if (conditions->conditions().empty()) {
- *error = "No conditions";
- return false;
- }
- return true;
-}
-
-TEST(DeclarativeRuleTest, CheckConsistency) {
- typedef DeclarativeRule<FulfillableCondition, SummingAction> Rule;
- URLMatcher matcher;
- std::string error;
- linked_ptr<Rule::JsonRule> json_rule(new Rule::JsonRule);
- const char kExtensionId[] = "ext1";
- scoped_refptr<Extension> extension = ExtensionBuilder()
- .SetManifest(SimpleManifest())
- .SetID(kExtensionId)
- .Build();
-
- ASSERT_TRUE(Rule::JsonRule::Populate(
- *ParseJson("{ \n"
- " \"id\": \"rule1\", \n"
- " \"conditions\": [ \n"
- " {\"url_id\": 1, \"max\": 3}, \n"
- " {\"url_id\": 2, \"max\": 5}, \n"
- " ], \n"
- " \"actions\": [ \n"
- " { \n"
- " \"value\": 2 \n"
- " } \n"
- " ], \n"
- " \"priority\": 200 \n"
- "}"),
- json_rule.get()));
- scoped_ptr<Rule> rule(Rule::Create(matcher.condition_factory(),
- NULL,
- extension.get(),
- base::Time(),
- json_rule,
- base::Bind(AtLeastOneCondition),
- &error));
- EXPECT_TRUE(rule);
- EXPECT_EQ("", error);
-
- ASSERT_TRUE(Rule::JsonRule::Populate(
- *ParseJson("{ \n"
- " \"id\": \"rule1\", \n"
- " \"conditions\": [ \n"
- " ], \n"
- " \"actions\": [ \n"
- " { \n"
- " \"value\": 2 \n"
- " } \n"
- " ], \n"
- " \"priority\": 200 \n"
- "}"),
- json_rule.get()));
- rule = Rule::Create(matcher.condition_factory(),
- NULL,
- extension.get(),
- base::Time(),
- json_rule,
- base::Bind(AtLeastOneCondition),
- &error);
- EXPECT_FALSE(rule);
- EXPECT_EQ("No conditions", error);
-}
-
-} // namespace extensions

Powered by Google App Engine
This is Rietveld 408576698