-
Notifications
You must be signed in to change notification settings - Fork 27.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Adding tests for Turbopack's module ID strategies, including IDs minification.
- Loading branch information
lichu acuña
authored
Aug 27, 2024
1 parent
91b979f
commit 1277b3c
Showing
6 changed files
with
161 additions
and
0 deletions.
There are no files selected for viewing
11 changes: 11 additions & 0 deletions
11
test/integration/module-id-strategies/components/CustomComponent.tsx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
import React from 'react' | ||
|
||
async function CustomComponent() { | ||
return ( | ||
<div> | ||
<h1>the content of a dynamic component</h1> | ||
</div> | ||
) | ||
} | ||
|
||
export default CustomComponent |
3 changes: 3 additions & 0 deletions
3
test/integration/module-id-strategies/module-with-long-name.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
module.exports = { | ||
foo: 'the content of a module with a long name', | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
module.exports = { | ||
bundlePagesRouterDependencies: true, | ||
serverExternalPackages: ['opted-out-external-package'], | ||
} |
3 changes: 3 additions & 0 deletions
3
test/integration/module-id-strategies/node_modules/external-module-with-long-name.js
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
import { foo } from '../module-with-long-name' | ||
import { bar } from '../node_modules/external-module-with-long-name' | ||
import dynamic from 'next/dynamic' | ||
|
||
const DynamicCustomComponent = dynamic( | ||
() => import('../components/CustomComponent'), | ||
{ | ||
loading: () => <p>Loading...</p>, | ||
} | ||
) | ||
|
||
export default function Index() { | ||
return ( | ||
<div> | ||
<DynamicCustomComponent /> | ||
{foo} {bar} | ||
</div> | ||
) | ||
} |
121 changes: 121 additions & 0 deletions
121
test/integration/module-id-strategies/test/index.test.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,121 @@ | ||
/* eslint-env jest */ | ||
|
||
import fs from 'fs-extra' | ||
import { join } from 'path' | ||
import { | ||
killApp, | ||
findPort, | ||
launchApp, | ||
nextBuild, | ||
renderViaHTTP, | ||
} from 'next-test-utils' | ||
|
||
const appDir = join(__dirname, '../') | ||
|
||
let appPort | ||
let app | ||
|
||
describe('minified module ids', () => { | ||
;(!process.env.TURBOPACK || process.env.TURBOPACK_DEV | ||
? describe.skip | ||
: describe)('production mode', () => { | ||
let ssrBundles = '' | ||
let staticBundles = '' | ||
|
||
beforeAll(async () => { | ||
await nextBuild(appDir, []) | ||
|
||
const ssrPath = join(appDir, '.next/server/chunks/ssr/') | ||
const ssrBundleBasenames = (await fs.readdir(ssrPath)).filter((p) => | ||
p.match(/\.js$/) | ||
) | ||
for (const basename of ssrBundleBasenames) { | ||
const output = await fs.readFile(join(ssrPath, basename), 'utf8') | ||
ssrBundles += output | ||
} | ||
|
||
const staticPath = join(appDir, '.next/static/chunks/') | ||
const staticBundleBasenames = (await fs.readdir(staticPath)).filter((p) => | ||
p.match(/\.js$/) | ||
) | ||
for (const basename of staticBundleBasenames) { | ||
const output = await fs.readFile(join(staticPath, basename), 'utf8') | ||
staticBundles += output | ||
} | ||
}) | ||
|
||
it('should have no long module ids for basic modules', async () => { | ||
expect(ssrBundles).not.toContain('module-with-long-name') | ||
expect(ssrBundles).toContain('the content of a module with a long name') | ||
}) | ||
|
||
it('should have no long module ids for external modules', async () => { | ||
expect(ssrBundles).not.toContain('external-module-with-long-name') | ||
expect(ssrBundles).toContain( | ||
'the content of an external module with a long name' | ||
) | ||
}) | ||
|
||
it('should have no long module ids for async loader modules', async () => { | ||
expect(ssrBundles).not.toContain('CustomComponent.tsx') | ||
expect(ssrBundles).toContain('the content of a dynamic component') | ||
}) | ||
|
||
it('should have no long module id for the next client runtime module', async () => { | ||
expect(staticBundles).not.toContain('next/dist/client/next-turbopack') | ||
}) | ||
}) | ||
;(!process.env.TURBOPACK || process.env.TURBOPACK_BUILD | ||
? describe.skip | ||
: describe)('development mode', () => { | ||
let ssrBundles = '' | ||
let staticBundles = '' | ||
|
||
beforeAll(async () => { | ||
appPort = await findPort() | ||
app = await launchApp(appDir, appPort) | ||
|
||
await renderViaHTTP(appPort, '/') | ||
|
||
const ssrPath = join(appDir, '.next/server/chunks/ssr/') | ||
const ssrBundleBasenames = (await fs.readdir(ssrPath)).filter((p) => | ||
p.match(/\.js$/) | ||
) | ||
for (const basename of ssrBundleBasenames) { | ||
const output = await fs.readFile(join(ssrPath, basename), 'utf8') | ||
ssrBundles += output | ||
} | ||
|
||
const staticPath = join(appDir, '.next/static/chunks/') | ||
const staticBundleBasenames = (await fs.readdir(staticPath)).filter((p) => | ||
p.match(/\.js$/) | ||
) | ||
for (const basename of staticBundleBasenames) { | ||
const output = await fs.readFile(join(staticPath, basename), 'utf8') | ||
staticBundles += output | ||
} | ||
}) | ||
afterAll(() => killApp(app)) | ||
|
||
it('should have long module ids for basic modules', async () => { | ||
expect(ssrBundles).toContain('module-with-long-name') | ||
expect(ssrBundles).toContain('the content of a module with a long name') | ||
}) | ||
|
||
it('should have long module ids for external modules', async () => { | ||
expect(ssrBundles).toContain('external-module-with-long-name') | ||
expect(ssrBundles).toContain( | ||
'the content of an external module with a long name' | ||
) | ||
}) | ||
|
||
it('should have long module ids for async loader modules', async () => { | ||
expect(ssrBundles).toContain('CustomComponent.tsx') | ||
expect(ssrBundles).toContain('the content of a dynamic component') | ||
}) | ||
|
||
it('should have long module id for the next client runtime module', async () => { | ||
expect(staticBundles).toContain('next/dist/client/next-dev-turbopack') | ||
}) | ||
}) | ||
}) |