| Index: chrome/browser/extensions/api/declarative_content/content_condition_unittest.cc
|
| diff --git a/chrome/browser/extensions/api/declarative_content/content_condition_unittest.cc b/chrome/browser/extensions/api/declarative_content/content_condition_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..7285dc867b23b8cda1e16c2efd2e3906d25f9573
|
| --- /dev/null
|
| +++ b/chrome/browser/extensions/api/declarative_content/content_condition_unittest.cc
|
| @@ -0,0 +1,97 @@
|
| +// Copyright (c) 2012 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_content/content_condition.h"
|
| +
|
| +#include <set>
|
| +
|
| +#include "base/message_loop.h"
|
| +#include "base/test/values_test_util.h"
|
| +#include "base/values.h"
|
| +#include "chrome/browser/extensions/api/declarative_content/content_constants.h"
|
| +#include "chrome/common/extensions/matcher/url_matcher.h"
|
| +#include "testing/gmock/include/gmock/gmock.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +namespace extensions {
|
| +namespace {
|
| +
|
| +using testing::ElementsAre;
|
| +using testing::HasSubstr;
|
| +
|
| +TEST(ContentConditionTest, ErroneousCondition) {
|
| + URLMatcher matcher;
|
| +
|
| + std::string error;
|
| + scoped_ptr<ContentCondition> result;
|
| +
|
| + // Test unknown condition name passed.
|
| + error.clear();
|
| + result = ContentCondition::Create(
|
| + matcher.condition_factory(),
|
| + *base::ParseJson(
|
| + "{\n"
|
| + " \"invalid\": \"foobar\",\n"
|
| + " \"instanceType\": \"declarativeContent.PageStateMatcher\",\n"
|
| + "}"),
|
| + &error);
|
| + EXPECT_THAT(error, HasSubstr("Unknown condition attribute"));
|
| + EXPECT_FALSE(result);
|
| +
|
| + // Test wrong datatype in host_suffix.
|
| + error.clear();
|
| + result = ContentCondition::Create(
|
| + matcher.condition_factory(),
|
| + *base::ParseJson(
|
| + "{\n"
|
| + " \"top_url\": [],\n"
|
| + " \"instanceType\": \"declarativeContent.PageStateMatcher\",\n"
|
| + "}"),
|
| + &error);
|
| + EXPECT_THAT(error, HasSubstr("invalid type"));
|
| + EXPECT_FALSE(result);
|
| +
|
| + EXPECT_TRUE(matcher.IsEmpty()) << "Errors shouldn't add URL conditions";
|
| +}
|
| +
|
| +TEST(ContentConditionTest, ConditionWithUrlAndCss) {
|
| + URLMatcher matcher;
|
| +
|
| + std::string error;
|
| + scoped_ptr<ContentCondition> result = ContentCondition::Create(
|
| + matcher.condition_factory(),
|
| + *base::ParseJson(
|
| + "{\n"
|
| + " \"instanceType\": \"declarativeContent.PageStateMatcher\",\n"
|
| + " \"top_url\": {\"hostSuffix\": \"example.com\"},\n"
|
| + " \"css\": [\"input\"],\n"
|
| + "}"),
|
| + &error);
|
| + EXPECT_EQ("", error);
|
| + ASSERT_TRUE(result);
|
| +
|
| + URLMatcherConditionSet::Vector all_new_condition_sets;
|
| + all_new_condition_sets.push_back(result->url_matcher_condition_set());
|
| + matcher.AddConditionSets(all_new_condition_sets);
|
| + EXPECT_FALSE(matcher.IsEmpty());
|
| +
|
| + RendererContentMatchData match_data;
|
| + match_data.top_url = GURL("http://www.example.com/foobar");
|
| + match_data.css_rules.insert("input");
|
| +
|
| + std::set<URLMatcherConditionSet::ID> matches =
|
| + matcher.MatchURL(GURL("http://google.com/"));
|
| + EXPECT_THAT(matches, ElementsAre(/*empty*/));
|
| + matches = matcher.MatchURL(match_data.top_url);
|
| + EXPECT_THAT(matches, ElementsAre(result->url_matcher_condition_set_id()));
|
| +
|
| + EXPECT_TRUE(result->IsFulfilled(match_data));
|
| +
|
| + match_data.css_rules.clear();
|
| + match_data.css_rules.insert("body");
|
| + EXPECT_FALSE(result->IsFulfilled(match_data));
|
| +}
|
| +
|
| +} // namespace
|
| +} // namespace extensions
|
|
|