| <html> |
| <head> |
| <style> |
| #valid_normal { |
| font-feature-settings: normal; |
| } |
| |
| #valid_value_1 { |
| font-feature-settings: "dlig" 1; |
| } |
| |
| #valid_value_2 { |
| font-feature-settings: "swsh" 2; |
| } |
| |
| #valid_value_on { |
| font-feature-settings: "smcp" on; |
| } |
| |
| #valid_value_off { |
| font-feature-settings: "liga" off; |
| } |
| |
| #valid_value_omit { |
| font-feature-settings: "c2sc"; |
| } |
| |
| #valid_valuelist { |
| font-feature-settings: "tnum", 'hist'; |
| } |
| |
| #valid_singlequote { |
| font-feature-settings: 'PKRN'; |
| } |
| |
| #valid_unusual_tag { |
| font-feature-settings: "!@#$"; |
| } |
| |
| #valid_tag_space { |
| font-feature-settings: "a bc"; |
| } |
| |
| #valid_composite { |
| font-feature-settings: "dlig" 1, 'smcp' on, 'lig ' off; |
| } |
| |
| #invalid_ident { |
| font-feature-settings: dlig; |
| } |
| |
| #invalid_cases { |
| font-feature-settings: dlig, DLIG, DLig; |
| } |
| |
| #invalid_1 { |
| font-feature-settings: 1; |
| } |
| |
| #invalid_off { |
| font-feature-settings: off; |
| } |
| |
| #invalid_normal_duplicate { |
| font-feature-settings: normal, normal; |
| } |
| |
| #invalid_normal_list { |
| font-feature-settings: normal, aaaa; |
| } |
| |
| #invalid_longer_ident { |
| font-feature-settings: aaaaa; |
| } |
| |
| #invalid_longer_quote { |
| font-feature-settings: "aaaaa"; |
| } |
| |
| #invalid_negative { |
| font-feature-settings: aaaa -1; |
| } |
| |
| #invalid_float { |
| font-feature-settings: aaaa 1.5; |
| } |
| |
| #invalid_missing_comma { |
| font-feature-settings: aaaa "bbbb"; |
| } |
| |
| #invalid_missing_comma_ident { |
| font-feature-settings: aaaa bbbb; |
| } |
| |
| #invalid_comma { |
| font-feature-settings: ,; |
| } |
| |
| #invalid_ending_comma { |
| font-feature-settings: aaaa,; |
| } |
| |
| #invalid_beginning_comma { |
| font-feature-settings: ,aaaa; |
| } |
| |
| #invalid_on { |
| font-feature-settings: aaaa, on; |
| } |
| |
| #invalid_0 { |
| font-feature-settings: "aaaa" 1, "bbbb", 0; |
| } |
| |
| #invalid_composite { |
| font-feature-settings: aaaaa on, dlig on, PKRN -1; |
| } |
| </style> |
| <style> |
| @font-face { |
| font-feature-settings: 'liga'; |
| } |
| |
| @font-face { |
| font-feature-settings: aaaaa; |
| } |
| </style> |
| <script src="../resources/js-test-pre.js"></script> |
| </head> |
| <body> |
| <div id="valid_normal"></div> |
| <div id="valid_value_1"></div> |
| <div id="valid_value_2"></div> |
| <div id="valid_value_on"></div> |
| <div id="valid_value_off"></div> |
| <div id="valid_value_omit"></div> |
| <div id="valid_valuelist"></div> |
| <div id="valid_singlequote"></div> |
| <div id="valid_unusual_tag"></div> |
| <div id="valid_tag_space"></div> |
| <div id="valid_composite"></div> |
| |
| <div id="invalid_ident"></div> |
| <div id="invalid_cases"></div> |
| <div id="invalid_1"></div> |
| <div id="invalid_off"></div> |
| <div id="invalid_normal_duplicate"></div> |
| <div id="invalid_normal_list"></div> |
| <div id="invalid_longer_ident"></div> |
| <div id="invalid_longer_quote"></div> |
| <div id="invalid_negative"></div> |
| <div id="invalid_float"></div> |
| <div id="invalid_missing_comma"></div> |
| <div id="invalid_missing_comma_ident"></div> |
| <div id="invalid_comma"></div> |
| <div id="invalid_ending_comma"></div> |
| <div id="invalid_beginning_comma"></div> |
| <div id="invalid_on"></div> |
| <div id="invalid_0"></div> |
| |
| <div id="outer" style="font-feature-settings: 'dlig';"> |
| <div id="inner"></div> |
| </div> |
| |
| <p id="description"></p> |
| <div id="console"></div> |
| <script> |
| description('Test parsing of the CSS3 font-feature-settings property.'); |
| |
| function canonicalize(fontFeatureSettingsString) { |
| var pieces = fontFeatureSettingsString.split(", "); |
| var lowered = pieces.map(function(piece) { |
| return piece.toLowerCase(); |
| }); |
| var sorted = lowered.sort(); |
| return sorted.join(", "); |
| } |
| |
| function parseResultOf(id) { |
| var element = document.getElementById(id); |
| return window.getComputedStyle(element)['font-feature-settings']; |
| } |
| |
| debug('- Tests valid inputs.'); |
| shouldBeEqualToString('canonicalize(parseResultOf("valid_normal"))', canonicalize("normal")); |
| shouldBeEqualToString('canonicalize(parseResultOf("valid_value_1"))', canonicalize("\"dlig\"")); |
| shouldBeEqualToString('canonicalize(parseResultOf("valid_value_2"))', canonicalize("\"swsh\" 2")); |
| shouldBeEqualToString('canonicalize(parseResultOf("valid_value_on"))', canonicalize("\"smcp\"")); |
| shouldBeEqualToString('canonicalize(parseResultOf("valid_value_off"))', canonicalize("\"liga\" 0")); |
| shouldBeEqualToString('canonicalize(parseResultOf("valid_value_omit"))', canonicalize("\"c2sc\"")); |
| shouldBeEqualToString('canonicalize(parseResultOf("valid_valuelist"))', canonicalize("\"tnum\", \"hist\"")); |
| shouldBeEqualToString('canonicalize(parseResultOf("valid_singlequote"))', canonicalize("\"PKRN\"")); |
| shouldBeEqualToString('canonicalize(parseResultOf("valid_unusual_tag"))', canonicalize("\"!@#$\"")); |
| shouldBeEqualToString('canonicalize(parseResultOf("valid_tag_space"))', canonicalize("\"a bc\"")); |
| shouldBeEqualToString('canonicalize(parseResultOf("valid_composite"))', canonicalize("\"dlig\", \"smcp\", \"lig \" 0")); |
| |
| debug('- Tests invalid inputs. Results should be "normal".'); |
| shouldBe('parseResultOf("invalid_ident")', '"normal"'); |
| shouldBe('parseResultOf("invalid_cases")', '"normal"'); |
| shouldBe('parseResultOf("invalid_1")', '"normal"'); |
| shouldBe('parseResultOf("invalid_off")', '"normal"'); |
| shouldBe('parseResultOf("invalid_normal_duplicate")', '"normal"'); |
| shouldBe('parseResultOf("invalid_normal_list")', '"normal"'); |
| shouldBe('parseResultOf("invalid_longer_ident")', '"normal"'); |
| shouldBe('parseResultOf("invalid_longer_quote")', '"normal"'); |
| shouldBe('parseResultOf("invalid_negative")', '"normal"'); |
| shouldBe('parseResultOf("invalid_float")', '"normal"'); |
| shouldBe('parseResultOf("invalid_missing_comma")', '"normal"'); |
| shouldBe('parseResultOf("invalid_missing_comma_ident")', '"normal"'); |
| shouldBe('parseResultOf("invalid_comma")', '"normal"'); |
| shouldBe('parseResultOf("invalid_ending_comma")', '"normal"'); |
| shouldBe('parseResultOf("invalid_beginning_comma")', '"normal"'); |
| shouldBe('parseResultOf("invalid_on")', '"normal"'); |
| shouldBe('parseResultOf("invalid_0")', '"normal"'); |
| |
| debug('- Tests inherit.'); |
| shouldBeEqualToString('canonicalize(parseResultOf("outer"))', canonicalize("\"dlig\"")); |
| shouldBeEqualToString('canonicalize(parseResultOf("inner"))', canonicalize("\"dlig\"")); |
| |
| debug('- Tests @font-face.'); |
| var fontFaceRuleValid = document.styleSheets[1].cssRules[0].style['font-feature-settings']; |
| var fontFaceRuleInvalid = document.styleSheets[1].cssRules[1].style['font-feature-settings']; |
| shouldBeEqualToString('canonicalize(fontFaceRuleValid)', canonicalize("\"liga\"")); |
| shouldBeEqualToString('fontFaceRuleInvalid', ""); |
| |
| </script> |
| <script src="../resources/js-test-post.js"></script> |
| </body> |
| </html> |