Test that the properties that use the CSS Value "currentcolor" to define the color are updated correctly when the inherited color changes.

On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".



Initial state.
PASS getComputedStyle(document.querySelectorAll(".test-case target")[0]).borderColor is "rgb(4, 5, 6)"
PASS getComputedStyle(document.querySelectorAll(".test-case target")[0]).backgroundColor is "rgb(4, 5, 6)"
PASS getComputedStyle(document.querySelectorAll(".test-case target")[1]).borderColor is "rgb(4, 5, 6)"
PASS getComputedStyle(document.querySelectorAll(".test-case target")[1]).backgroundColor is "rgb(4, 5, 6)"
PASS getComputedStyle(document.querySelectorAll(".test-case target")[2]).borderColor is "rgb(4, 5, 6)"
PASS getComputedStyle(document.querySelectorAll(".test-case target")[2]).backgroundColor is "rgb(4, 5, 6)"
PASS getComputedStyle(document.querySelectorAll(".test-case target")[3]).borderColor is "rgb(4, 5, 6)"
PASS getComputedStyle(document.querySelectorAll(".test-case target")[3]).backgroundColor is "rgb(4, 5, 6)"

Let's override the style of the wrapper through their style object.
PASS getComputedStyle(document.querySelectorAll(".test-case target")[0]).borderColor is "rgb(7, 8, 9)"
PASS getComputedStyle(document.querySelectorAll(".test-case target")[0]).backgroundColor is "rgb(7, 8, 9)"
PASS getComputedStyle(document.querySelectorAll(".test-case target")[1]).borderColor is "rgb(7, 8, 9)"
PASS getComputedStyle(document.querySelectorAll(".test-case target")[1]).backgroundColor is "rgb(7, 8, 9)"
PASS getComputedStyle(document.querySelectorAll(".test-case target")[2]).borderColor is "rgb(7, 8, 9)"
PASS getComputedStyle(document.querySelectorAll(".test-case target")[2]).backgroundColor is "rgb(7, 8, 9)"
PASS getComputedStyle(document.querySelectorAll(".test-case target")[3]).borderColor is "rgb(7, 8, 9)"
PASS getComputedStyle(document.querySelectorAll(".test-case target")[3]).backgroundColor is "rgb(7, 8, 9)"

Let's remove the style attribute on the wrapper.
PASS getComputedStyle(document.querySelectorAll(".test-case target")[0]).borderColor is "rgb(4, 5, 6)"
PASS getComputedStyle(document.querySelectorAll(".test-case target")[0]).backgroundColor is "rgb(4, 5, 6)"
PASS getComputedStyle(document.querySelectorAll(".test-case target")[1]).borderColor is "rgb(4, 5, 6)"
PASS getComputedStyle(document.querySelectorAll(".test-case target")[1]).backgroundColor is "rgb(4, 5, 6)"
PASS getComputedStyle(document.querySelectorAll(".test-case target")[2]).borderColor is "rgb(4, 5, 6)"
PASS getComputedStyle(document.querySelectorAll(".test-case target")[2]).backgroundColor is "rgb(4, 5, 6)"
PASS getComputedStyle(document.querySelectorAll(".test-case target")[3]).borderColor is "rgb(4, 5, 6)"
PASS getComputedStyle(document.querySelectorAll(".test-case target")[3]).backgroundColor is "rgb(4, 5, 6)"

Let's remove class on the wrappers.
PASS getComputedStyle(document.querySelectorAll(".test-case target")[0]).borderColor is "rgb(1, 2, 3)"
PASS getComputedStyle(document.querySelectorAll(".test-case target")[0]).backgroundColor is "rgb(1, 2, 3)"
PASS getComputedStyle(document.querySelectorAll(".test-case target")[1]).borderColor is "rgb(1, 2, 3)"
PASS getComputedStyle(document.querySelectorAll(".test-case target")[1]).backgroundColor is "rgb(1, 2, 3)"
PASS getComputedStyle(document.querySelectorAll(".test-case target")[2]).borderColor is "rgb(1, 2, 3)"
PASS getComputedStyle(document.querySelectorAll(".test-case target")[2]).backgroundColor is "rgb(1, 2, 3)"
PASS getComputedStyle(document.querySelectorAll(".test-case target")[3]).borderColor is "rgb(1, 2, 3)"
PASS getComputedStyle(document.querySelectorAll(".test-case target")[3]).backgroundColor is "rgb(1, 2, 3)"

Then add it back.
PASS getComputedStyle(document.querySelectorAll(".test-case target")[0]).borderColor is "rgb(4, 5, 6)"
PASS getComputedStyle(document.querySelectorAll(".test-case target")[0]).backgroundColor is "rgb(4, 5, 6)"
PASS getComputedStyle(document.querySelectorAll(".test-case target")[1]).borderColor is "rgb(4, 5, 6)"
PASS getComputedStyle(document.querySelectorAll(".test-case target")[1]).backgroundColor is "rgb(4, 5, 6)"
PASS getComputedStyle(document.querySelectorAll(".test-case target")[2]).borderColor is "rgb(4, 5, 6)"
PASS getComputedStyle(document.querySelectorAll(".test-case target")[2]).backgroundColor is "rgb(4, 5, 6)"
PASS getComputedStyle(document.querySelectorAll(".test-case target")[3]).borderColor is "rgb(4, 5, 6)"
PASS getComputedStyle(document.querySelectorAll(".test-case target")[3]).backgroundColor is "rgb(4, 5, 6)"
PASS successfullyParsed is true

TEST COMPLETE

