<!doctype html>
<title>CSS Selectors Test: Tests the style attribute used in an attribute selector</title>
<link rel="help" href="https://drafts.csswg.org/selectors/#attribute-selectors">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
#container { font-size: 16px; color: black; }
.test[style] { color: green }
.test[style=""] { font-size: 100px }
.test[style*="text-decoration"] { background-color: lime }
.test[style] + #sibling { color: green; }
.test[style*="text-decoration"] + #sibling { background-color: lime; }
</style>
<div id="container">
<div id="t1" class="test" style></div>
<div id="t2" class="test" style=""></div>
<div id="t3" class="test" style="text-decoration:underline"></div>
<div id="t4" class="test"></div>
<div id="sibling"></div>
</div>
<script>
const no_match_bgcolor = "rgba(0, 0, 0, 0)";
const no_match_color = "rgb(0, 0, 0)";
const no_match_font_size = "16px";
const match_bgcolor = "rgb(0, 255, 0)";
const match_color = "rgb(0, 128, 0)";
const match_font_size = "100px";
test(() => {
assert_equals(getComputedStyle(t1).backgroundColor, no_match_bgcolor);
assert_equals(getComputedStyle(t1).color, match_color);
assert_equals(getComputedStyle(t1).fontSize, match_font_size);
}, "Match style attribute with no value");
test(() => {
assert_equals(getComputedStyle(t2).backgroundColor, no_match_bgcolor);
assert_equals(getComputedStyle(t2).color, match_color);
assert_equals(getComputedStyle(t2).fontSize, match_font_size);
}, "Match style attribute with empty value");
test(() => {
assert_equals(getComputedStyle(t3).backgroundColor, match_bgcolor);
assert_equals(getComputedStyle(t3).color, match_color);
assert_equals(getComputedStyle(t3).fontSize, no_match_font_size);
}, "Match style attribute with background value");
test(() => {
assert_equals(getComputedStyle(t4).backgroundColor, no_match_bgcolor);
assert_equals(getComputedStyle(t4).color, no_match_color);
assert_equals(getComputedStyle(t4).fontSize, no_match_font_size);
assert_equals(getComputedStyle(sibling).color, no_match_color);
}, "Initially no style attribute to match");
function reset_style(element) {
element.removeAttribute("style");
element.offsetTop;
}
function set_style(element) {
element.setAttribute("style", "text-decoration: underline");
element.offsetTop;
}
test(() => {
reset_style(t4);
t4.setAttribute("style", "text-decoration: underline");
assert_equals(getComputedStyle(t4).backgroundColor, match_bgcolor);
assert_equals(getComputedStyle(t4).color, match_color);
assert_equals(getComputedStyle(t4).fontSize, no_match_font_size);
assert_equals(getComputedStyle(sibling).color, match_color);
}, "Dynamically change style with Element.setAttribute");
test(() => {
reset_style(t4);
t4.style = "text-decoration: underline";
assert_equals(getComputedStyle(t4).backgroundColor, match_bgcolor);
assert_equals(getComputedStyle(t4).color, match_color);
assert_equals(getComputedStyle(t4).fontSize, no_match_font_size);
assert_equals(getComputedStyle(sibling).color, match_color);
}, "Dynamically change style with Element.style");
test(() => {
reset_style(t4);
t4.style.textDecoration = "underline";
assert_equals(getComputedStyle(t4).backgroundColor, match_bgcolor);
assert_equals(getComputedStyle(t4).color, match_color);
assert_equals(getComputedStyle(t4).fontSize, no_match_font_size);
assert_equals(getComputedStyle(sibling).color, match_color);
}, "Dynamically change style with Element.style.property");
test(() => {
set_style(t4);
t4.removeAttribute("style");
assert_equals(getComputedStyle(t4).backgroundColor, no_match_bgcolor);
assert_equals(getComputedStyle(t4).color, no_match_color);
assert_equals(getComputedStyle(t4).fontSize, no_match_font_size);
assert_equals(getComputedStyle(sibling).color, no_match_color);
assert_equals(getComputedStyle(sibling).backgroundColor, no_match_bgcolor);
}, "Dynamically remove style with Element.removeAttribute");
test(() => {
set_style(t4);
t4.style = "";
assert_equals(getComputedStyle(t4).backgroundColor, no_match_bgcolor);
assert_equals(getComputedStyle(t4).color, match_color);
assert_equals(getComputedStyle(t4).fontSize, match_font_size);
assert_equals(getComputedStyle(sibling).color, match_color);
assert_equals(getComputedStyle(sibling).backgroundColor, no_match_bgcolor);
}, "Dynamically remove style with Element.style");
test(() => {
set_style(t4);
t4.style.textDecoration = "";
assert_equals(getComputedStyle(t4).backgroundColor, no_match_bgcolor);
assert_equals(getComputedStyle(t4).color, match_color);
assert_equals(getComputedStyle(t4).fontSize, match_font_size);
assert_equals(getComputedStyle(sibling).color, match_color);
assert_equals(getComputedStyle(sibling).backgroundColor, no_match_bgcolor);
}, "Dynamically remove style with Element.style.property");
test(() => {
set_style(t4);
t4.style.removeProperty("text-decoration");
assert_equals(getComputedStyle(t4).backgroundColor, no_match_bgcolor);
assert_equals(getComputedStyle(t4).color, match_color);
assert_equals(getComputedStyle(t4).fontSize, match_font_size);
assert_equals(getComputedStyle(sibling).color, match_color);
assert_equals(getComputedStyle(sibling).backgroundColor, no_match_bgcolor);
}, "Dynamically remove style with Element.style.removeProperty");
</script>