The backtracking child combinator without tail cases

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


Backtracking immediately with the current element, tag name matching failed. Restart with the current element
PASS getComputedStyle(document.getElementById("target1")).backgroundColor is "rgb(1, 2, 3)"
Backtracking immediately with the current element, others matching failed. Restart with the parent of the current element.(with parent check)
PASS getComputedStyle(document.getElementById("target2")).backgroundColor is "rgb(4, 5, 6)"
Backtracking immediately with the current element. Restart with the current element.
PASS getComputedStyle(document.getElementById("target3")).backgroundColor is "rgb(4, 5, 6)"
Backtracking immediately with the current element. Restart with the current element.
PASS getComputedStyle(document.getElementById("target4")).backgroundColor is "rgb(7, 8, 9)"
Backtracking immediately with the current element. Restart with the parent of the current element.
PASS getComputedStyle(document.getElementById("target5")).backgroundColor is "rgb(10, 11, 12)"
Backtracking immediately with the current element (selector doesn't has tag name). Restart with the current element.
PASS getComputedStyle(document.getElementById("target6")).backgroundColor is "rgb(13, 14, 15)"
Backtracking immediately with the current element (there's no tail). Restart with the current element.
PASS getComputedStyle(document.getElementById("target7")).backgroundColor is "rgb(16, 17, 18)"
PASS successfullyParsed is true

TEST COMPLETE

