@@ -434,7 +434,7 @@ test.describe("Workspace Manager V2 bootstrap", () => {
434434 await expect ( page . locator ( ".session-inspector-v2__status-accordion-header #clearSessionInspectorV2StatusButton" ) ) . toHaveText ( "Clear Status" ) ;
435435 await expect ( page . locator ( ".session-inspector-v2__json-accordion-header" ) ) . toContainText ( "JSON" ) ;
436436 await expect ( page . locator ( ".session-inspector-v2__json-accordion-header" ) ) . not . toContainText ( "Details" ) ;
437- await expect ( page . locator ( ".session-inspector-v2__json-accordion-header #copySessionInspectorV2JsonButton " ) ) . toHaveText ( "Copy" ) ;
437+ await expect ( page . locator ( ".session-inspector-v2__json-accordion-header #copySessionInspectorV2AllButton " ) ) . toHaveText ( "Copy All " ) ;
438438 await expect ( page . locator ( ".session-inspector-v2__data-accordion-header" ) ) . toContainText ( "Data" ) ;
439439 await expect ( page . locator ( ".session-inspector-v2__dirty-accordion-header" ) ) . toContainText ( "Dirty" ) ;
440440 await expect ( page . locator ( ".session-inspector-v2__state-accordion-header" ) ) . toHaveCount ( 0 ) ;
@@ -476,7 +476,7 @@ test.describe("Workspace Manager V2 bootstrap", () => {
476476 const filterLabel = rectFor ( 'label[for="sessionInspectorV2FilterInput"] span' ) ;
477477 const filterInput = rectFor ( "#sessionInspectorV2FilterInput" ) ;
478478 const jsonIcon = rectFor ( ".session-inspector-v2__json-accordion-header .accordion-v2__icon" ) ;
479- const copyButton = rectFor ( "#copySessionInspectorV2JsonButton " ) ;
479+ const copyButton = rectFor ( "#copySessionInspectorV2AllButton " ) ;
480480 return {
481481 buttonsFit : [ refresh , deleteAll , clearStatus ] . every ( ( rect ) => rect . scrollWidth <= rect . clientWidth + 1 ) ,
482482 clearStatusCompact : clearStatus . height <= 34 ,
@@ -634,10 +634,12 @@ test.describe("Workspace Manager V2 bootstrap", () => {
634634 await expect ( page . locator ( "#sessionInspectorV2JsonOutput" ) ) . toHaveText ( "true" ) ;
635635 await expect ( page . locator ( "#sessionInspectorV2DataOutput" ) ) . toContainText ( "No data section is present for sessionStorage:session-inspector-v2-alpha." ) ;
636636 await expect ( page . locator ( "#sessionInspectorV2DirtyOutput" ) ) . toContainText ( "No dirty section is present for sessionStorage:session-inspector-v2-alpha." ) ;
637- const copiedJsonText = await page . locator ( "#sessionInspectorV2JsonOutput" ) . textContent ( ) ;
638- await page . locator ( "#copySessionInspectorV2JsonButton" ) . click ( ) ;
639- await expect ( page . locator ( "#statusLog" ) ) . toHaveValue ( / O K C o p i e d J S O N c o n t e n t t o c l i p b o a r d \. / ) ;
640- expect ( await page . evaluate ( ( ) => window . __sessionInspectorV2ClipboardText ) ) . toBe ( copiedJsonText ) ;
637+ await page . locator ( "#copySessionInspectorV2AllButton" ) . click ( ) ;
638+ await expect ( page . locator ( "#statusLog" ) ) . toHaveValue ( / W A R N C o p i e d J S O N , D a t a , a n d D i r t y s e c t i o n s w i t h e m p t y - s t a t e t e x t f o r m i s s i n g D a t a a n d D i r t y \. / ) ;
639+ const copiedValidationText = await page . evaluate ( ( ) => window . __sessionInspectorV2ClipboardText ) ;
640+ expect ( copiedValidationText ) . toContain ( "=== JSON ===\ntrue" ) ;
641+ expect ( copiedValidationText ) . toContain ( "=== Data ===\nNo data section is present for sessionStorage:session-inspector-v2-alpha." ) ;
642+ expect ( copiedValidationText ) . toContain ( "=== Dirty ===\nNo dirty section is present for sessionStorage:session-inspector-v2-alpha." ) ;
641643 await page . locator ( '[data-session-inspector-v2-delete-entry-id="sessionStorage:session-inspector-v2-alpha"]' ) . click ( ) ;
642644 await expect ( page . locator ( "#sessionInspectorV2EntryList [data-session-inspector-v2-entry-id]" ) ) . toHaveCount ( 4 ) ;
643645 await expect ( page . locator ( "#sessionInspectorV2JsonOutput" ) ) . toHaveText ( '"plain beta value"' ) ;
@@ -672,8 +674,8 @@ test.describe("Workspace Manager V2 bootstrap", () => {
672674 "(0) LocalStorage."
673675 ] ) ;
674676 await expect ( page . locator ( "#statusLog" ) ) . toHaveValue ( / O K D e l e t e d 4 s h o w n s t o r a g e e n t r i e s \. / ) ;
675- await page . locator ( "#copySessionInspectorV2JsonButton " ) . click ( ) ;
676- await expect ( page . locator ( "#statusLog" ) ) . toHaveValue ( / W A R N C o p y s k i p p e d : n o J S O N c o n t e n t i s s h o w n \. / ) ;
677+ await page . locator ( "#copySessionInspectorV2AllButton " ) . click ( ) ;
678+ await expect ( page . locator ( "#statusLog" ) ) . toHaveValue ( / F A I L C o p y A l l f a i l e d : s e l e c t a s t o r a g e e n t r y b e f o r e c o p y i n g J S O N , D a t a , a n d D i r t y \. / ) ;
677679 await page . locator ( "#deleteAllSessionInspectorV2Button" ) . click ( ) ;
678680 await expect ( page . locator ( "#statusLog" ) ) . toHaveValue ( / W A R N D e l e t e A l l s k i p p e d : n o m a t c h i n g s t o r a g e e n t r i e s a r e s h o w n \. / ) ;
679681 expect ( await page . evaluate ( ( ) => window . localStorage . getItem ( "session-inspector-v2-local" ) ) ) . toBe ( "local value" ) ;
@@ -695,6 +697,14 @@ test.describe("Workspace Manager V2 bootstrap", () => {
695697 test ( "shows normalized workspace tool sessions as JSON, Data, and Dirty views" , async ( { page } ) => {
696698 const pageErrors = [ ] ;
697699 await page . addInitScript ( ( ) => {
700+ Object . defineProperty ( window . navigator , "clipboard" , {
701+ configurable : true ,
702+ value : {
703+ async writeText ( value ) {
704+ window . __sessionInspectorV2ClipboardText = value ;
705+ }
706+ }
707+ } ) ;
698708 window . sessionStorage . setItem ( "workspace.tools.preview-generator-v2" , JSON . stringify ( {
699709 schema : {
700710 source : "workspace-manager-v2" ,
@@ -816,6 +826,17 @@ test.describe("Workspace Manager V2 bootstrap", () => {
816826 await expect ( page . locator ( "#sessionInspectorV2DirtyOutput" ) ) . not . toContainText ( '"data"' ) ;
817827 await expect ( page . locator ( "#sessionInspectorV2DirtyOutput" ) ) . not . toContainText ( '"workspace"' ) ;
818828 await expect ( page . locator ( "#sessionInspectorV2DirtyOutput" ) ) . not . toContainText ( '"schema"' ) ;
829+ await page . locator ( "#copySessionInspectorV2AllButton" ) . click ( ) ;
830+ await expect ( page . locator ( "#statusLog" ) ) . toHaveValue ( / O K C o p i e d J S O N , D a t a , a n d D i r t y s e c t i o n s t o c l i p b o a r d \. / ) ;
831+ const copiedToolPayload = await page . evaluate ( ( ) => window . __sessionInspectorV2ClipboardText ) ;
832+ expect ( copiedToolPayload ) . toContain ( "=== JSON ===" ) ;
833+ expect ( copiedToolPayload ) . toContain ( "=== Data ===" ) ;
834+ expect ( copiedToolPayload ) . toContain ( "=== Dirty ===" ) ;
835+ expect ( copiedToolPayload ) . toContain ( '"workspace"' ) ;
836+ expect ( copiedToolPayload ) . toContain ( '"data"' ) ;
837+ expect ( copiedToolPayload ) . toContain ( '"dirty"' ) ;
838+ expect ( copiedToolPayload ) . toContain ( '"assets.image.preview.preview"' ) ;
839+ expect ( copiedToolPayload ) . toContain ( '"isDirty": false' ) ;
819840
820841 await page . locator ( '[data-session-inspector-v2-entry-id="sessionStorage:workspace.tools.no-data-test"]' ) . click ( ) ;
821842 await expect ( page . locator ( "#sessionInspectorV2DataOutput" ) ) . toContainText ( "No data section is present for sessionStorage:workspace.tools.no-data-test." ) ;
0 commit comments