summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/core/css/resolver/cascade_filter_test.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/blink/renderer/core/css/resolver/cascade_filter_test.cc')
-rw-r--r--chromium/third_party/blink/renderer/core/css/resolver/cascade_filter_test.cc121
1 files changed, 121 insertions, 0 deletions
diff --git a/chromium/third_party/blink/renderer/core/css/resolver/cascade_filter_test.cc b/chromium/third_party/blink/renderer/core/css/resolver/cascade_filter_test.cc
new file mode 100644
index 00000000000..2ef0adaa4f6
--- /dev/null
+++ b/chromium/third_party/blink/renderer/core/css/resolver/cascade_filter_test.cc
@@ -0,0 +1,121 @@
+// Copyright 2020 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 "third_party/blink/renderer/core/css/resolver/cascade_filter.h"
+#include <gtest/gtest.h>
+
+namespace blink {
+
+TEST(CascadeFilterTest, FilterNothing) {
+ CascadeFilter filter;
+ EXPECT_FALSE(filter.Rejects(GetCSSPropertyBackgroundColor()));
+ EXPECT_FALSE(filter.Rejects(GetCSSPropertyColor()));
+ EXPECT_FALSE(filter.Rejects(GetCSSPropertyDisplay()));
+ EXPECT_FALSE(filter.Rejects(GetCSSPropertyFloat()));
+ EXPECT_FALSE(filter.Rejects(GetCSSPropertyInternalVisitedColor()));
+}
+
+TEST(CascadeFilterTest, ConstructorBehavesLikeSingleAdd) {
+ EXPECT_EQ(CascadeFilter().Add(CSSProperty::kInherited, true),
+ CascadeFilter(CSSProperty::kInherited, true));
+ EXPECT_EQ(CascadeFilter().Add(CSSProperty::kInherited, false),
+ CascadeFilter(CSSProperty::kInherited, false));
+}
+
+TEST(CascadeFilterTest, Equals) {
+ EXPECT_EQ(CascadeFilter(CSSProperty::kInherited, true),
+ CascadeFilter(CSSProperty::kInherited, true));
+ EXPECT_EQ(CascadeFilter(CSSProperty::kInherited, false),
+ CascadeFilter(CSSProperty::kInherited, false));
+}
+
+TEST(CascadeFilterTest, NotEqualsMask) {
+ EXPECT_NE(CascadeFilter(CSSProperty::kInherited, true),
+ CascadeFilter(CSSProperty::kInherited, false));
+ EXPECT_NE(CascadeFilter(CSSProperty::kInherited, false),
+ CascadeFilter(CSSProperty::kVisited, false));
+ EXPECT_NE(CascadeFilter(CSSProperty::kInherited, false),
+ CascadeFilter(CSSProperty::kInherited, false)
+ .Add(CSSProperty::kVisited, false));
+ EXPECT_NE(CascadeFilter(CSSProperty::kInherited, false), CascadeFilter());
+}
+
+TEST(CascadeFilterTest, FilterInherited) {
+ CascadeFilter filter(CSSProperty::kInherited, true);
+ EXPECT_FALSE(filter.Rejects(GetCSSPropertyBackgroundColor()));
+ EXPECT_TRUE(filter.Rejects(GetCSSPropertyColor()));
+ EXPECT_TRUE(filter.Rejects(GetCSSPropertyFontSize()));
+ EXPECT_FALSE(filter.Rejects(GetCSSPropertyDisplay()));
+ EXPECT_FALSE(filter.Rejects(GetCSSPropertyFloat()));
+ EXPECT_TRUE(filter.Rejects(GetCSSPropertyInternalVisitedColor()));
+}
+
+TEST(CascadeFilterTest, FilterNonInherited) {
+ CascadeFilter filter(CSSProperty::kInherited, false);
+ EXPECT_TRUE(filter.Rejects(GetCSSPropertyBackgroundColor()));
+ EXPECT_FALSE(filter.Rejects(GetCSSPropertyColor()));
+ EXPECT_TRUE(filter.Rejects(GetCSSPropertyDisplay()));
+ EXPECT_TRUE(filter.Rejects(GetCSSPropertyFloat()));
+ EXPECT_FALSE(filter.Rejects(GetCSSPropertyInternalVisitedColor()));
+}
+
+TEST(CascadeFilterTest, FilterVisitedAndInherited) {
+ auto filter = CascadeFilter()
+ .Add(CSSProperty::kVisited, true)
+ .Add(CSSProperty::kInherited, true);
+ EXPECT_FALSE(filter.Rejects(GetCSSPropertyBackgroundColor()));
+ EXPECT_TRUE(filter.Rejects(GetCSSPropertyColor()));
+ EXPECT_FALSE(filter.Rejects(GetCSSPropertyDisplay()));
+ EXPECT_FALSE(filter.Rejects(GetCSSPropertyFloat()));
+ EXPECT_TRUE(filter.Rejects(GetCSSPropertyInternalVisitedBackgroundColor()));
+}
+
+TEST(CascadeFilterTest, FilterVisitedAndNonInherited) {
+ auto filter = CascadeFilter()
+ .Add(CSSProperty::kVisited, true)
+ .Add(CSSProperty::kInherited, false);
+ EXPECT_TRUE(filter.Rejects(GetCSSPropertyBackgroundColor()));
+ EXPECT_FALSE(filter.Rejects(GetCSSPropertyColor()));
+ EXPECT_TRUE(filter.Rejects(GetCSSPropertyDisplay()));
+ EXPECT_TRUE(filter.Rejects(GetCSSPropertyFloat()));
+ EXPECT_TRUE(filter.Rejects(GetCSSPropertyInternalVisitedColor()));
+}
+
+TEST(CascadeFilterTest, RejectFlag) {
+ auto filter = CascadeFilter()
+ .Add(CSSProperty::kVisited, true)
+ .Add(CSSProperty::kInherited, false);
+ EXPECT_TRUE(filter.Rejects(CSSProperty::kVisited, true));
+ EXPECT_TRUE(filter.Rejects(CSSProperty::kInherited, false));
+ EXPECT_FALSE(filter.Rejects(CSSProperty::kVisited, false));
+ EXPECT_FALSE(filter.Rejects(CSSProperty::kInherited, true));
+}
+
+TEST(CascadeFilterTest, AddDoesNotOverwrite) {
+ auto filter = CascadeFilter()
+ .Add(CSSProperty::kVisited, true)
+ .Add(CSSProperty::kInherited, false);
+ EXPECT_TRUE(filter.Rejects(CSSProperty::kVisited, true));
+ EXPECT_TRUE(filter.Rejects(CSSProperty::kInherited, false));
+ filter = filter.Add(CSSProperty::kVisited, false);
+ filter = filter.Add(CSSProperty::kInherited, true);
+ // Add has no effect if flags are already set:
+ EXPECT_TRUE(filter.Rejects(CSSProperty::kVisited, true));
+ EXPECT_TRUE(filter.Rejects(CSSProperty::kInherited, false));
+}
+
+TEST(CascadeFilterTest, SetDoesOverwrite) {
+ auto filter = CascadeFilter()
+ .Add(CSSProperty::kVisited, true)
+ .Add(CSSProperty::kInherited, false);
+ EXPECT_TRUE(filter.Rejects(CSSProperty::kVisited, true));
+ EXPECT_TRUE(filter.Rejects(CSSProperty::kInherited, false));
+ filter = filter.Set(CSSProperty::kVisited, false);
+ filter = filter.Set(CSSProperty::kInherited, true);
+ // Add has no effect if flags are already set:
+ EXPECT_TRUE(filter.Rejects(CSSProperty::kVisited, false));
+ EXPECT_TRUE(filter.Rejects(CSSProperty::kInherited, true));
+}
+
+} // namespace blink