blob: 24d8628b6f39a7295f2f824f9b16c2ef667479c2 [file] [log] [blame]
<!doctype html>
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
</head>
<body>
<div lang="en-GB"></div>
<div lang="fr-be"></div>
<div lang="fr"></div>
<script>
description('Verify chained multiple :lang() selectors will not blow up the stack');
function createChainedSelector(lang, n) {
var chained = '';
for (var i = 0; i < n; ++i) {
chained += lang;
}
return chained;
}
function createMultipleArguments(arg, n) {
var args = '';
for (var i = 0; i < n; ++i) {
args += arg + (i == n - 1 ? '' : ', ');
}
return args;
}
debug('');
shouldBe('document.querySelectorAll(":lang(en):lang(gb)").length', '0');
shouldBe('document.querySelectorAll(":lang(en, fr):lang(en, es):lang(en, de)").length', '1');
shouldBe('document.querySelectorAll(":lang(en, fr):lang(en, de):lang(en, es)").length', '1');
shouldBe('document.querySelectorAll(":lang(en, de):lang(en, es):lang(en, fr)").length', '1');
debug('');
shouldBe('document.querySelectorAll(":lang(fr):lang(fr):lang(fr)").length', '2');
shouldBe('document.querySelectorAll(":lang(fr):lang(fr):lang(fr-be)").length', '1');
shouldBe('document.querySelectorAll(":lang(fr):lang(en):lang(fr-be)").length', '0');
debug('');
shouldBe('document.querySelectorAll("' + createChainedSelector(':lang(fr)', 200) + '").length', '2');
shouldBe('document.querySelectorAll("' + createChainedSelector(':lang(fr)' + ':lang(fr-be)' , 200) + '").length', '1');
shouldBe('document.querySelectorAll("' + createChainedSelector(':lang(fr-be)', 200) + '").length', '1');
shouldBe('document.querySelectorAll("' + createChainedSelector(':lang(fr, es)', 200) + '").length', '2');
debug('');
shouldBe('document.querySelectorAll(":lang(' + createMultipleArguments('en-gb', 100) + ')").length', '1');
shouldBe('document.querySelectorAll(":lang(' + createMultipleArguments('en-gb', 200) + ')").length', '1');
shouldBe('document.querySelectorAll("' + createChainedSelector(':lang(' + createMultipleArguments('en-gb', 10) + ')', 200) + '").length', '1');
shouldBe('document.querySelectorAll("' + createChainedSelector(':lang(' + createMultipleArguments('en-gb', 20) + ')', 200) + '").length', '1');
shouldBe('document.querySelectorAll("' + createChainedSelector(':lang(' + createMultipleArguments('en-gb', 30) + ')', 200) + '").length', '1');
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>