1+ import { test , expect , chromium } from '@playwright/test' ;
2+
3+ test . describe ( 'map-layer media attribute' , ( ) => {
4+ let page ;
5+ let context ;
6+ let viewer ;
7+ test . beforeAll ( async function ( ) {
8+ context = await chromium . launchPersistentContext ( '' ) ;
9+ page =
10+ context . pages ( ) . find ( ( page ) => page . url ( ) === 'about:blank' ) ||
11+ ( await context . newPage ( ) ) ;
12+ await page . goto ( 'map-layer-media.html' ) ;
13+ await page . waitForTimeout ( 1000 ) ;
14+ viewer = page . getByTestId ( 'viewer' ) ;
15+ } ) ;
16+ test ( 'On initial load, a matching media queried layer is enabled' , async ( ) => {
17+ const matchedQueryLayer = page . getByTestId ( 'initial-mq' ) ;
18+ // map loads at z=2, query matches 0 <= z <= 3
19+ await expect ( matchedQueryLayer ) . not . toHaveAttribute ( 'disabled' , '' ) ;
20+ } ) ;
21+ test ( `A visible (enabled) map-layer with no media query should remain enabled \
22+ when a matching mq is added` , async ( ) => {
23+ const noInitialQueryLayer = page . getByTestId ( 'no-initial-mq' ) ;
24+ await expect ( noInitialQueryLayer ) . not . toHaveAttribute ( 'disabled' , '' ) ;
25+ await viewer . evaluate ( ( v ) => v . zoomTo ( v . lat , v . lon , 4 ) ) ;
26+ await page . waitForTimeout ( 200 ) ;
27+ // should still be enabled:
28+ await expect ( noInitialQueryLayer ) . not . toHaveAttribute ( 'disabled' , '' ) ;
29+ } ) ;
30+ test ( `A visible (enabled) map-layer with no media query should be disabled \
31+ when a non-matching media query attribute is set` , async ( ) => {
32+ await expect ( viewer ) . toHaveAttribute ( 'zoom' , '4' ) ;
33+ const presentInLayerControl = await viewer . evaluate ( ( v ) => {
34+ let lc = v . _layerControl ;
35+ let layers = lc . _layers . map ( ( e ) => e . layer . _layerEl ) ;
36+ let noInitialQueryLayer = v . querySelector ( '[data-testid=no-initial-mq]' ) ;
37+ return layers . some ( ( e ) => e === noInitialQueryLayer ) ;
38+ } ) ;
39+ expect ( presentInLayerControl ) . toBe ( true ) ;
40+ const noInitialQueryLayer = page . getByTestId ( 'no-initial-mq' ) ;
41+ await expect ( noInitialQueryLayer ) . not . toHaveAttribute ( 'disabled' , '' ) ;
42+ await noInitialQueryLayer . evaluate ( ( l ) => l . media = '(0 <= map-zoom <=3)' ) ;
43+ await expect ( noInitialQueryLayer ) . toHaveAttribute ( 'disabled' , '' ) ;
44+ } ) ;
45+ test ( `A mq-disabled layer is removed from the layer control` , async ( ) => {
46+ const noInitialQueryLayer = page . getByTestId ( 'no-initial-mq' ) ;
47+ await expect ( noInitialQueryLayer ) . toHaveAttribute ( 'media' , '(0 <= map-zoom <=3)' ) ;
48+ await expect ( noInitialQueryLayer ) . toHaveAttribute ( 'disabled' , '' ) ;
49+ const presentInLayerControl = await viewer . evaluate ( ( v ) => {
50+ let lc = v . _layerControl ;
51+ let layers = lc . _layers . map ( ( e ) => e . layer . _layerEl ) ;
52+ let noInitialQueryLayer = v . querySelector ( '[data-testid=no-initial-mq]' ) ;
53+ return layers . some ( ( e ) => e === noInitialQueryLayer ) ;
54+ } ) ;
55+ expect ( presentInLayerControl ) . toBe ( false ) ;
56+ } ) ;
57+ test ( `A layer disabled due to mq would otherwise be enabled is \
58+ enabled and added to the layer control when mq removed` , async ( ) => {
59+ const noInitialQueryLayer = page . getByTestId ( 'no-initial-mq' ) ;
60+ await expect ( noInitialQueryLayer ) . toHaveAttribute ( 'media' , '(0 <= map-zoom <=3)' ) ;
61+ await expect ( noInitialQueryLayer ) . toHaveAttribute ( 'disabled' , '' ) ;
62+ await noInitialQueryLayer . evaluate ( ( l ) => l . removeAttribute ( 'media' ) ) ;
63+ await expect ( noInitialQueryLayer ) . not . toHaveAttribute ( 'disabled' , '' ) ;
64+ const presentInLayerControl = await viewer . evaluate ( ( v ) => {
65+ let lc = v . _layerControl ;
66+ let layers = lc . _layers . map ( ( e ) => e . layer . _layerEl ) ;
67+ let noInitialQueryLayer = v . querySelector ( '[data-testid=no-initial-mq]' ) ;
68+ return layers . some ( ( e ) => e === noInitialQueryLayer ) ;
69+ } ) ;
70+ expect ( presentInLayerControl ) . toBe ( true ) ;
71+
72+ } ) ;
73+ test ( `An empty media query is the same as no media query` , async ( ) => {
74+ const noInitialQueryLayer = page . getByTestId ( 'no-initial-mq' ) ;
75+ await noInitialQueryLayer . evaluate ( ( l ) => l . setAttribute ( 'media' , ' ' ) ) ;
76+ await expect ( noInitialQueryLayer ) . not . toHaveAttribute ( 'disabled' , '' ) ;
77+
78+ } ) ;
79+ test ( `An invalid media query is the same as a non-matching media query` , async ( ) => {
80+ const noInitialQueryLayer = page . getByTestId ( 'no-initial-mq' ) ;
81+ await noInitialQueryLayer . evaluate ( ( l ) => l . setAttribute ( 'media' , '(foo ' ) ) ;
82+ await expect ( noInitialQueryLayer ) . toHaveAttribute ( 'disabled' , '' ) ;
83+ } ) ;
84+ } ) ;
0 commit comments