parse-anplusb.html (4054B)
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title>CSS Selectors: Test parsing of an+b selectors</title> 5 <link rel="author" title="Chris Nardi" href="mailto:cnardi@chromium.org"> 6 <link rel="help" href="https://drafts.csswg.org/selectors-3/#nth-child-pseudo"> 7 <link rel="help" href="https://drafts.csswg.org/selectors-3/#nth-last-child-pseudo"> 8 <link rel="help" href="https://drafts.csswg.org/selectors-3/#nth-of-type-pseudo"> 9 <link rel="help" href="https://drafts.csswg.org/selectors-3/#nth-last-of-type-pseudo"> 10 <meta charset="utf-8"> 11 <script src="/resources/testharness.js"></script> 12 <script src="/resources/testharnessreport.js"></script> 13 <style id="teststyles"> 14 </style> 15 </head> 16 <body> 17 <script> 18 function add_selector_style(source) { 19 var style_element = document.getElementById("teststyles"); 20 style_element.firstChild.data = source + "{ font-size: 1em; }"; 21 return style_element.sheet; 22 } 23 24 function assert_selector_serializes_to(source, expected_result) { 25 test(function() { 26 var sheet = add_selector_style(source); 27 assert_equals(sheet.cssRules[0].selectorText, expected_result); 28 }, source + " should be parsed and serialized correctly"); 29 } 30 31 function assert_invalid_selector(source) { 32 test(function() { 33 var sheet = add_selector_style(source); 34 assert_equals(sheet.cssRules[0], undefined); 35 }, source + " should not parse"); 36 } 37 38 function run_tests_on_anplusb_selector(source) { 39 assert_selector_serializes_to(source + '(1n+0)', source + '(n)'); 40 assert_selector_serializes_to(source + '(n+0)', source + '(n)'); 41 assert_selector_serializes_to(source + '(n)', source + '(n)'); 42 assert_selector_serializes_to(source + '(-n+0)', source + '(-n)'); 43 assert_selector_serializes_to(source + '(-n)', source + '(-n)'); 44 assert_selector_serializes_to(source + '(N)', source + '(n)'); 45 assert_selector_serializes_to(source + '(+n+3)', source + '(n+3)'); 46 assert_selector_serializes_to(source + '( +n + 7 )', source + '(n+7)'); 47 assert_selector_serializes_to(source + '( N- 123)', source + '(n-123)'); 48 assert_selector_serializes_to(source + '(n- 10)', source + '(n-10)'); 49 assert_selector_serializes_to(source + '(-n\n- 1)', source + '(-n-1)'); 50 assert_selector_serializes_to(source + '( 23n\n\n+\n\n123 )', source + '(23n+123)'); 51 52 assert_invalid_selector(source + '(n- 1 2)'); 53 assert_invalid_selector(source + '(n-b1)'); 54 assert_invalid_selector(source + '(n-+1)'); 55 assert_invalid_selector(source + '(n-1n)'); 56 assert_invalid_selector(source + '(-n -b1)'); 57 assert_invalid_selector(source + '(-1n- b1)'); 58 assert_invalid_selector(source + '(-n-13b1)'); 59 assert_invalid_selector(source + '(-n-+1)'); 60 assert_invalid_selector(source + '(-n+n)'); 61 assert_invalid_selector(source + '(+ 1n)'); 62 assert_invalid_selector(source + '( n +12 3)'); 63 assert_invalid_selector(source + '( 12 n )'); 64 assert_invalid_selector(source + '(+12n-0+1)'); 65 assert_invalid_selector(source + '(+12N -- 1)'); 66 assert_invalid_selector(source + '(+12 N )'); 67 assert_invalid_selector(source + '(+ n + 7)'); 68 } 69 70 run_tests_on_anplusb_selector(':nth-child'); 71 run_tests_on_anplusb_selector(':nth-last-child'); 72 run_tests_on_anplusb_selector(':nth-of-type'); 73 run_tests_on_anplusb_selector(':nth-last-of-type'); 74 </script> 75 </body> 76 </html>