| <html> |
| <head id="head"> |
| <script src="../../resources/js-test-pre.js"></script> |
| </head> |
| <body> |
| <script> |
| |
| description("This tests parsing and re-serialization of :lang CSS selector with string arguments"); |
| |
| function parseThenSerializeRule(rule) |
| { |
| var styleElement = document.getElementById("style"); |
| var head = document.getElementById("head"); |
| if (styleElement) |
| head.removeChild(styleElement); |
| |
| styleElement = document.createElement("style"); |
| styleElement.id = "style"; |
| var head = document.getElementById("head"); |
| head.appendChild(styleElement); |
| |
| styleElement.appendChild(document.createTextNode(rule)); |
| return styleElement.sheet.cssRules[0].cssText; |
| } |
| |
| function expectedSerializedSelector(selector) |
| { |
| var args = /\(([^)]+)/.exec(selector); |
| if (!args[1]) |
| return; |
| |
| args = args[1].split(/\s*,\s*/); |
| var expected = ':lang('; |
| for (var i = 0; i < args.length; ++i) { |
| var arg = args[i]; |
| var hasQuotes = arg.indexOf('"') == 0 && arg.lastIndexOf('"') == arg.length - 1; |
| if (!hasQuotes) |
| expected += '"'; |
| expected += args[i]; |
| if (!hasQuotes) |
| expected += '"'; |
| if (i < args.length - 1) |
| expected += ', '; |
| } |
| expected += ')'; |
| return expected; |
| } |
| |
| function testSelectorRoundTrip(selector) |
| { |
| shouldBe("parseThenSerializeRule('" + selector + " { }')", "'" + expectedSerializedSelector(selector) + " { }'"); |
| } |
| |
| testSelectorRoundTrip(':lang("a")'); |
| testSelectorRoundTrip(':lang("bb", cc)'); |
| testSelectorRoundTrip(':lang("ddd", eee)'); |
| testSelectorRoundTrip(':lang("ddd", eee, ffff)'); |
| testSelectorRoundTrip(':lang("ddd", eee, "ffff")'); |
| testSelectorRoundTrip(':lang("*-1997")'); |
| testSelectorRoundTrip(':lang("*-1997", "*-1998")'); |
| testSelectorRoundTrip(':lang("*-1997", "*-1998", "*-1999")'); |
| testSelectorRoundTrip(':lang("")'); |
| |
| debug(''); |
| |
| shouldBe("parseThenSerializeRule(':lang(foo, \"bar\", baz) { }')", "':lang(\"foo\", \"bar\", \"baz\") { }'"); |
| shouldBe("parseThenSerializeRule(':lang(foo, \"bar\" , baz) { }')", "':lang(\"foo\", \"bar\", \"baz\") { }'"); |
| shouldBe("parseThenSerializeRule(':lang( foo , \"bar\" , baz ) { }')", "':lang(\"foo\", \"bar\", \"baz\") { }'"); |
| </script> |
| <script src="../../resources/js-test-post.js"></script> |
| </body> |
| </html> |