@@ -415,7 +415,7 @@ function defineTest(f: Fixture) {
415415 await page . getByRole ( 'button' , { name : 'client-counter: 0' } ) . click ( )
416416 } )
417417
418- test ( 'non-boundary client hmr' , async ( { page } ) => {
418+ test ( 'non-client-reference client hmr' , async ( { page } ) => {
419419 await page . goto ( f . url ( ) )
420420 await waitForHydration ( page )
421421
@@ -428,13 +428,55 @@ function defineTest(f: Fixture) {
428428 editor . edit ( ( s ) => s . replace ( '[ok]' , '[ok-edit]' ) )
429429 await expect ( locator ) . toHaveText ( 'test-hmr-client-dep: 1[ok-edit]' )
430430
431+ // check next rsc payload includes current client reference and preserves state
432+ await page . locator ( "a[href='?test-hmr-client-dep-re-render']" ) . click ( )
433+ await expect (
434+ page . locator ( "a[href='?test-hmr-client-dep-re-render']" ) ,
435+ ) . toHaveText ( 're-render [ok]' )
436+ await expect ( locator ) . toHaveText ( 'test-hmr-client-dep: 1[ok-edit]' )
437+
431438 // check next ssr is also updated
432- const res = await page . reload ( )
439+ const res = await page . request . get ( f . url ( ) , {
440+ headers : {
441+ accept : 'text/html' ,
442+ } ,
443+ } )
433444 expect ( await res ?. text ( ) ) . toContain ( '[ok-edit]' )
434445
446+ editor . reset ( )
447+ await expect ( locator ) . toHaveText ( 'test-hmr-client-dep: 1[ok]' )
448+ } )
449+
450+ test ( 'non-self-accepting client hmr' , async ( { page } ) => {
451+ await page . goto ( f . url ( ) )
435452 await waitForHydration ( page )
453+
454+ const locator = page . getByTestId ( 'test-hmr-client-dep2' )
455+ await expect ( locator ) . toHaveText ( 'test-hmr-client-dep2: 0[ok]' )
456+ await locator . locator ( 'button' ) . click ( )
457+ await expect ( locator ) . toHaveText ( 'test-hmr-client-dep2: 1[ok]' )
458+
459+ const editor = f . createEditor ( 'src/routes/hmr-client-dep2/client-dep.ts' )
460+ editor . edit ( ( s ) => s . replace ( '[ok]' , '[ok-edit]' ) )
461+ await expect ( locator ) . toHaveText ( 'test-hmr-client-dep2: 1[ok-edit]' )
462+
463+ // check next rsc payload includes an updated client reference and preserves state
464+ await page . locator ( "a[href='?test-hmr-client-dep2-re-render']" ) . click ( )
465+ await expect (
466+ page . locator ( "a[href='?test-hmr-client-dep2-re-render']" ) ,
467+ ) . toHaveText ( 're-render [ok]' )
468+ await expect ( locator ) . toHaveText ( 'test-hmr-client-dep2: 1[ok-edit]' )
469+
470+ // check next ssr is also updated
471+ const res = await page . request . get ( f . url ( ) , {
472+ headers : {
473+ accept : 'text/html' ,
474+ } ,
475+ } )
476+ expect ( await res ?. text ( ) ) . toContain ( '[ok-edit]' )
477+
436478 editor . reset ( )
437- await expect ( locator ) . toHaveText ( 'test-hmr-client-dep: 0 [ok]' )
479+ await expect ( locator ) . toHaveText ( 'test-hmr-client-dep2: 1 [ok]' )
438480 } )
439481
440482 test ( 'server hmr' , async ( { page } ) => {
0 commit comments