| (async function(testRunner) { |
| const {page, session, dp} = await testRunner.startBlank( |
| 'Tests that CSS media features can be overridden.'); |
| |
| await session.navigate('../resources/css-media-features.html'); |
| |
| async function setEmulatedMediaFeature(feature, value) { |
| await dp.Emulation.setEmulatedMedia({ |
| features: [ |
| { |
| name: feature, |
| value: value, |
| }, |
| ], |
| }); |
| const mediaQuery = `(${feature}: ${value})`; |
| const code = `matchMedia(${JSON.stringify(mediaQuery)}).matches`; |
| const result = await session.evaluate(code); |
| testRunner.log(`${code}: ${result}`); |
| const width = await session.evaluate('getComputedStyle(p).width'); |
| const height = await session.evaluate('getComputedStyle(p).height'); |
| testRunner.log(`${code} applied: ${width} x ${height}`); |
| } |
| |
| async function setEmulatedMediaFeatures({ features, mediaQuery }) { |
| await dp.Emulation.setEmulatedMedia({ |
| features, |
| }); |
| const code = `matchMedia(${JSON.stringify(mediaQuery)}).matches`; |
| const result = await session.evaluate(code); |
| testRunner.log(`${code}: ${result}`); |
| const width = await session.evaluate('getComputedStyle(p).width'); |
| const height = await session.evaluate('getComputedStyle(p).height'); |
| testRunner.log(`${code} applied: ${width} x ${height}`); |
| } |
| |
| // Test `prefers-color-scheme`. |
| // https://drafts.csswg.org/mediaqueries-5/#prefers-color-scheme |
| await setEmulatedMediaFeature('prefers-color-scheme', '__invalid__'); |
| await setEmulatedMediaFeature('prefers-color-scheme', 'no-preference'); |
| await setEmulatedMediaFeature('prefers-color-scheme', 'light'); |
| await setEmulatedMediaFeature('prefers-color-scheme', 'dark'); |
| await setEmulatedMediaFeature('prefers-color-scheme', '__invalid__'); |
| |
| // Test `prefers-reduced-motion`. |
| // https://drafts.csswg.org/mediaqueries-5/#prefers-reduced-motion |
| await setEmulatedMediaFeature('prefers-reduced-motion', '__invalid__'); |
| await setEmulatedMediaFeature('prefers-reduced-motion', 'no-preference'); |
| await setEmulatedMediaFeature('prefers-reduced-motion', 'reduce'); |
| await setEmulatedMediaFeature('prefers-reduced-motion', '__invalid__'); |
| |
| // Test `color-gamut`. |
| // https://drafts.csswg.org/mediaqueries-5/#color-gamut |
| await setEmulatedMediaFeature('color-gamut', '__invalid__'); |
| await setEmulatedMediaFeature('color-gamut', 'p3'); |
| await setEmulatedMediaFeature('color-gamut', 'rec2020'); |
| await setEmulatedMediaFeature('color-gamut', '__invalid__'); |
| |
| // Test combinations. |
| await setEmulatedMediaFeatures({ |
| features: [ |
| { name: 'prefers-color-scheme', value: 'dark' }, |
| { name: 'prefers-reduced-motion', value: 'reduce' }, |
| ], |
| mediaQuery: '(prefers-color-scheme: dark) and (prefers-reduced-motion: reduce)', |
| }); |
| await setEmulatedMediaFeatures({ |
| features: [ |
| { name: 'prefers-color-scheme', value: '__invalid__' }, |
| ], |
| mediaQuery: '(prefers-color-scheme: __invalid__)', |
| }); |
| |
| testRunner.completeTest(); |
| }); |