| <!doctype html> | |
| <html> | |
| <head> | |
| <meta charset="utf-8"> | |
| <title>CSSOM - Serialization of CSSMediaRule</title> | |
| <link rel="help" href="https://drafts.csswg.org/cssom/#serialize-a-css-rule"> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| </head> | |
| <body> | |
| <script> | |
| function makeSheet(t) { | |
| var style = document.createElement('style'); | |
| document.body.appendChild(style); | |
| t.add_cleanup(function() { | |
| document.body.removeChild(style); | |
| }); | |
| return style.sheet; | |
| } | |
| test(function(t) { | |
| var sheet = makeSheet(t); | |
| sheet.insertRule('@media {}', 0); | |
| assert_equals(sheet.cssRules.length, 1); | |
| assert_equals(sheet.cssRules[0].cssText, '@media {\n}'); | |
| }, 'empty media query list'); | |
| test(function(t) { | |
| var sheet = makeSheet(t); | |
| sheet.insertRule('@media all {}'); | |
| sheet.insertRule('@media print {}'); | |
| sheet.insertRule('@media screen {}'); | |
| sheet.insertRule('@media speech {}'); | |
| assert_equals(sheet.cssRules.length, 4); | |
| assert_equals(sheet.cssRules[0].cssText, '@media speech {\n}'); | |
| assert_equals(sheet.cssRules[1].cssText, '@media screen {\n}'); | |
| assert_equals(sheet.cssRules[2].cssText, '@media print {\n}'); | |
| assert_equals(sheet.cssRules[3].cssText, '@media all {\n}'); | |
| }, 'type - no features'); | |
| test(function(t) { | |
| var sheet = makeSheet(t); | |
| sheet.insertRule('@media not all {}'); | |
| sheet.insertRule('@media not print {}'); | |
| sheet.insertRule('@media not screen {}'); | |
| sheet.insertRule('@media not speech {}'); | |
| assert_equals(sheet.cssRules.length, 4); | |
| assert_equals(sheet.cssRules[0].cssText, '@media not speech {\n}'); | |
| assert_equals(sheet.cssRules[1].cssText, '@media not screen {\n}'); | |
| assert_equals(sheet.cssRules[2].cssText, '@media not print {\n}'); | |
| assert_equals(sheet.cssRules[3].cssText, '@media not all {\n}'); | |
| }, 'type - no features - negation'); | |
| test(function(t) { | |
| var sheet = makeSheet(t); | |
| sheet.insertRule('@media aLL {}'); | |
| sheet.insertRule('@media pRiNt {}'); | |
| sheet.insertRule('@media screEN {}'); | |
| sheet.insertRule('@media spEech {}'); | |
| assert_equals(sheet.cssRules.length, 4); | |
| assert_equals(sheet.cssRules[0].cssText, '@media speech {\n}'); | |
| assert_equals(sheet.cssRules[1].cssText, '@media screen {\n}'); | |
| assert_equals(sheet.cssRules[2].cssText, '@media print {\n}'); | |
| assert_equals(sheet.cssRules[3].cssText, '@media all {\n}'); | |
| }, 'type - no features - character case normalization'); | |
| test(function(t) { | |
| var sheet = makeSheet(t); | |
| sheet.insertRule('@media all and (color) {}'); | |
| assert_equals(sheet.cssRules.length, 1); | |
| assert_equals(sheet.cssRules[0].cssText, '@media (color) {\n}'); | |
| }, 'type - omission of all'); | |
| test(function(t) { | |
| var sheet = makeSheet(t); | |
| sheet.insertRule('@media not all and (color) {}'); | |
| assert_equals(sheet.cssRules.length, 1); | |
| assert_equals(sheet.cssRules[0].cssText, '@media not all and (color) {\n}'); | |
| }, 'type - inclusion of negated all'); | |
| test(function(t) { | |
| var sheet = makeSheet(t); | |
| sheet.insertRule('@media screen and (Color) {}'); | |
| sheet.insertRule('@media screen and (cOLor) {}'); | |
| assert_equals(sheet.cssRules.length, 2); | |
| assert_equals(sheet.cssRules[0].cssText, '@media screen and (color) {\n}'); | |
| assert_equals(sheet.cssRules[1].cssText, '@media screen and (color) {\n}'); | |
| }, 'features - character case normalization'); | |
| /** | |
| * The following test is disabled pending clarification of the intended | |
| * behavior: https://github.com/w3c/csswg-drafts/issues/533 | |
| */ | |
| //test(function(t) { | |
| // var sheet = makeSheet(t); | |
| // sheet.insertRule('@media screen and (color) and (color) {}'); | |
| // | |
| // assert_equals(sheet.cssRules.length, 1); | |
| // assert_equals( | |
| // sheet.cssRules[0].cssText, | |
| // '@media screen and (color) {\n}' | |
| // ); | |
| //}, 'features - de-duplication'); | |
| test(function(t) { | |
| var sheet = makeSheet(t); | |
| sheet.insertRule('@media print and (max-width: 23px) and (max-width: 45px) {}'); | |
| assert_equals(sheet.cssRules.length, 1); | |
| assert_equals( | |
| sheet.cssRules[0].cssText, | |
| '@media print and (max-width: 23px) and (max-width: 45px) {\n}' | |
| ); | |
| }, 'features - preservation of overspecified features'); | |
| test(function(t) { | |
| var sheet = makeSheet(t); | |
| sheet.insertRule('@media screen and (max-width: 0px) and (color) {}'); | |
| sheet.insertRule('@media screen and (color) and (max-width: 0px) {}'); | |
| assert_equals(sheet.cssRules.length, 2); | |
| assert_equals( | |
| sheet.cssRules[0].cssText, | |
| '@media screen and (color) and (max-width: 0px) {\n}' | |
| ); | |
| assert_equals( | |
| sheet.cssRules[1].cssText, | |
| '@media screen and (max-width: 0px) and (color) {\n}' | |
| ); | |
| }, 'features - no lexicographical sorting'); | |
| test(function(t) { | |
| var sheet = makeSheet(t); | |
| sheet.insertRule('@media screen and (max-width: 0px), screen and (color) {}'); | |
| assert_equals(sheet.cssRules.length, 1); | |
| assert_equals( | |
| sheet.cssRules[0].cssText, | |
| '@media screen and (max-width: 0px), screen and (color) {\n}' | |
| ); | |
| }, 'media query list'); | |
| test(function(t) { | |
| var sheet = makeSheet(t); | |
| sheet.insertRule('@media print {}'); | |
| assert_equals(sheet.cssRules.length, 1); | |
| sheet.cssRules[0].insertRule('#foo { z-index: 23; float: left; }', 0); | |
| assert_equals( | |
| sheet.cssRules[0].cssText, | |
| [ | |
| '@media print {', | |
| ' #foo { z-index: 23; float: left; }', | |
| '}' | |
| ].join('\n') | |
| ); | |
| }, 'one rule'); | |
| test(function(t) { | |
| var sheet = makeSheet(t); | |
| sheet.insertRule('@media print {}'); | |
| assert_equals(sheet.cssRules.length, 1); | |
| sheet.cssRules[0].insertRule('#foo { z-index: 23; float: left; }', 0); | |
| sheet.cssRules[0].insertRule('#bar { float: none; z-index: 45; }', 0); | |
| assert_equals( | |
| sheet.cssRules[0].cssText, | |
| [ | |
| '@media print {', | |
| ' #bar { float: none; z-index: 45; }', | |
| ' #foo { z-index: 23; float: left; }', | |
| '}' | |
| ].join('\n') | |
| ); | |
| }, 'many rules'); | |
| </script> | |
| </body> | |
| </html> |