Skip to content

Commit

Permalink
test: update SA tree-shaking test (#70327)
Browse files Browse the repository at this point in the history
  • Loading branch information
huozhi committed Sep 22, 2024
1 parent 607e383 commit 15fe5db
Show file tree
Hide file tree
Showing 6 changed files with 223 additions and 117 deletions.
49 changes: 26 additions & 23 deletions test/production/app-dir/actions-tree-shaking/basic/basic.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,30 +5,33 @@ import {
} from '../_testing/utils'

// TODO: revisit when we have a better side-effect free transform approach for server action
describe.skip('actions-tree-shaking - basic', () => {
const { next } = nextTestSetup({
files: __dirname,
})
;(process.env.TURBOPACK ? describe : describe.skip)(
'actions-tree-shaking - basic',
() => {
const { next } = nextTestSetup({
files: __dirname,
})

if (process.env.TEST_EDGE) {
markLayoutAsEdge(next)
}
if (process.env.TEST_EDGE) {
markLayoutAsEdge(next)
}

it('should not have the unused action in the manifest', async () => {
const actionsRoutesState = await getActionsRoutesStateByRuntime(next)
it('should not have the unused action in the manifest', async () => {
const actionsRoutesState = await getActionsRoutesStateByRuntime(next)

expect(actionsRoutesState).toMatchObject({
// only one server layer action
'app/server/page': {
rsc: 1,
},
// only one browser layer action
'app/client/page': {
'action-browser': 1,
},
'app/inline/page': {
rsc: 1,
},
expect(actionsRoutesState).toMatchObject({
// only one server layer action
'app/server/page': {
rsc: 1,
},
// only one browser layer action
'app/client/page': {
'action-browser': 1,
},
'app/inline/page': {
rsc: 1,
},
})
})
})
})
}
)
Original file line number Diff line number Diff line change
Expand Up @@ -5,26 +5,29 @@ import {
} from '../_testing/utils'

// TODO: revisit when we have a better side-effect free transform approach for server action
describe.skip('actions-tree-shaking - mixed-module-actions', () => {
const { next } = nextTestSetup({
files: __dirname,
})
;(process.env.TURBOPACK ? describe : describe.skip)(
'actions-tree-shaking - mixed-module-actions',
() => {
const { next } = nextTestSetup({
files: __dirname,
})

if (process.env.TEST_EDGE) {
markLayoutAsEdge(next)
}
if (process.env.TEST_EDGE) {
markLayoutAsEdge(next)
}

it('should not do tree shake for cjs module when import server actions', async () => {
const actionsRoutesState = await getActionsRoutesStateByRuntime(next)
it('should not do tree shake for cjs module when import server actions', async () => {
const actionsRoutesState = await getActionsRoutesStateByRuntime(next)

expect(actionsRoutesState).toMatchObject({
'app/mixed-module/esm/page': {
rsc: 1,
},
// CJS import is not able to tree shake, so it will include all actions
'app/mixed-module/cjs/page': {
rsc: 3,
},
expect(actionsRoutesState).toMatchObject({
'app/mixed-module/esm/page': {
rsc: 1,
},
// CJS import is not able to tree shake, so it will include all actions
'app/mixed-module/cjs/page': {
rsc: 3,
},
})
})
})
})
}
)
102 changes: 53 additions & 49 deletions test/production/app-dir/actions-tree-shaking/reexport/reexport.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,63 +6,67 @@ import {
import { retry } from 'next-test-utils'

// TODO: revisit when we have a better side-effect free transform approach for server action
describe.skip('actions-tree-shaking - reexport', () => {
const { next } = nextTestSetup({
files: __dirname,
skipDeployment: true,
})
;(process.env.TURBOPACK ? describe : describe.skip)(
'actions-tree-shaking - reexport',
() => {
const { next } = nextTestSetup({
files: __dirname,
skipDeployment: true,
})

if (process.env.TEST_EDGE) {
markLayoutAsEdge(next)
}
if (process.env.TEST_EDGE) {
markLayoutAsEdge(next)
}

it('should not tree-shake namespace exports the manifest', async () => {
const actionsRoutesState = await getActionsRoutesStateByRuntime(next)
it('should not tree-shake namespace exports the manifest', async () => {
const actionsRoutesState = await getActionsRoutesStateByRuntime(next)

expect(actionsRoutesState).toMatchObject({
'app/namespace-reexport/server/page': {
rsc: 3,
},
'app/namespace-reexport/client/page': {
'action-browser': 3,
},
'app/named-reexport/server/page': {
rsc: 3,
},
'app/namespace-reexport-2/client/page': {
'action-browser': 3,
},
'app/namespace-reexport-2/server/page': {
rsc: 3,
},
expect(actionsRoutesState).toMatchObject({
'app/namespace-reexport/server/page': {
// Turbopack does not tree-shake server side chunks
rsc: process.env.TURBOPACK ? 3 : 1,
},
'app/namespace-reexport/client/page': {
// Turbopack does not support tree-shaking export * as we don't have global information
'action-browser': process.env.TURBOPACK ? 3 : 1,
},
// We're not able to tree-shake these re-exports here in webpack mode
'app/named-reexport/server/page': {
// Turbopack supports tree-shaking these re-exports
rsc: process.env.TURBOPACK ? 1 : 3,
},
'app/named-reexport/client/page': {
'action-browser': 3,
},
})
})
})

it('should keep all the action exports for namespace export case on client layer', async () => {
const browser = await next.browser('/namespace-reexport-2/client')
const outputSize = next.cliOutput.length
it('should keep all the action exports for namespace export case on client layer', async () => {
const browser = await next.browser('/namespace-reexport-2/client')
const outputSize = next.cliOutput.length

await browser.elementByCss('#test-1').click()
await retry(async () => {
const output = next.cliOutput.slice(outputSize)
expect(output).toContain('action: test-1')
})
await browser.elementByCss('#test-1').click()
await retry(async () => {
const output = next.cliOutput.slice(outputSize)
expect(output).toContain('action: test-1')
})

await browser.elementByCss('#test-2').click()
await retry(async () => {
const output = next.cliOutput.slice(outputSize)
expect(output).toContain('action: test-2')
await browser.elementByCss('#test-2').click()
await retry(async () => {
const output = next.cliOutput.slice(outputSize)
expect(output).toContain('action: test-2')
})
})
})

it('should keep all the action exports for namespace export case on server layer', async () => {
const outputSize = next.cliOutput.length
await next.browser('/namespace-reexport-2/server')
it('should keep all the action exports for namespace export case on server layer', async () => {
const outputSize = next.cliOutput.length
await next.browser('/namespace-reexport-2/server')

await retry(async () => {
const output = next.cliOutput.slice(outputSize)
expect(output).toContain('action: test-1')
expect(output).toContain('action: test-2')
await retry(async () => {
const output = next.cliOutput.slice(outputSize)
expect(output).toContain('action: test-1')
expect(output).toContain('action: test-2')
})
})
})
})
}
)
Original file line number Diff line number Diff line change
Expand Up @@ -5,31 +5,34 @@ import {
} from '../_testing/utils'

// TODO: revisit when we have a better side-effect free transform approach for server action
describe.skip('actions-tree-shaking - shared-module-actions', () => {
const { next } = nextTestSetup({
files: __dirname,
})
;(process.env.TURBOPACK ? describe : describe.skip)(
'actions-tree-shaking - shared-module-actions',
() => {
const { next } = nextTestSetup({
files: __dirname,
})

if (process.env.TEST_EDGE) {
markLayoutAsEdge(next)
}
if (process.env.TEST_EDGE) {
markLayoutAsEdge(next)
}

it('should not have the unused action in the manifest', async () => {
const actionsRoutesState = await getActionsRoutesStateByRuntime(next)
it('should not have the unused action in the manifest', async () => {
const actionsRoutesState = await getActionsRoutesStateByRuntime(next)

expect(actionsRoutesState).toMatchObject({
'app/server/one/page': {
rsc: 1,
},
'app/server/two/page': {
rsc: 1,
},
'app/client/one/page': {
'action-browser': 1,
},
'app/client/two/page': {
'action-browser': 1,
},
expect(actionsRoutesState).toMatchObject({
'app/server/one/page': {
rsc: 1,
},
'app/server/two/page': {
rsc: 1,
},
'app/client/one/page': {
'action-browser': 1,
},
'app/client/two/page': {
'action-browser': 1,
},
})
})
})
})
}
)
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,7 @@ import {
markLayoutAsEdge,
} from '../_testing/utils'

// TODO: revisit when we have a better side-effect free transform approach for server action
describe.skip('actions-tree-shaking - use-effect-actions', () => {
describe('actions-tree-shaking - use-effect-actions', () => {
const { next } = nextTestSetup({
files: __dirname,
})
Expand Down
94 changes: 94 additions & 0 deletions test/turbopack-build-tests-manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -15597,6 +15597,100 @@
"flakey": [],
"runtimeError": false
},
"test/production/app-dir/actions-tree-shaking/basic/basic-edge.test.ts": {
"passed": [],
"failed": [
"actions-tree-shaking - basic should not have the unused action in the manifest"
],
"pending": [],
"flakey": [],
"runtimeError": false
},
"test/production/app-dir/actions-tree-shaking/basic/basic.test.ts": {
"passed": [
"actions-tree-shaking - basic should not have the unused action in the manifest"
],
"failed": [],
"pending": [],
"flakey": [],
"runtimeError": false
},
"test/production/app-dir/actions-tree-shaking/mixed-module-actions/mixed-module-actions-edge.test.ts": {
"passed": [
"actions-tree-shaking - mixed-module-actions should not do tree shake for cjs module when import server actions"
],
"failed": [],
"pending": [],
"flakey": [],
"runtimeError": false
},
"test/production/app-dir/actions-tree-shaking/mixed-module-actions/mixed-module-actions.test.ts": {
"passed": [
"actions-tree-shaking - mixed-module-actions should not do tree shake for cjs module when import server actions"
],
"failed": [],
"pending": [],
"flakey": [],
"runtimeError": false
},
"test/production/app-dir/actions-tree-shaking/reexport/reexport-edge.test.ts": {
"passed": [
"actions-tree-shaking - reexport should not have the unused action in the manifest"
],
"failed": [
"actions-tree-shaking - reexport should keep all the action exports for namespace export case on client layer"
],
"pending": [],
"flakey": [],
"runtimeError": false
},
"test/production/app-dir/actions-tree-shaking/reexport/reexport.test.ts": {
"passed": [
"actions-tree-shaking - reexport should not have the unused action in the manifest"
],
"failed": [
"actions-tree-shaking - reexport should keep all the action exports for namespace export case on client layer"
],
"pending": [],
"flakey": [],
"runtimeError": false
},
"test/production/app-dir/actions-tree-shaking/shared-module-actions/shared-module-actions-edge.test.ts": {
"passed": [
"actions-tree-shaking - shared-module-actions should not have the unused action in the manifest"
],
"failed": [],
"pending": [],
"flakey": [],
"runtimeError": false
},
"test/production/app-dir/actions-tree-shaking/shared-module-actions/shared-module-actions.test.ts": {
"passed": [
"actions-tree-shaking - shared-module-actions should not have the unused action in the manifest"
],
"failed": [],
"pending": [],
"flakey": [],
"runtimeError": false
},
"test/production/app-dir/actions-tree-shaking/use-effect-actions/use-effect-actions-edge.test.ts": {
"passed": [],
"failed": [
"actions-tree-shaking - use-effect-actions should not tree shake the used action under useEffect"
],
"pending": [],
"flakey": [],
"runtimeError": false
},
"test/production/app-dir/actions-tree-shaking/use-effect-actions/use-effect-actions.test.ts": {
"passed": [],
"failed": [
"actions-tree-shaking - use-effect-actions should not tree shake the used action under useEffect"
],
"pending": [],
"flakey": [],
"runtimeError": false
},
"test/production/app-dir/actions-tree-shaking/client-actions-tree-shaking/client-actions-tree-shaking.test.ts": {
"passed": [],
"failed": [
Expand Down

0 comments on commit 15fe5db

Please sign in to comment.