at-custom-media-cssom.html (5109B)
1 <!DOCTYPE html> 2 <title>CSS Custom Media Queries: CSSOM</title> 3 <link rel="help" href=https://drafts.csswg.org/mediaqueries-5/#custom-mq-cssom/> 4 <script src="/resources/testharness.js"></script> 5 <script src="/resources/testharnessreport.js"></script> 6 7 <script> 8 9 test(t => { 10 let sheet = new CSSStyleSheet(); 11 sheet.replaceSync(` 12 @custom-media --true true 13 `); 14 assert_equals(sheet.cssRules.length, 1); 15 let customMediaRule = sheet.cssRules[0]; 16 assert_true(customMediaRule instanceof CSSCustomMediaRule); 17 assert_equals(customMediaRule.name, '--true'); 18 assert_equals(customMediaRule.query, true); 19 }, 'CSSCustomMediaRule true'); 20 21 test(t => { 22 let sheet = new CSSStyleSheet(); 23 sheet.replaceSync(` 24 @custom-media --false false 25 `); 26 assert_equals(sheet.cssRules.length, 1); 27 let customMediaRule = sheet.cssRules[0]; 28 assert_true(customMediaRule instanceof CSSCustomMediaRule); 29 assert_equals(customMediaRule.name, '--false'); 30 assert_equals(customMediaRule.query, false); 31 }, 'CSSCustomMediaRule false'); 32 33 test(t => { 34 let sheet = new CSSStyleSheet(); 35 sheet.replaceSync(` 36 @custom-media --empty 37 `); 38 assert_equals(sheet.cssRules.length, 1); 39 let customMediaRule = sheet.cssRules[0]; 40 assert_true(customMediaRule instanceof CSSCustomMediaRule); 41 assert_equals(customMediaRule.name, '--empty'); 42 assert_not_equals(typeof customMediaRule.query, "boolean"); 43 assert_equals(customMediaRule.query.length, 0); 44 }, 'CSSCustomMediaRule empty'); 45 46 test(t => { 47 let sheet = new CSSStyleSheet(); 48 sheet.replaceSync(` 49 @custom-media --query (color) and (--query) 50 `); 51 assert_equals(sheet.cssRules.length, 1); 52 let customMediaRule = sheet.cssRules[0]; 53 assert_true(customMediaRule instanceof CSSCustomMediaRule); 54 assert_equals(customMediaRule.name, '--query'); 55 assert_equals(customMediaRule.query.length, 1); 56 assert_equals(customMediaRule.query.mediaText, '(color) and (--query)'); 57 }, 'CSSCustomMediaRule cycle'); 58 59 test(t => { 60 let sheet = new CSSStyleSheet(); 61 sheet.replaceSync(` 62 @custom-media --query (hover) and (width > 1024px) 63 `); 64 assert_equals(sheet.cssRules.length, 1); 65 let customMediaRule = sheet.cssRules[0]; 66 assert_true(customMediaRule instanceof CSSCustomMediaRule); 67 assert_equals(customMediaRule.name, '--query'); 68 assert_equals(customMediaRule.query.length, 1); 69 assert_equals(customMediaRule.query.mediaText, '(hover) and (width > 1024px)'); 70 }, 'CSSCustomMediaRule simple'); 71 72 test(t => { 73 let sheet = new CSSStyleSheet(); 74 sheet.replaceSync(` 75 @custom-media --query (color), (hover) 76 `); 77 assert_equals(sheet.cssRules.length, 1); 78 let customMediaRule = sheet.cssRules[0]; 79 assert_true(customMediaRule instanceof CSSCustomMediaRule); 80 assert_equals(customMediaRule.name, '--query'); 81 assert_equals(customMediaRule.query.length, 2); 82 assert_equals(customMediaRule.query.mediaText, '(color), (hover)'); 83 }, 'CSSCustomMediaRule multiple media queries'); 84 85 test(t => { 86 let sheet = new CSSStyleSheet(); 87 sheet.replaceSync(` 88 @custom-media --true (color), (hover) 89 `); 90 assert_equals(sheet.cssRules.length, 1); 91 let customMediaRule = sheet.cssRules[0]; 92 assert_true(customMediaRule instanceof CSSCustomMediaRule); 93 assert_equals(customMediaRule.query.length, 2); 94 assert_equals(customMediaRule.query.mediaText, '(color), (hover)'); 95 customMediaRule.query.mediaText = '(min-width: 100px)'; 96 assert_equals(customMediaRule.query.length, 1); 97 assert_equals(customMediaRule.query.mediaText, '(min-width: 100px)'); 98 }, 'CSSCustomMediaRule change mediaText'); 99 100 test(t => { 101 let sheet = new CSSStyleSheet(); 102 sheet.replaceSync(` 103 @custom-media --true (color) 104 `); 105 assert_equals(sheet.cssRules.length, 1); 106 let customMediaRule = sheet.cssRules[0]; 107 assert_true(customMediaRule instanceof CSSCustomMediaRule); 108 assert_equals(customMediaRule.query.length, 1); 109 assert_equals(customMediaRule.query.mediaText, '(color)'); 110 customMediaRule.query.appendMedium('(hover)'); 111 assert_equals(customMediaRule.query.length, 2); 112 assert_equals(customMediaRule.query.mediaText, '(color), (hover)'); 113 }, 'CSSCustomMediaRule appendMedium'); 114 115 test(t => { 116 let sheet = new CSSStyleSheet(); 117 sheet.replaceSync(` 118 @custom-media --true (color), (hover) 119 `); 120 assert_equals(sheet.cssRules.length, 1); 121 let customMediaRule = sheet.cssRules[0]; 122 assert_true(customMediaRule instanceof CSSCustomMediaRule); 123 assert_equals(customMediaRule.query.length, 2); 124 assert_equals(customMediaRule.query.mediaText, '(color), (hover)'); 125 customMediaRule.query.deleteMedium('(hover)'); 126 assert_equals(customMediaRule.query.length, 1); 127 assert_equals(customMediaRule.query.mediaText, '(color)'); 128 }, 'CSSCustomMediaRule deleteMedium'); 129 130 test(t => { 131 let sheet = new CSSStyleSheet(); 132 sheet.replaceSync(` 133 @custom-media --true (color) 134 `); 135 assert_equals(sheet.cssRules.length, 1); 136 let customMediaRule = sheet.cssRules[0]; 137 assert_true(customMediaRule instanceof CSSCustomMediaRule); 138 assert_equals(customMediaRule.query.item(0), '(color)'); 139 assert_equals(customMediaRule.query.item(1), null); 140 }, 'CSSCustomMediaRule item'); 141 142 </script>