@@ -19,7 +19,7 @@ test.describe("mapml-viewer DOM API Tests", () => {
1919 let errorLogs = [ ] ;
2020 page . on ( "pageerror" , ( err ) => {
2121 errorLogs . push ( err . message ) ;
22- } )
22+ } ) ;
2323 const viewerHandle = await page . evaluateHandle ( ( ) => document . createElement ( "mapml-viewer" ) ) ;
2424 const nn = await ( await page . evaluateHandle ( viewer => viewer . nodeName , viewerHandle ) ) . jsonValue ( ) ;
2525 expect ( nn ) . toEqual ( 'MAPML-VIEWER' ) ;
@@ -78,6 +78,37 @@ test.describe("mapml-viewer DOM API Tests", () => {
7878 ( tileDiv ) => tileDiv . firstChild . nodeName === "IMG" ) ;
7979 expect ( layerVisible ) . toBe ( true ) ;
8080 } ) ;
81+
82+ test ( "Remove mapml-viewer from DOM, add it back in" , async ( ) => {
83+ // check for error messages in console
84+ let errorLogs = [ ] ;
85+ page . on ( "pageerror" , ( err ) => {
86+ errorLogs . push ( err . message ) ;
87+ } ) ;
88+ // locators avoid flaky tests, allegedly
89+ const viewer = await page . locator ( 'mapml-viewer' ) ;
90+ await viewer . evaluate ( ( ) => {
91+ } ) ;
92+ expect ( await viewer . evaluate ( ( ) => {
93+ let m = document . querySelector ( 'mapml-viewer' ) ;
94+ document . body . removeChild ( m ) ;
95+ document . body . appendChild ( m ) ;
96+ let l = m . querySelector ( 'layer-' ) ;
97+ return l . label ;
98+ // the label attribute is ignored if the mapml document has a map-title
99+ // element, which is the case here. Since the layer loads over the
100+ // network, it means that the map is back to normal after being re-added
101+ /// to the DOM, if the label reads as follows:
102+ } ) ) . toEqual ( "Canada Base Map - Transportation (CBMT)" ) ;
103+ // takes a couple of seconds for the tiles to load
104+
105+ // check for error messages in console
106+ expect ( errorLogs . length ) . toBe ( 0 ) ;
107+
108+ await page . waitForLoadState ( 'networkidle' ) ;
109+ const layerTile = await page . locator ( "body > mapml-viewer .leaflet-tile-loaded:nth-child(1)" ) ;
110+ expect ( await layerTile . evaluate ( tile => tile . firstChild . nodeName === "IMG" ) ) . toBe ( true ) ;
111+ } ) ;
81112
82113 test ( "Toggle all mapml-viewer controls by adding or removing controls attribute" , async ( ) => {
83114 await page . evaluateHandle ( ( ) => document . querySelector ( 'layer-' ) . setAttribute ( "hidden" , "" ) ) ;
@@ -226,7 +257,7 @@ test.describe("mapml-viewer DOM API Tests", () => {
226257 // remove map for next test
227258 await page . evaluateHandle ( ( ) => document . querySelector ( 'mapml-viewer' ) . remove ( ) ) ;
228259 } ) ;
229-
260+
230261 test . describe ( "controlslist test" , ( ) => {
231262
232263 test ( "map created with controlslist" , async ( ) => {
@@ -495,7 +526,7 @@ test.describe("mapml-viewer DOM API Tests", () => {
495526 return viewer . defineCustomProjection ( template ) ;
496527 } , viewerHandle ) ;
497528 expect ( custProj ) . toEqual ( "basic" ) ;
498- await page . evaluate ( ( viewer ) => { viewer . projection = "basic" } , viewerHandle ) ;
529+ await page . evaluate ( ( viewer ) => { viewer . projection = "basic" ; } , viewerHandle ) ;
499530
500531 // Toggle Controls (T) contextmenu is disabled
501532 let toggleControlsBtn = await page . $eval ( "div > div.mapml-contextmenu > button:nth-child(10)" , ( btn ) => btn . disabled ) ;
0 commit comments