@@ -1563,14 +1563,60 @@ test.describe("Workspace Manager V2 bootstrap", () => {
15631563 await expect ( page . locator ( "#statusLog" ) ) . toHaveValue ( / W A R N C r e a t e l i n e b l o c k e d : o b j e c t A s t e r o i d s S h i p i s l o c k e d f o r t h i s r u n t i m e s e s s i o n \. / ) ;
15641564 await page . locator ( ".object-vector-studio-v2__object-tile[data-object-id='object.asteroids.object-1'] [data-object-control='lock']" ) . click ( ) ;
15651565 await expect ( page . locator ( "#objectVectorStudioV2RenameObjectButton" ) ) . toBeEnabled ( ) ;
1566- const shapeScrollBefore = await page . locator ( "#objectVectorStudioV2ObjectsContent" ) . evaluate ( ( element ) => {
1567- element . scrollTop = 32 ;
1568- return element . scrollTop ;
1566+
1567+ const forceLeftPanelScroll = async ( ) => page . evaluate ( ( ) => {
1568+ const leftPanel = document . querySelector ( ".tool-starter__panel--left" ) ;
1569+ const objectsContent = document . querySelector ( "#objectVectorStudioV2ObjectsContent" ) ;
1570+ if ( ! leftPanel . dataset . scrollPersistenceStylesCaptured ) {
1571+ leftPanel . dataset . scrollPersistenceStylesCaptured = "true" ;
1572+ leftPanel . dataset . scrollPersistenceHeight = leftPanel . style . height ;
1573+ leftPanel . dataset . scrollPersistenceMaxHeight = leftPanel . style . maxHeight ;
1574+ leftPanel . dataset . scrollPersistenceOverflowY = leftPanel . style . overflowY ;
1575+ }
1576+ leftPanel . style . height = "150px" ;
1577+ leftPanel . style . maxHeight = "150px" ;
1578+ leftPanel . style . overflowY = "auto" ;
1579+ leftPanel . scrollTop = 24 ;
1580+ objectsContent . scrollTop = 32 ;
1581+ return {
1582+ leftPanelScrollTop : leftPanel . scrollTop ,
1583+ objectsScrollTop : objectsContent . scrollTop
1584+ } ;
15691585 } ) ;
1586+ const readLeftPanelScroll = async ( ) => page . evaluate ( ( ) => {
1587+ const leftPanel = document . querySelector ( ".tool-starter__panel--left" ) ;
1588+ const objectsContent = document . querySelector ( "#objectVectorStudioV2ObjectsContent" ) ;
1589+ return {
1590+ leftPanelScrollTop : leftPanel . scrollTop ,
1591+ objectsScrollTop : objectsContent . scrollTop
1592+ } ;
1593+ } ) ;
1594+ const restoreLeftPanelStyle = async ( ) => page . evaluate ( ( ) => {
1595+ const leftPanel = document . querySelector ( ".tool-starter__panel--left" ) ;
1596+ leftPanel . style . height = leftPanel . dataset . scrollPersistenceHeight || "" ;
1597+ leftPanel . style . maxHeight = leftPanel . dataset . scrollPersistenceMaxHeight || "" ;
1598+ leftPanel . style . overflowY = leftPanel . dataset . scrollPersistenceOverflowY || "" ;
1599+ delete leftPanel . dataset . scrollPersistenceStylesCaptured ;
1600+ delete leftPanel . dataset . scrollPersistenceHeight ;
1601+ delete leftPanel . dataset . scrollPersistenceMaxHeight ;
1602+ delete leftPanel . dataset . scrollPersistenceOverflowY ;
1603+ } ) ;
1604+
1605+ const leftPanelObjectScrollBefore = await forceLeftPanelScroll ( ) ;
1606+ expect ( leftPanelObjectScrollBefore . leftPanelScrollTop ) . toBeGreaterThan ( 0 ) ;
1607+ await page . locator ( ".object-vector-studio-v2__object-tile[data-object-id='object.asteroids.object-2']" ) . evaluate ( ( tile ) => tile . click ( ) ) ;
1608+ await expect . poll ( readLeftPanelScroll ) . toEqual ( leftPanelObjectScrollBefore ) ;
1609+ await expect ( page . locator ( ".object-vector-studio-v2__object-tile[data-object-id='object.asteroids.object-2']" ) ) . toHaveClass ( / i s - s e l e c t e d / ) ;
1610+ await page . locator ( ".object-vector-studio-v2__object-tile[data-object-id='object.asteroids.object-1']" ) . evaluate ( ( tile ) => tile . click ( ) ) ;
1611+ await expect . poll ( readLeftPanelScroll ) . toEqual ( leftPanelObjectScrollBefore ) ;
1612+ await expect ( page . locator ( ".object-vector-studio-v2__object-tile[data-object-id='object.asteroids.object-1']" ) ) . toHaveClass ( / i s - s e l e c t e d / ) ;
1613+
1614+ const shapeScrollBefore = await forceLeftPanelScroll ( ) ;
15701615 await page . locator ( ".object-vector-studio-v2__object-tile[data-object-id='object.asteroids.object-1'] [data-object-tile-shape-id='rectangle-1']" ) . evaluate ( ( button ) => button . click ( ) ) ;
1571- await expect . poll ( async ( ) => page . locator ( "#objectVectorStudioV2ObjectsContent" ) . evaluate ( ( element ) => element . scrollTop ) ) . toBe ( shapeScrollBefore ) ;
1616+ await expect . poll ( readLeftPanelScroll ) . toEqual ( shapeScrollBefore ) ;
15721617 await expect ( page . locator ( "#objectVectorStudioV2RenderSurface [data-shape-id='rectangle-1']" ) ) . toHaveClass ( / i s - s e l e c t e d / ) ;
15731618 await expect ( page . locator ( "#statusLog" ) ) . toHaveValue ( / O K S e l e c t e d s h a p e f r o m o b j e c t t i l e s h a p e l i s t : r e c t a n g l e - 1 \( r e c t a n g l e \) \. / ) ;
1619+ await restoreLeftPanelStyle ( ) ;
15741620
15751621 await page . locator ( "[data-palette-color='#6fd3ff']" ) . click ( ) ;
15761622 await expect ( page . locator ( "[data-palette-color='#6fd3ff']" ) ) . toHaveClass ( / i s - s e l e c t e d / ) ;
0 commit comments