| <!DOCTYPE html> |
| <html> |
| <head> |
| <title>CSS Selectors: Test parsing of an+b selectors</title> |
| <link rel="author" title="Chris Nardi" href="mailto:cnardi@chromium.org"> |
| <link rel="help" href="https://drafts.csswg.org/selectors-3/#nth-child-pseudo"> |
| <link rel="help" href="https://drafts.csswg.org/selectors-3/#nth-last-child-pseudo"> |
| <link rel="help" href="https://drafts.csswg.org/selectors-3/#nth-of-type-pseudo"> |
| <link rel="help" href="https://drafts.csswg.org/selectors-3/#nth-last-of-type-pseudo"> |
| <meta charset="utf-8"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <style id="teststyles"> |
| </style> |
| </head> |
| <body> |
| <script> |
| function add_selector_style(source) { |
| var style_element = document.getElementById("teststyles"); |
| style_element.firstChild.data = source + "{ font-size: 1em; }"; |
| return style_element.sheet; |
| } |
| |
| function assert_selector_serializes_to(source, expected_result) { |
| test(function() { |
| var sheet = add_selector_style(source); |
| assert_equals(sheet.cssRules[0].selectorText, expected_result); |
| }, source + " should be parsed and serialized correctly"); |
| } |
| |
| function assert_invalid_selector(source) { |
| test(function() { |
| var sheet = add_selector_style(source); |
| assert_equals(sheet.cssRules[0], undefined); |
| }, source + " should not parse"); |
| } |
| |
| function run_tests_on_anplusb_selector(source) { |
| assert_selector_serializes_to(source + '(1n+0)', source + '(n)'); |
| assert_selector_serializes_to(source + '(n+0)', source + '(n)'); |
| assert_selector_serializes_to(source + '(n)', source + '(n)'); |
| assert_selector_serializes_to(source + '(-n+0)', source + '(-n)'); |
| assert_selector_serializes_to(source + '(-n)', source + '(-n)'); |
| assert_selector_serializes_to(source + '(N)', source + '(n)'); |
| assert_selector_serializes_to(source + '(+n+3)', source + '(n+3)'); |
| assert_selector_serializes_to(source + '( +n + 7 )', source + '(n+7)'); |
| assert_selector_serializes_to(source + '( N- 123)', source + '(n-123)'); |
| assert_selector_serializes_to(source + '(n- 10)', source + '(n-10)'); |
| assert_selector_serializes_to(source + '(-n\n- 1)', source + '(-n-1)'); |
| assert_selector_serializes_to(source + '( 23n\n\n+\n\n123 )', source + '(23n+123)'); |
| |
| assert_invalid_selector(source + '(n- 1 2)'); |
| assert_invalid_selector(source + '(n-b1)'); |
| assert_invalid_selector(source + '(n-+1)'); |
| assert_invalid_selector(source + '(n-1n)'); |
| assert_invalid_selector(source + '(-n -b1)'); |
| assert_invalid_selector(source + '(-1n- b1)'); |
| assert_invalid_selector(source + '(-n-13b1)'); |
| assert_invalid_selector(source + '(-n-+1)'); |
| assert_invalid_selector(source + '(-n+n)'); |
| assert_invalid_selector(source + '(+ 1n)'); |
| assert_invalid_selector(source + '( n +12 3)'); |
| assert_invalid_selector(source + '( 12 n )'); |
| assert_invalid_selector(source + '(+12n-0+1)'); |
| assert_invalid_selector(source + '(+12N -- 1)'); |
| assert_invalid_selector(source + '(+12 N )'); |
| assert_invalid_selector(source + '(+ n + 7)'); |
| } |
| |
| run_tests_on_anplusb_selector(':nth-child'); |
| run_tests_on_anplusb_selector(':nth-last-child'); |
| run_tests_on_anplusb_selector(':nth-of-type'); |
| run_tests_on_anplusb_selector(':nth-last-of-type'); |
| </script> |
| </body> |
| </html> |