import webdriver, { BrowserInterface } from 'next-webdriver' import { createNext } from 'e2e-utils' import { NextInstance } from 'e2e-utils' import { check } from 'next-test-utils' describe('beforeInteractive in document Head', () => { let next: NextInstance beforeAll(async () => { next = await createNext({ files: { 'pages/_document.js': ` import { Html, Head, Main, NextScript } from 'next/document' import Script from 'next/script' export default function Document() { return (
) } `, 'pages/index.js': ` export default function Home() { return ( <>

Home page

) } `, }, dependencies: { react: '19.0.0-rc-f994737d14-20240522', 'react-dom': '19.0.0-rc-f994737d14-20240522', }, }) }) afterAll(() => next.destroy()) it('Script is injected server-side', async () => { let browser: BrowserInterface try { browser = await webdriver(next.url, '/') const script = await browser.eval( `document.querySelector('script[data-nscript="beforeInteractive"]')` ) expect(script).not.toBeNull() } finally { if (browser) await browser.close() } }) }) describe('beforeInteractive in document body', () => { let next: NextInstance beforeAll(async () => { next = await createNext({ files: { 'pages/_document.js': ` import { Html, Head, Main, NextScript } from 'next/document' import Script from 'next/script' export default function Document() { return (
) } `, 'pages/index.js': ` export default function Home() { return ( <>

Home page

) } `, }, dependencies: { react: '19.0.0-rc-f994737d14-20240522', 'react-dom': '19.0.0-rc-f994737d14-20240522', }, }) }) afterAll(() => next.destroy()) it('Script is injected server-side', async () => { let browser: BrowserInterface try { browser = await webdriver(next.url, '/') const script = await browser.eval( `document.querySelector('script[data-nscript="afterInteractive"]')` ) expect(script).not.toBeNull() } finally { if (browser) await browser.close() } }) }) describe('empty strategy in document body', () => { let next: NextInstance beforeAll(async () => { next = await createNext({ files: { 'pages/_document.js': ` import { Html, Head, Main, NextScript } from 'next/document' import Script from 'next/script' export default function Document() { return (
` ) try { browser = await webdriver(next.url, '/') // Partytown modifies type to "text/partytown-x" after it has been executed in the web worker await check(async () => { const processedWorkerScripts = await browser.eval( `document.querySelectorAll('script[type="text/partytown-x"]').length` ) return processedWorkerScripts + '' }, '1') const text = await browser.elementById('text').text() expect(text).toBe('abc') } finally { if (browser) await browser.close() } }) it('Inline worker script through dangerouslySetInnerHtml is modified by Partytown to execute on a worker thread', async () => { let browser: BrowserInterface next = await createNextApp( `