Chromium Code Reviews| 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..958eb5b223acc1744edf09e1101014b4e370c4db |
| --- /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(DeclarativeContentConditionTest, ErroneousCondition) { |
| + URLMatcher matcher; |
| + |
| + std::string error; |
| + scoped_ptr<ContentCondition> result; |
| + |
| + // Test unknown condition name passed. |
| + error.clear(); |
| + result = ContentCondition::Create( |
| + matcher.condition_factory(), |
| + *base::test::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. |
|
battre
2013/01/18 10:37:29
This comment is incorrect.
Jeffrey Yasskin
2013/01/22 08:01:22
Fixed.
|
| + error.clear(); |
| + result = ContentCondition::Create( |
| + matcher.condition_factory(), |
| + *base::test::ParseJson( |
| + "{\n" |
| + " \"pageUrl\": [],\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(DeclarativeContentConditionTest, ConditionWithUrlAndCss) { |
| + URLMatcher matcher; |
| + |
| + std::string error; |
| + scoped_ptr<ContentCondition> result = ContentCondition::Create( |
| + matcher.condition_factory(), |
| + *base::test::ParseJson( |
| + "{\n" |
| + " \"instanceType\": \"declarativeContent.PageStateMatcher\",\n" |
| + " \"pageUrl\": {\"hostSuffix\": \"example.com\"},\n" |
| + " \"css\": [\"input\"],\n" |
| + "}"), |
| + &error); |
| + EXPECT_EQ("", error); |
| + ASSERT_TRUE(result); |
| + |
| + URLMatcherConditionSet::Vector all_new_condition_sets; |
| + result->GetURLMatcherConditionSets(&all_new_condition_sets); |
| + matcher.AddConditionSets(all_new_condition_sets); |
| + EXPECT_FALSE(matcher.IsEmpty()); |
| + |
| + RendererContentMatchData match_data; |
| + match_data.page_url = GURL("http://www.example.com/foobar"); |
| + match_data.css_selectors.insert("input"); |
| + |
| + std::set<URLMatcherConditionSet::ID> matches = |
| + matcher.MatchURL(GURL("http://google.com/")); |
| + EXPECT_THAT(matches, ElementsAre(/*empty*/)); |
| + matches = matcher.MatchURL(match_data.page_url); |
| + EXPECT_THAT(matches, ElementsAre(result->url_matcher_condition_set_id())); |
| + |
| + EXPECT_TRUE(result->IsFulfilled(matches, match_data)); |
| + |
| + match_data.css_selectors.clear(); |
| + match_data.css_selectors.insert("body"); |
| + EXPECT_FALSE(result->IsFulfilled(matches, match_data)); |
| +} |
| + |
| +} // namespace |
| +} // namespace extensions |