blob: 24d8628b6f39a7295f2f824f9b16c2ef667479c2 [file] [log] [blame]
diorahman@rockybars.com5ec97862015-02-12 02:33:54 +00001<!doctype html>
2<html>
3<head>
4<script src="../../resources/js-test-pre.js"></script>
5</head>
6<body>
7 <div lang="en-GB"></div>
8 <div lang="fr-be"></div>
9 <div lang="fr"></div>
10 <script>
11 description('Verify chained multiple :lang() selectors will not blow up the stack');
12 function createChainedSelector(lang, n) {
13 var chained = '';
14 for (var i = 0; i < n; ++i) {
15 chained += lang;
16 }
17 return chained;
18 }
19
20 function createMultipleArguments(arg, n) {
21 var args = '';
22 for (var i = 0; i < n; ++i) {
23 args += arg + (i == n - 1 ? '' : ', ');
24 }
25 return args;
26 }
27
28 debug('');
29
30 shouldBe('document.querySelectorAll(":lang(en):lang(gb)").length', '0');
31 shouldBe('document.querySelectorAll(":lang(en, fr):lang(en, es):lang(en, de)").length', '1');
32 shouldBe('document.querySelectorAll(":lang(en, fr):lang(en, de):lang(en, es)").length', '1');
33 shouldBe('document.querySelectorAll(":lang(en, de):lang(en, es):lang(en, fr)").length', '1');
34
35 debug('');
36 shouldBe('document.querySelectorAll(":lang(fr):lang(fr):lang(fr)").length', '2');
37 shouldBe('document.querySelectorAll(":lang(fr):lang(fr):lang(fr-be)").length', '1');
38 shouldBe('document.querySelectorAll(":lang(fr):lang(en):lang(fr-be)").length', '0');
39
40 debug('');
41
42 shouldBe('document.querySelectorAll("' + createChainedSelector(':lang(fr)', 200) + '").length', '2');
43 shouldBe('document.querySelectorAll("' + createChainedSelector(':lang(fr)' + ':lang(fr-be)' , 200) + '").length', '1');
44 shouldBe('document.querySelectorAll("' + createChainedSelector(':lang(fr-be)', 200) + '").length', '1');
45 shouldBe('document.querySelectorAll("' + createChainedSelector(':lang(fr, es)', 200) + '").length', '2');
46
47 debug('');
48
49 shouldBe('document.querySelectorAll(":lang(' + createMultipleArguments('en-gb', 100) + ')").length', '1');
50 shouldBe('document.querySelectorAll(":lang(' + createMultipleArguments('en-gb', 200) + ')").length', '1');
51 shouldBe('document.querySelectorAll("' + createChainedSelector(':lang(' + createMultipleArguments('en-gb', 10) + ')', 200) + '").length', '1');
52 shouldBe('document.querySelectorAll("' + createChainedSelector(':lang(' + createMultipleArguments('en-gb', 20) + ')', 200) + '").length', '1');
53 shouldBe('document.querySelectorAll("' + createChainedSelector(':lang(' + createMultipleArguments('en-gb', 30) + ')', 200) + '").length', '1');
54 </script>
55 <script src="../../resources/js-test-post.js"></script>
56</body>
57</html>
58