Skip to content

Commit 1e75939

Browse files
authored
Add test for TLA in client references (#70022)
Fixes PACK-3246
1 parent d463b8b commit 1e75939

File tree

10 files changed

+88
-0
lines changed

10 files changed

+88
-0
lines changed
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
'use client'
2+
3+
let name = await Promise.resolve('async')
4+
5+
export default (props) => {
6+
return <button {...props}>this is an {name} client button</button>
7+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
'use client'
2+
3+
let name = await Promise.resolve('async')
4+
5+
export default (props) => {
6+
return <button {...props}>this is an {name} client button with SSR</button>
7+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import dynamic from 'next/dynamic'
2+
3+
const Client1 = dynamic(() => import('./client'))
4+
const Client2 = dynamic(() => import('./client-no-ssr'), { ssr: false })
5+
6+
export default function Page() {
7+
return (
8+
<>
9+
<Client1 id="client-button" />
10+
<Client2 id="client-button-no-ssr" />
11+
</>
12+
)
13+
}

test/e2e/app-dir/dynamic/dynamic.test.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,5 +148,21 @@ describe('app dir - next/dynamic', () => {
148148
const $ = await next.render$('/dynamic/named-export')
149149
expect($('#client-button').text()).toBe('this is a client button')
150150
})
151+
152+
it('should support dynamic import with TLA in client components', async () => {
153+
const $ = await next.render$('/dynamic/async-client')
154+
expect($('#client-button').text()).toBe(
155+
'this is an async client button with SSR'
156+
)
157+
expect($('#client-button-no-ssr').text()).toBe('')
158+
159+
const browser = await next.browser('/dynamic/async-client')
160+
expect(await browser.elementByCss('#client-button').text()).toBe(
161+
'this is an async client button with SSR'
162+
)
163+
expect(await browser.elementByCss('#client-button-no-ssr').text()).toBe(
164+
'this is an async client button'
165+
)
166+
})
151167
})
152168
})
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
'use client'
2+
3+
import { useState } from 'react'
4+
5+
let name = await Promise.resolve('async')
6+
7+
export default (props) => {
8+
return `client ${useState(name)[0]}`
9+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export { default } from '../../lazy/page'
2+
3+
export const runtime = 'edge'
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export { default } from '../../sync/page'
2+
3+
export const runtime = 'edge'
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { lazy } from 'react'
2+
3+
const Client = lazy(() => import('../client'))
4+
5+
export default function Page() {
6+
return <Client />
7+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import Client from '../client'
2+
3+
export default function Page() {
4+
return <Client />
5+
}

test/e2e/app-dir/rsc-basic/rsc-basic.test.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,24 @@ describe('app dir - rsc basics', () => {
230230
expect(html).toContain('dynamic data!')
231231
})
232232

233+
// TODO: TLA in client references are currently broken with Webpack on Edge
234+
describe.each(process.env.TURBOPACK ? ['node', 'edge'] : ['node'])(
235+
'client references with TLA (%s)',
236+
(runtime) => {
237+
let url = `/async-client${runtime === 'edge' ? '/edge' : ''}`
238+
239+
it('should support TLA in sync client reference imports', async () => {
240+
const html = await next.render(url + '/sync')
241+
expect(html).toContain('client async')
242+
})
243+
244+
it('should support TLA in lazy client reference', async () => {
245+
const html = await next.render(url + '/lazy')
246+
expect(html).toContain('client async')
247+
})
248+
}
249+
)
250+
233251
if (isPPREnabledByDefault) {
234252
// TODO: Figure out why this test is flaky when PPR is enabled
235253
} else {

0 commit comments

Comments
 (0)