@@ -1469,7 +1469,24 @@ test.describe("Workspace Manager V2 bootstrap", () => {
14691469 await expect ( page . locator ( "#objectVectorStudioV2RenderSurface [data-shape-id='circle-2']" ) ) . toHaveClass ( / i s - s e l e c t e d / ) ;
14701470 await expect ( page . locator ( ".object-vector-studio-v2__object-tile[data-object-id='object-1']" ) ) . toHaveClass ( / i s - s e l e c t e d / ) ;
14711471 await expect ( page . locator ( ".object-vector-studio-v2__object-tile[data-object-id='object-1'] [data-object-tile-shape-id]" ) ) . toHaveCount ( 2 ) ;
1472+ await expect ( page . locator ( ".object-vector-studio-v2__object-tile[data-object-id='object-1'] [data-object-tile-shape-id] .object-vector-studio-v2__shape-select-label" ) ) . toHaveText ( [ "1. rectangle-1" , "2. circle-2" ] ) ;
14721473 await expect ( page . locator ( ".object-vector-studio-v2__object-tile-shape-row.is-selected [data-object-tile-shape-id='circle-2']" ) ) . toHaveCount ( 1 ) ;
1474+ const shapeHierarchyDensity = await page . locator ( ".object-vector-studio-v2__object-tile[data-object-id='object-1']" ) . evaluate ( ( tile ) => {
1475+ const shapeList = tile . querySelector ( ".object-vector-studio-v2__object-tile-shapes" ) ;
1476+ const shapeRow = tile . querySelector ( ".object-vector-studio-v2__object-tile-shape-row" ) ;
1477+ const shapeButton = tile . querySelector ( "[data-object-tile-shape-id]" ) ;
1478+ const shapeLabel = tile . querySelector ( ".object-vector-studio-v2__shape-select-label" ) ;
1479+ return {
1480+ fontSize : Number . parseFloat ( getComputedStyle ( shapeRow ) . fontSize ) ,
1481+ gap : Number . parseFloat ( getComputedStyle ( shapeList ) . gap ) ,
1482+ labelLineHeight : Number . parseFloat ( getComputedStyle ( shapeLabel ) . lineHeight ) ,
1483+ rowHeight : Math . round ( shapeButton . getBoundingClientRect ( ) . height )
1484+ } ;
1485+ } ) ;
1486+ expect ( shapeHierarchyDensity . fontSize ) . toBeLessThanOrEqual ( 12 ) ;
1487+ expect ( shapeHierarchyDensity . gap ) . toBeLessThanOrEqual ( 3 ) ;
1488+ expect ( shapeHierarchyDensity . labelLineHeight ) . toBeLessThanOrEqual ( 14 ) ;
1489+ expect ( shapeHierarchyDensity . rowHeight ) . toBeLessThanOrEqual ( 28 ) ;
14731490 await expect ( page . locator ( ".object-vector-studio-v2__object-tile[data-object-id='object-1'] [data-object-control='visibility']" ) ) . toHaveText ( "" ) ;
14741491 await expect ( page . locator ( ".object-vector-studio-v2__object-tile[data-object-id='object-1'] [data-object-control='lock']" ) ) . toHaveText ( "" ) ;
14751492 await expect ( page . locator ( ".object-vector-studio-v2__object-tile[data-object-id='object-1'] [data-object-control='visibility'] .object-vector-studio-v2__tile-icon--eye" ) ) . toHaveCount ( 1 ) ;
@@ -1487,7 +1504,12 @@ test.describe("Workspace Manager V2 bootstrap", () => {
14871504 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 \. / ) ;
14881505 await page . locator ( ".object-vector-studio-v2__object-tile[data-object-id='object-1'] [data-object-control='lock']" ) . click ( ) ;
14891506 await expect ( page . locator ( "#objectVectorStudioV2RenameObjectButton" ) ) . toBeEnabled ( ) ;
1490- await page . locator ( ".object-vector-studio-v2__object-tile[data-object-id='object-1'] [data-object-tile-shape-id='rectangle-1']" ) . click ( ) ;
1507+ const shapeScrollBefore = await page . locator ( "#objectVectorStudioV2ObjectsContent" ) . evaluate ( ( element ) => {
1508+ element . scrollTop = 32 ;
1509+ return element . scrollTop ;
1510+ } ) ;
1511+ await page . locator ( ".object-vector-studio-v2__object-tile[data-object-id='object-1'] [data-object-tile-shape-id='rectangle-1']" ) . evaluate ( ( button ) => button . click ( ) ) ;
1512+ await expect . poll ( async ( ) => page . locator ( "#objectVectorStudioV2ObjectsContent" ) . evaluate ( ( element ) => element . scrollTop ) ) . toBe ( shapeScrollBefore ) ;
14911513 await expect ( page . locator ( "#objectVectorStudioV2RenderSurface [data-shape-id='rectangle-1']" ) ) . toHaveClass ( / i s - s e l e c t e d / ) ;
14921514 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 \) \. / ) ;
14931515
@@ -1681,7 +1703,12 @@ test.describe("Workspace Manager V2 bootstrap", () => {
16811703 const exportedSchemaValidation = await page . evaluate ( ( payload ) => window . __objectVectorStudioV2App . schemaService . validatePayload ( payload ) , exportedPayload ) ;
16821704 expect ( exportedSchemaValidation ) . toEqual ( { errors : [ ] , ok : true , payload : exportedPayload } ) ;
16831705
1706+ const objectScrollBefore = await page . locator ( "#objectVectorStudioV2ObjectsContent" ) . evaluate ( ( element ) => {
1707+ element . scrollTop = 120 ;
1708+ return element . scrollTop ;
1709+ } ) ;
16841710 await page . locator ( '.object-vector-studio-v2__object-tile[data-object-id="object-2"]' ) . evaluate ( ( button ) => button . click ( ) ) ;
1711+ await expect . poll ( async ( ) => page . locator ( "#objectVectorStudioV2ObjectsContent" ) . evaluate ( ( element ) => element . scrollTop ) ) . toBe ( objectScrollBefore ) ;
16851712 await expect ( page . locator ( '[data-object-id="object-2"]' ) ) . toHaveAttribute ( "aria-pressed" , "true" ) ;
16861713 await expect ( page . locator ( "#objectVectorStudioV2ObjectNameInput" ) ) . toHaveValue ( "Object 2" ) ;
16871714 await expect ( page . locator ( "#objectVectorStudioV2ObjectPreviewFooter" ) ) . toContainText ( "Object ID: object-2" ) ;
@@ -5334,6 +5361,11 @@ test.describe("Workspace Manager V2 bootstrap", () => {
53345361 await expect ( page . locator ( "#objectVectorStudioV2ObjectTiles" ) ) . toContainText ( "Asteroids Ship" ) ;
53355362 await expect ( page . locator ( "#objectVectorStudioV2ObjectTiles" ) ) . toContainText ( "Large Asteroid" ) ;
53365363 await expect ( page . locator ( "#objectVectorStudioV2ObjectTiles" ) ) . toContainText ( "Large UFO" ) ;
5364+ const smallUfoTile = page . locator ( '.object-vector-studio-v2__object-tile[data-object-id="object.asteroids.ufo.small"]' ) ;
5365+ await smallUfoTile . scrollIntoViewIfNeeded ( ) ;
5366+ await smallUfoTile . click ( ) ;
5367+ await expect ( smallUfoTile ) . toContainText ( "objects > Small UFO" ) ;
5368+ await expect ( smallUfoTile . locator ( "[data-object-tile-shape-id] .object-vector-studio-v2__shape-select-label" ) ) . toHaveText ( [ "0. small-ufo-body" , "1. small-ufo-canopy" ] ) ;
53375369 await page . locator ( 'button[aria-controls="objectVectorStudioV2DependencyGraphContent"]' ) . click ( ) ;
53385370 await expect ( page . locator ( "#objectVectorStudioV2DependencyGraph" ) ) . toContainText ( "Deferred reusable library capability" ) ;
53395371 await expect ( page . locator ( "#objectVectorStudioV2DependencyGraph" ) ) . toContainText ( "asset.asteroids.ship" ) ;
0 commit comments