@@ -6,6 +6,12 @@ const directory = "C:/OpenCode/ReviewTerminalStacked"
66const projectID = "proj_review_terminal_stacked"
77const sessionID = "ses_review_terminal_stacked"
88const title = "Review terminal stacked"
9+ const branchDiffs = [
10+ fileDiff ( ".github/actions/setup-bun/action.yml" , 7 ) ,
11+ ...Array . from ( { length : 2_739 } , ( _ , index ) =>
12+ fileDiff ( `src/branch/generated-${ String ( index ) . padStart ( 4 , "0" ) } .ts` , 100 ) ,
13+ ) ,
14+ ]
915
1016test ( "keeps the review tree and terminal sized when both panels are open" , async ( { page } ) => {
1117 await page . setViewportSize ( { width : 1400 , height : 900 } )
@@ -41,18 +47,26 @@ test("keeps the review tree and terminal sized when both panels are open", async
4147 time : { created : 1700000000000 , updated : 1700000000000 } ,
4248 } ,
4349 ] ,
44- vcsDiff : [
45- {
46- file : "src/example.ts" ,
47- additions : 1 ,
48- deletions : 1 ,
49- status : "modified" ,
50- patch :
51- "diff --git a/src/example.ts b/src/example.ts\n--- a/src/example.ts\n+++ b/src/example.ts\n@@ -1 +1 @@\n-export const value = 'before'\n+export const value = 'after'\n" ,
52- } ,
53- ] ,
5450 pageMessages : ( ) => ( { items : [ ] } ) ,
5551 } )
52+ await page . route ( / \/ v c s (?: \? .* ) ? $ / , ( route ) =>
53+ route . fulfill ( {
54+ status : 200 ,
55+ contentType : "application/json" ,
56+ body : JSON . stringify ( { branch : "review-pane-performance" , default_branch : "dev" } ) ,
57+ } ) ,
58+ )
59+ await page . route ( "**/vcs/diff**" , ( route ) =>
60+ route . fulfill ( {
61+ status : 200 ,
62+ contentType : "application/json" ,
63+ body : JSON . stringify (
64+ new URL ( route . request ( ) . url ( ) ) . searchParams . get ( "mode" ) === "branch"
65+ ? branchDiffs
66+ : [ fileDiff ( "src/git.ts" , 1 ) ] ,
67+ ) ,
68+ } ) ,
69+ )
5670 await page . route ( "**/pty" , ( route ) =>
5771 route . fulfill ( {
5872 status : 200 ,
@@ -71,11 +85,22 @@ test("keeps the review tree and terminal sized when both panels are open", async
7185 await page . goto ( `/${ base64Encode ( directory ) } /session/${ sessionID } ` )
7286 await expectSessionTitle ( page , title )
7387 await page . getByRole ( "button" , { name : "Toggle review" } ) . click ( )
74- await expect ( page . getByRole ( "button" , { name : "example .ts" } ) ) . toBeVisible ( )
88+ await expect ( page . getByRole ( "button" , { name : "git .ts" } ) ) . toBeVisible ( )
7589
7690 await page . keyboard . press ( "Control+Backquote" )
7791 await expect ( page . locator ( "#terminal-panel" ) ) . toBeVisible ( )
78- await expect ( page . getByRole ( "button" , { name : "example.ts" } ) ) . toBeVisible ( )
92+ // Terminal activation retries focus through 240ms; let that settle before opening the mode select.
93+ await page . waitForTimeout ( 300 )
94+ await page . getByRole ( "button" , { name : "Git changes" } ) . click ( )
95+ await page . getByRole ( "option" , { name : "Branch changes" } ) . click ( )
96+ await expect ( page . getByRole ( "tab" , { name : "Review 2740" } ) ) . toBeVisible ( )
97+ await expect ( page . getByRole ( "button" , { name : "action.yml" } ) ) . toBeVisible ( )
98+
99+ const tree = page . locator ( '#review-panel [data-component="file-tree-v2"]' )
100+ await expect ( tree ) . toHaveAttribute ( "data-total-rows" , "2745" )
101+ const renderedRows = await tree . locator ( '[data-slot="file-tree-v2-row"]' ) . count ( )
102+ expect ( renderedRows ) . toBeGreaterThan ( 0 )
103+ expect ( renderedRows ) . toBeLessThanOrEqual ( 60 )
79104
80105 const geometry = await page . evaluate ( ( ) => {
81106 const review = document . querySelector < HTMLElement > ( "#review-panel" ) !
@@ -96,3 +121,13 @@ test("keeps the review tree and terminal sized when both panels are open", async
96121function base64Encode ( value : string ) {
97122 return Buffer . from ( value , "utf8" ) . toString ( "base64" ) . replace ( / \+ / g, "-" ) . replace ( / \/ / g, "_" ) . replace ( / = / g, "" )
98123}
124+
125+ function fileDiff ( file : string , additions : number ) {
126+ return {
127+ file,
128+ additions,
129+ deletions : 0 ,
130+ status : "modified" ,
131+ patch : `diff --git a/${ file } b/${ file } \n--- a/${ file } \n+++ b/${ file } \n@@ -1 +1 @@\n-export const value = 'before'\n+export const value = 'after'\n` ,
132+ }
133+ }
0 commit comments