Verify selector specifying multiple :lang() pseudo class.

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


HTML lang only
PASS document.querySelectorAll(":lang(fr):lang(fr-be):lang(fr) #target1").length is 1
PASS getComputedStyle(document.getElementById("target1")).color is "rgb(1, 2, 3)"
PASS document.querySelectorAll(":lang(fr):lang(fr-ca) #target2").length is 1
PASS getComputedStyle(document.getElementById("target2")).color is "rgb(4, 5, 6)"
PASS document.querySelectorAll(":lang(fr):lang(fr-ch) #target3").length is 1
PASS getComputedStyle(document.getElementById("target3")).color is "rgb(7, 8, 9)"
XML lang only
PASS document.querySelectorAll(":lang(es):lang(es-ar):lang(es) #target4").length is 1
PASS getComputedStyle(document.getElementById("target4")).color is "rgb(10, 11, 12)"
PASS document.querySelectorAll(":lang(es):lang(es-co) #target5").length is 1
PASS getComputedStyle(document.getElementById("target5")).color is "rgb(13, 14, 15)"
PASS document.querySelectorAll(":lang(es):lang(es-mx) #target6").length is 1
PASS getComputedStyle(document.getElementById("target6")).color is "rgb(16, 17, 18)"
XML and HTML lang
PASS document.querySelectorAll(":lang(xml):lang(xml-lang1):lang(xml) #target7").length is 1
PASS getComputedStyle(document.getElementById("target7")).color is "rgb(19, 20, 21)"
PASS document.querySelectorAll(":lang(xml):lang(xml-lang2) #target8").length is 1
PASS getComputedStyle(document.getElementById("target8")).color is "rgb(22, 23, 24)"
PASS document.querySelectorAll(":lang(xml):lang(xml-lang3) #target9").length is 1
PASS getComputedStyle(document.getElementById("target9")).color is "rgb(25, 26, 27)"
PASS successfullyParsed is true

TEST COMPLETE

