(
diff --git a/packages/next/shared/lib/router/utils/app-paths.ts b/packages/next/shared/lib/router/utils/app-paths.ts
index bf69f05e0902..f48b324d1a6c 100644
--- a/packages/next/shared/lib/router/utils/app-paths.ts
+++ b/packages/next/shared/lib/router/utils/app-paths.ts
@@ -10,6 +10,10 @@ export function normalizeAppPath(pathname: string) {
return acc
}
+ if (segment.startsWith('@')) {
+ return acc
+ }
+
if (segment === 'page' && index === segments.length - 1) {
return acc
}
diff --git a/test/e2e/app-dir/app-prefetch/app/dashboard/[id]/page.server.js b/test/e2e/app-dir/app-prefetch/app/dashboard/[id]/page.server.js
new file mode 100644
index 000000000000..5b4a6e8078cd
--- /dev/null
+++ b/test/e2e/app-dir/app-prefetch/app/dashboard/[id]/page.server.js
@@ -0,0 +1,26 @@
+import Link from 'next/link'
+
+export async function getServerSideProps() {
+ await new Promise((resolve) => setTimeout(resolve, 1000))
+ return {
+ props: { a: 'b' },
+ }
+}
+
+export default function IdPage({ params }) {
+ if (params.id === '123') {
+ return (
+ <>
+ IdPage: {params.id}
+ To 456
+ >
+ )
+ }
+
+ return (
+ <>
+ IdPage: {params.id}
+ To 123
+ >
+ )
+}
diff --git a/test/e2e/app-dir/app-prefetch/app/dashboard/layout.server.js b/test/e2e/app-dir/app-prefetch/app/dashboard/layout.server.js
new file mode 100644
index 000000000000..84ebbb490d40
--- /dev/null
+++ b/test/e2e/app-dir/app-prefetch/app/dashboard/layout.server.js
@@ -0,0 +1,16 @@
+export async function getServerSideProps() {
+ await new Promise((resolve) => setTimeout(resolve, 2000))
+ return {
+ props: {
+ message: 'Hello World',
+ },
+ }
+}
+export default function DashboardLayout({ children, message }) {
+ return (
+ <>
+ Dashboard {message}
+ {children}
+ >
+ )
+}
diff --git a/test/e2e/app-dir/app-prefetch/app/dashboard/loading.js b/test/e2e/app-dir/app-prefetch/app/dashboard/loading.js
new file mode 100644
index 000000000000..b515fb9bf3d3
--- /dev/null
+++ b/test/e2e/app-dir/app-prefetch/app/dashboard/loading.js
@@ -0,0 +1,3 @@
+export default function DashboardLoading() {
+ return <>Loading dashboard...>
+}
diff --git a/test/e2e/app-dir/app-prefetch/app/dashboard/page.server.js b/test/e2e/app-dir/app-prefetch/app/dashboard/page.server.js
new file mode 100644
index 000000000000..d22dfdf51e84
--- /dev/null
+++ b/test/e2e/app-dir/app-prefetch/app/dashboard/page.server.js
@@ -0,0 +1,15 @@
+export async function getServerSideProps() {
+ await new Promise((resolve) => setTimeout(resolve, 3000))
+ return {
+ props: {
+ message: 'Welcome to the dashboard',
+ },
+ }
+}
+export default function DashboardPage({ message }) {
+ return (
+ <>
+ {message}
+ >
+ )
+}
diff --git a/test/e2e/app-dir/app-prefetch/app/layout.server.js b/test/e2e/app-dir/app-prefetch/app/layout.server.js
new file mode 100644
index 000000000000..c84b681925eb
--- /dev/null
+++ b/test/e2e/app-dir/app-prefetch/app/layout.server.js
@@ -0,0 +1,10 @@
+export default function Root({ children }) {
+ return (
+
+
+ Hello World
+
+ {children}
+
+ )
+}
diff --git a/test/e2e/app-dir/app-prefetch/app/loading.js b/test/e2e/app-dir/app-prefetch/app/loading.js
new file mode 100644
index 000000000000..a0e67e9acf37
--- /dev/null
+++ b/test/e2e/app-dir/app-prefetch/app/loading.js
@@ -0,0 +1,3 @@
+export default function GlobalLoading() {
+ return <>Loading...>
+}
diff --git a/test/e2e/app-dir/app-prefetch/app/page.server.js b/test/e2e/app-dir/app-prefetch/app/page.server.js
new file mode 100644
index 000000000000..5cb37da2ad8a
--- /dev/null
+++ b/test/e2e/app-dir/app-prefetch/app/page.server.js
@@ -0,0 +1,8 @@
+import Link from 'next/link'
+export default function HomePage() {
+ return (
+ <>
+ To Dashboard
+ >
+ )
+}
diff --git a/test/e2e/app-dir/app-prefetch/next.config.js b/test/e2e/app-dir/app-prefetch/next.config.js
new file mode 100644
index 000000000000..b76b309cf1e3
--- /dev/null
+++ b/test/e2e/app-dir/app-prefetch/next.config.js
@@ -0,0 +1,8 @@
+module.exports = {
+ experimental: {
+ appDir: true,
+ serverComponents: true,
+ legacyBrowsers: false,
+ browsersListForSwc: true,
+ },
+}
diff --git a/test/e2e/app-dir/app-prefetch/pages/.gitkeep b/test/e2e/app-dir/app-prefetch/pages/.gitkeep
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/test/e2e/app-dir/app/app/link-hard-push/[id]/page.server.js b/test/e2e/app-dir/app/app/link-hard-push/[id]/page.server.js
new file mode 100644
index 000000000000..c440f0582c33
--- /dev/null
+++ b/test/e2e/app-dir/app/app/link-hard-push/[id]/page.server.js
@@ -0,0 +1,14 @@
+import Link from 'next/link'
+import { nanoid } from 'nanoid'
+
+export default function Page({ params }) {
+ const other = params.id === '123' ? '456' : '123'
+ return (
+ <>
+ {nanoid()}
{' '}
+
+ To {other}
+
+ >
+ )
+}
diff --git a/test/e2e/app-dir/app/app/link-hard-push/page.server.js b/test/e2e/app-dir/app/app/link-hard-push/page.server.js
deleted file mode 100644
index 049e5be9c49c..000000000000
--- a/test/e2e/app-dir/app/app/link-hard-push/page.server.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import Link from 'next/link'
-
-export default function Page() {
- return (
-
- With ID
-
- )
-}
diff --git a/test/e2e/app-dir/app/app/link-hard-replace/[id]/page.server.js b/test/e2e/app-dir/app/app/link-hard-replace/[id]/page.server.js
new file mode 100644
index 000000000000..c90e93f74c78
--- /dev/null
+++ b/test/e2e/app-dir/app/app/link-hard-replace/[id]/page.server.js
@@ -0,0 +1,14 @@
+import Link from 'next/link'
+import { nanoid } from 'nanoid'
+
+export default function Page({ params }) {
+ const other = params.id === '123' ? '456' : '123'
+ return (
+ <>
+ {nanoid()}
{' '}
+
+ To {other}
+
+ >
+ )
+}
diff --git a/test/e2e/app-dir/app/app/link-soft-push/page.server.js b/test/e2e/app-dir/app/app/link-soft-push/page.server.js
index 3f5d6bde9ebf..049e5be9c49c 100644
--- a/test/e2e/app-dir/app/app/link-soft-push/page.server.js
+++ b/test/e2e/app-dir/app/app/link-soft-push/page.server.js
@@ -2,7 +2,7 @@ import Link from 'next/link'
export default function Page() {
return (
-
+
With ID
)
diff --git a/test/e2e/app-dir/app/app/link-soft-replace/page.server.js b/test/e2e/app-dir/app/app/link-soft-replace/page.server.js
index 4558d664be32..c65758d99076 100644
--- a/test/e2e/app-dir/app/app/link-soft-replace/page.server.js
+++ b/test/e2e/app-dir/app/app/link-soft-replace/page.server.js
@@ -5,10 +5,10 @@ export default function Page() {
return (
<>
{nanoid()}
-
+
Self Link
-
+
Subpage
>
diff --git a/test/e2e/app-dir/app/app/link-soft-replace/subpage/page.server.js b/test/e2e/app-dir/app/app/link-soft-replace/subpage/page.server.js
index 971f2843ed74..6ee17de06508 100644
--- a/test/e2e/app-dir/app/app/link-soft-replace/subpage/page.server.js
+++ b/test/e2e/app-dir/app/app/link-soft-replace/subpage/page.server.js
@@ -2,7 +2,7 @@ import Link from 'next/link'
export default function Page() {
return (
-
+
Self Link
)
diff --git a/test/e2e/app-dir/app/app/navigation/link.client.js b/test/e2e/app-dir/app/app/navigation/link.client.js
new file mode 100644
index 000000000000..545e4e9b8464
--- /dev/null
+++ b/test/e2e/app-dir/app/app/navigation/link.client.js
@@ -0,0 +1,24 @@
+import { useRouter } from 'next/dist/client/components/hooks-client'
+import React from 'react'
+import { useEffect } from 'react'
+export default function HardLink({ href, children, ...props }) {
+ const router = useRouter()
+ useEffect(() => {
+ router.prefetch(href)
+ }, [router, href])
+ return (
+ {
+ e.preventDefault()
+ React.startTransition(() => {
+ router.push(href)
+ router.reload()
+ })
+ }}
+ >
+ {children}
+
+ )
+}
diff --git a/test/e2e/app-dir/app/app/navigation/page.server.js b/test/e2e/app-dir/app/app/navigation/page.server.js
index 1e53433733bb..2640936d496a 100644
--- a/test/e2e/app-dir/app/app/navigation/page.server.js
+++ b/test/e2e/app-dir/app/app/navigation/page.server.js
@@ -1,16 +1,16 @@
import { nanoid } from 'nanoid'
-import Link from 'next/link'
+import Link from './link.client.js'
export default function Page() {
return (
<>
{nanoid()}
hello from /navigation
-
- useCookies
+
+ useCookies
-
-
+
+ useHeaders
>
)
diff --git a/test/e2e/app-dir/app/app/parallel/(new)/@baz/nested-2/page.server.js b/test/e2e/app-dir/app/app/parallel/(new)/@baz/nested-2/page.server.js
new file mode 100644
index 000000000000..05c172f81b1f
--- /dev/null
+++ b/test/e2e/app-dir/app/app/parallel/(new)/@baz/nested-2/page.server.js
@@ -0,0 +1,3 @@
+export default function Page() {
+ return parallel/(new)/@baz/nested/page
+}
diff --git a/test/e2e/app-dir/app/app/parallel/(new)/layout.server.js b/test/e2e/app-dir/app/app/parallel/(new)/layout.server.js
new file mode 100644
index 000000000000..491d122a9633
--- /dev/null
+++ b/test/e2e/app-dir/app/app/parallel/(new)/layout.server.js
@@ -0,0 +1,10 @@
+export default function Layout({ baz }) {
+ return (
+
+ parallel/(new)/layout:
+
+ {baz}
+
+
+ )
+}
diff --git a/test/e2e/app-dir/app/app/parallel/@bar/nested/@a/page.server.js b/test/e2e/app-dir/app/app/parallel/@bar/nested/@a/page.server.js
new file mode 100644
index 000000000000..d1c6fc71e12e
--- /dev/null
+++ b/test/e2e/app-dir/app/app/parallel/@bar/nested/@a/page.server.js
@@ -0,0 +1,3 @@
+export default function Page() {
+ return parallel/@bar/nested/@a/page
+}
diff --git a/test/e2e/app-dir/app/app/parallel/@bar/nested/@b/page.server.js b/test/e2e/app-dir/app/app/parallel/@bar/nested/@b/page.server.js
new file mode 100644
index 000000000000..15ef0b7a3992
--- /dev/null
+++ b/test/e2e/app-dir/app/app/parallel/@bar/nested/@b/page.server.js
@@ -0,0 +1,3 @@
+export default function Page() {
+ return parallel/@bar/nested/@b/page
+}
diff --git a/test/e2e/app-dir/app/app/parallel/@bar/nested/layout.server.js b/test/e2e/app-dir/app/app/parallel/@bar/nested/layout.server.js
new file mode 100644
index 000000000000..4ba7b399385d
--- /dev/null
+++ b/test/e2e/app-dir/app/app/parallel/@bar/nested/layout.server.js
@@ -0,0 +1,16 @@
+export default function Parallel({ a, b, children }) {
+ return (
+
+ parallel/@bar/nested/layout
+
+ {a}
+
+
+ {b}
+
+
+ {children}
+
+
+ )
+}
diff --git a/test/e2e/app-dir/app/app/parallel/@bar/page.server.js b/test/e2e/app-dir/app/app/parallel/@bar/page.server.js
new file mode 100644
index 000000000000..568f5ed06461
--- /dev/null
+++ b/test/e2e/app-dir/app/app/parallel/@bar/page.server.js
@@ -0,0 +1,3 @@
+export default function Page() {
+ return Bar
+}
diff --git a/test/e2e/app-dir/app/app/parallel/@foo/nested/@a/page.server.js b/test/e2e/app-dir/app/app/parallel/@foo/nested/@a/page.server.js
new file mode 100644
index 000000000000..31c604844adb
--- /dev/null
+++ b/test/e2e/app-dir/app/app/parallel/@foo/nested/@a/page.server.js
@@ -0,0 +1,3 @@
+export default function Page() {
+ return parallel/@foo/nested/@a/page
+}
diff --git a/test/e2e/app-dir/app/app/parallel/@foo/nested/@b/page.server.js b/test/e2e/app-dir/app/app/parallel/@foo/nested/@b/page.server.js
new file mode 100644
index 000000000000..79481da1a03a
--- /dev/null
+++ b/test/e2e/app-dir/app/app/parallel/@foo/nested/@b/page.server.js
@@ -0,0 +1,3 @@
+export default function Page() {
+ return parallel/@foo/nested/@b/page
+}
diff --git a/test/e2e/app-dir/app/app/parallel/@foo/nested/layout.server.js b/test/e2e/app-dir/app/app/parallel/@foo/nested/layout.server.js
new file mode 100644
index 000000000000..19d532a37424
--- /dev/null
+++ b/test/e2e/app-dir/app/app/parallel/@foo/nested/layout.server.js
@@ -0,0 +1,16 @@
+export default function Parallel({ a, b, children }) {
+ return (
+
+ parallel/@foo/nested/layout
+
+ {a}
+
+
+ {b}
+
+
+ {children}
+
+
+ )
+}
diff --git a/test/e2e/app-dir/app/app/parallel/@foo/page.server.js b/test/e2e/app-dir/app/app/parallel/@foo/page.server.js
new file mode 100644
index 000000000000..9e30ce2b2bc3
--- /dev/null
+++ b/test/e2e/app-dir/app/app/parallel/@foo/page.server.js
@@ -0,0 +1,3 @@
+export default function Page() {
+ return Foo
+}
diff --git a/test/e2e/app-dir/app/app/parallel/layout.server.js b/test/e2e/app-dir/app/app/parallel/layout.server.js
new file mode 100644
index 000000000000..a1474ba6d07a
--- /dev/null
+++ b/test/e2e/app-dir/app/app/parallel/layout.server.js
@@ -0,0 +1,18 @@
+import './style.css'
+
+export default function Parallel({ foo, bar, children }) {
+ return (
+
+ parallel/layout:
+
+ {foo}
+
+
+ {bar}
+
+
+ {children}
+
+
+ )
+}
diff --git a/test/e2e/app-dir/app/app/parallel/nested/page.server.js b/test/e2e/app-dir/app/app/parallel/nested/page.server.js
new file mode 100644
index 000000000000..d7992d71980e
--- /dev/null
+++ b/test/e2e/app-dir/app/app/parallel/nested/page.server.js
@@ -0,0 +1,3 @@
+export default function Page() {
+ return parallel/nested/page
+}
diff --git a/test/e2e/app-dir/app/app/parallel/style.css b/test/e2e/app-dir/app/app/parallel/style.css
new file mode 100644
index 000000000000..723ece56ac88
--- /dev/null
+++ b/test/e2e/app-dir/app/app/parallel/style.css
@@ -0,0 +1,15 @@
+div {
+ font-size: 16px;
+}
+
+.parallel {
+ border: 1px solid;
+ margin: 10px;
+}
+
+.parallel::before {
+ content: attr(title);
+ background: black;
+ color: white;
+ padding: 1px;
+}
diff --git a/test/e2e/app-dir/index.test.ts b/test/e2e/app-dir/index.test.ts
index 51d41c4931d9..6ff89b275888 100644
--- a/test/e2e/app-dir/index.test.ts
+++ b/test/e2e/app-dir/index.test.ts
@@ -273,67 +273,80 @@ describe('app dir', () => {
}
})
+ it('should match parallel routes', async () => {
+ const html = await renderViaHTTP(next.url, '/parallel/nested')
+ expect(html).toContain('parallel/layout')
+ expect(html).toContain('parallel/@foo/nested/layout')
+ expect(html).toContain('parallel/@foo/nested/@a/page')
+ expect(html).toContain('parallel/@foo/nested/@b/page')
+ expect(html).toContain('parallel/@bar/nested/layout')
+ expect(html).toContain('parallel/@bar/nested/@a/page')
+ expect(html).toContain('parallel/@bar/nested/@b/page')
+ expect(html).toContain('parallel/nested/page')
+ })
+
+ it('should match parallel routes in route groups', async () => {
+ const html = await renderViaHTTP(next.url, '/parallel/nested-2')
+ expect(html).toContain('parallel/layout')
+ expect(html).toContain('parallel/(new)/layout')
+ expect(html).toContain('parallel/(new)/@baz/nested/page')
+ })
+
describe('', () => {
- // TODO-APP: fix development test
- it.skip('should hard push', async () => {
- const browser = await webdriver(next.url, '/link-hard-push')
+ it('should hard push', async () => {
+ const browser = await webdriver(next.url, '/link-hard-push/123')
try {
// Click the link on the page, and verify that the history entry was
// added.
expect(await browser.eval('window.history.length')).toBe(2)
await browser.elementById('link').click()
- await browser.waitForElementByCss('#render-id')
+ await browser.waitForElementByCss('#render-id-456')
expect(await browser.eval('window.history.length')).toBe(3)
// Get the id on the rendered page.
- const firstID = await browser.elementById('render-id').text()
+ const firstID = await browser.elementById('render-id-456').text()
// Go back, and redo the navigation by clicking the link.
await browser.back()
await browser.elementById('link').click()
- await browser.waitForElementByCss('#render-id')
+ await browser.waitForElementByCss('#render-id-456')
// Get the id again, and compare, they should not be the same.
- const secondID = await browser.elementById('render-id').text()
+ const secondID = await browser.elementById('render-id-456').text()
expect(secondID).not.toBe(firstID)
} finally {
await browser.close()
}
})
- // TODO-APP: fix development test
- it.skip('should hard replace', async () => {
- const browser = await webdriver(next.url, '/link-hard-replace')
+ it('should hard replace', async () => {
+ const browser = await webdriver(next.url, '/link-hard-replace/123')
try {
- // Get the render ID so we can compare it.
- const firstID = await browser.elementById('render-id').text()
-
// Click the link on the page, and verify that the history entry was NOT
// added.
expect(await browser.eval('window.history.length')).toBe(2)
- await browser.elementById('self-link').click()
- await browser.waitForElementByCss('#render-id')
+ await browser.elementById('link').click()
+ await browser.waitForElementByCss('#render-id-456')
expect(await browser.eval('window.history.length')).toBe(2)
// Get the date again, and compare, they should not be the same.
- const secondID = await browser.elementById('render-id').text()
- expect(secondID).not.toBe(firstID)
+ const firstId = await browser.elementById('render-id-456').text()
// Navigate to the subpage, verify that the history entry was NOT added.
- await browser.elementById('subpage-link').click()
- await browser.waitForElementByCss('#back-link')
+ await browser.elementById('link').click()
+ await browser.waitForElementByCss('#render-id-123')
expect(await browser.eval('window.history.length')).toBe(2)
// Navigate back again, verify that the history entry was NOT added.
- await browser.elementById('back-link').click()
- await browser.waitForElementByCss('#render-id')
+ await browser.elementById('link').click()
+ await browser.waitForElementByCss('#render-id-456')
expect(await browser.eval('window.history.length')).toBe(2)
// Get the date again, and compare, they should not be the same.
- const thirdID = await browser.elementById('render-id').text()
- expect(thirdID).not.toBe(secondID)
+ const secondId = await browser.elementById('render-id-456').text()
+ expect(firstId).not.toBe(secondId)
} finally {
await browser.close()
}
diff --git a/test/e2e/app-dir/rsc-basic.test.ts b/test/e2e/app-dir/rsc-basic.test.ts
index 4b9b3471992a..c9996fe5ec0d 100644
--- a/test/e2e/app-dir/rsc-basic.test.ts
+++ b/test/e2e/app-dir/rsc-basic.test.ts
@@ -119,7 +119,11 @@ describe('app dir - react server components', () => {
page.on('request', (request) => {
requestsCount++
const url = request.url()
- if (/\?__flight__=1/.test(url)) {
+ if (
+ url.includes('__flight__=1') &&
+ // Prefetches also include `__flight__`
+ !url.includes('__flight_prefetch__=1')
+ ) {
hasFlightRequest = true
}
})
@@ -231,7 +235,11 @@ describe('app dir - react server components', () => {
beforePageLoad(page) {
page.on('request', (request) => {
const url = request.url()
- if (/\?__flight__=1/.test(url)) {
+ if (
+ url.includes('__flight__=1') &&
+ // Prefetches also include `__flight__`
+ !url.includes('__flight_prefetch__=1')
+ ) {
hasFlightRequest = true
}
})
diff --git a/test/e2e/app-dir/rsc-basic/app/next-api/link/page.server.js b/test/e2e/app-dir/rsc-basic/app/next-api/link/page.server.js
index 280b98b735bb..50228a0988c2 100644
--- a/test/e2e/app-dir/rsc-basic/app/next-api/link/page.server.js
+++ b/test/e2e/app-dir/rsc-basic/app/next-api/link/page.server.js
@@ -17,7 +17,6 @@ export default function LinkPage({ queryId }) {
}
export function getServerSideProps(ctx) {
- // FIXME: query is missing
const { searchParams } = ctx
return {
props: {
diff --git a/test/integration/image-future/base-path/pages/static-img.js b/test/integration/image-future/base-path/pages/static-img.js
index d5ce76c12898..da76ca22f358 100644
--- a/test/integration/image-future/base-path/pages/static-img.js
+++ b/test/integration/image-future/base-path/pages/static-img.js
@@ -10,6 +10,7 @@ import testSVG from '../public/test.svg'
import testGIF from '../public/test.gif'
import testBMP from '../public/test.bmp'
import testICO from '../public/test.ico'
+import widePNG from '../public/wide.png'
import TallImage from '../components/TallImage'
@@ -19,7 +20,14 @@ const Page = () => {
-
+
+
+
{
expect(img.attr('width')).toBe('400')
expect(img.attr('height')).toBe('300')
})
- it('Should allow provided width and height to override intrinsic', async () => {
- const img = $('#defined-size-static')
+ it('should use width and height prop to override import', async () => {
+ const img = $('#defined-width-and-height')
expect(img.attr('width')).toBe('150')
expect(img.attr('height')).toBe('150')
})
+ it('should use height prop to adjust both width and height', async () => {
+ const img = $('#defined-height-only')
+ expect(img.attr('width')).toBe('600')
+ expect(img.attr('height')).toBe('350')
+ })
+ it('should use width prop to adjust both width and height', async () => {
+ const img = $('#defined-width-only')
+ expect(img.attr('width')).toBe('400')
+ expect(img.attr('height')).toBe('233')
+ })
it('Should add a blur placeholder a statically imported jpg', async () => {
const style = $('#basic-static').attr('style')
diff --git a/test/integration/image-future/default/pages/static-img.js b/test/integration/image-future/default/pages/static-img.js
index 472c5906387e..26c2e5a55fbc 100644
--- a/test/integration/image-future/default/pages/static-img.js
+++ b/test/integration/image-future/default/pages/static-img.js
@@ -10,6 +10,7 @@ import testSVG from '../public/test.svg'
import testGIF from '../public/test.gif'
import testBMP from '../public/test.bmp'
import testICO from '../public/test.ico'
+import widePNG from '../public/wide.png'
import TallImage from '../components/TallImage'
@@ -19,7 +20,14 @@ const Page = () => {
-
+
+
+
{
expect(img.attr('width')).toBe('400')
expect(img.attr('height')).toBe('300')
})
- it('Should allow provided width and height to override intrinsic', async () => {
- const img = $('#defined-size-static')
+ it('should use width and height prop to override import', async () => {
+ const img = $('#defined-width-and-height')
expect(img.attr('width')).toBe('150')
expect(img.attr('height')).toBe('150')
})
+ it('should use height prop to adjust both width and height', async () => {
+ const img = $('#defined-height-only')
+ expect(img.attr('width')).toBe('600')
+ expect(img.attr('height')).toBe('350')
+ })
+ it('should use width prop to adjust both width and height', async () => {
+ const img = $('#defined-width-only')
+ expect(img.attr('width')).toBe('400')
+ expect(img.attr('height')).toBe('233')
+ })
it('Should add a blur placeholder a statically imported jpg', async () => {
const style = $('#basic-static').attr('style')
diff --git a/test/lib/next-webdriver.ts b/test/lib/next-webdriver.ts
index a2d3ab211321..72fdcb2445aa 100644
--- a/test/lib/next-webdriver.ts
+++ b/test/lib/next-webdriver.ts
@@ -116,7 +116,10 @@ export default async function webdriver(
// if it's not a Next.js app return
if (
- document.documentElement.innerHTML.indexOf('__NEXT_DATA__') === -1
+ document.documentElement.innerHTML.indexOf('__NEXT_DATA__') === -1 &&
+ // @ts-ignore next exists on window if it's a Next.js page.
+ typeof ((window as any).next && (window as any).next.version) ===
+ 'undefined'
) {
console.log('Not a next.js page, resolving hydrate check')
callback()