File tree Expand file tree Collapse file tree 10 files changed +162
-2
lines changed
packages/next/src/next-devtools/dev-overlay
test/development/app-dir/devtools-position Expand file tree Collapse file tree 10 files changed +162
-2
lines changed Original file line number Diff line number Diff line change @@ -251,6 +251,9 @@ function getStackIgnoringStrictMode(stack: string | undefined) {
251
251
const shouldDisableDevIndicator =
252
252
process . env . __NEXT_DEV_INDICATOR ?. toString ( ) === 'false'
253
253
254
+ const devToolsInitialPositionFromNextConfig = ( process . env
255
+ . __NEXT_DEV_INDICATOR_POSITION ?? 'bottom-left' ) as Corners
256
+
254
257
export const INITIAL_OVERLAY_STATE : Omit <
255
258
OverlayState ,
256
259
'isErrorOverlayOpen' | 'routerType'
@@ -272,9 +275,9 @@ export const INITIAL_OVERLAY_STATE: Omit<
272
275
refreshState : { type : 'idle' } ,
273
276
versionInfo : { installed : '0.0.0' , staleness : 'unknown' } ,
274
277
debugInfo : { devtoolsFrontendUrl : undefined } ,
275
- devToolsPosition : 'bottom-left' ,
278
+ devToolsPosition : devToolsInitialPositionFromNextConfig ,
276
279
devToolsPanelPosition : {
277
- [ STORE_KEY_SHARED_PANEL_LOCATION ] : 'bottom-left' ,
280
+ [ STORE_KEY_SHARED_PANEL_LOCATION ] : devToolsInitialPositionFromNextConfig ,
278
281
} ,
279
282
devToolsPanelSize : { } ,
280
283
scale : NEXT_DEV_TOOLS_SCALE . Medium ,
Original file line number Diff line number Diff line change
1
+ import type { ReactNode } from 'react'
2
+
3
+ export default function RootLayout ( { children } : { children : ReactNode } ) {
4
+ return (
5
+ < html >
6
+ < body > { children } </ body >
7
+ </ html >
8
+ )
9
+ }
Original file line number Diff line number Diff line change
1
+ export default function Page ( ) {
2
+ return < p > hello world</ p >
3
+ }
Original file line number Diff line number Diff line change
1
+ import { nextTestSetup } from 'e2e-utils'
2
+ import { getDevIndicatorPosition } from './utils'
3
+
4
+ describe ( 'devtools-position-bottom-left' , ( ) => {
5
+ const { next } = nextTestSetup ( {
6
+ files : __dirname ,
7
+ nextConfig : {
8
+ devIndicators : {
9
+ position : 'bottom-left' ,
10
+ } ,
11
+ } ,
12
+ } )
13
+
14
+ it ( 'should devtools indicator position initially be bottom-left when configured' , async ( ) => {
15
+ const browser = await next . browser ( '/' )
16
+ const style = await getDevIndicatorPosition ( browser )
17
+ expect ( style ) . toContain ( 'bottom: 20px' )
18
+ expect ( style ) . toContain ( 'left: 20px' )
19
+ } )
20
+ } )
Original file line number Diff line number Diff line change
1
+ import { nextTestSetup } from 'e2e-utils'
2
+ import { getDevIndicatorPosition } from './utils'
3
+
4
+ describe ( 'devtools-position-bottom-right' , ( ) => {
5
+ const { next } = nextTestSetup ( {
6
+ files : __dirname ,
7
+ nextConfig : {
8
+ devIndicators : {
9
+ position : 'bottom-right' ,
10
+ } ,
11
+ } ,
12
+ } )
13
+
14
+ it ( 'should devtools indicator position initially be bottom-right when configured' , async ( ) => {
15
+ const browser = await next . browser ( '/' )
16
+ const style = await getDevIndicatorPosition ( browser )
17
+ expect ( style ) . toContain ( 'bottom: 20px' )
18
+ expect ( style ) . toContain ( 'right: 20px' )
19
+ } )
20
+ } )
Original file line number Diff line number Diff line change
1
+ import { nextTestSetup } from 'e2e-utils'
2
+ import { getDevIndicatorPosition } from './utils'
3
+
4
+ describe ( 'devtools-position-default' , ( ) => {
5
+ const { next } = nextTestSetup ( {
6
+ files : __dirname ,
7
+ } )
8
+
9
+ it ( 'should devtools indicator position initially be bottom-left by default' , async ( ) => {
10
+ const browser = await next . browser ( '/' )
11
+ const style = await getDevIndicatorPosition ( browser )
12
+ expect ( style ) . toContain ( 'bottom: 20px' )
13
+ expect ( style ) . toContain ( 'left: 20px' )
14
+ } )
15
+ } )
Original file line number Diff line number Diff line change
1
+ import { nextTestSetup } from 'e2e-utils'
2
+ import { getDevIndicatorPosition } from './utils'
3
+
4
+ describe ( 'devtools-position-persistence' , ( ) => {
5
+ const { next } = nextTestSetup ( {
6
+ files : __dirname ,
7
+ nextConfig : {
8
+ devIndicators : {
9
+ position : 'top-right' ,
10
+ } ,
11
+ } ,
12
+ } )
13
+
14
+ it ( 'should maintain devtools indicator position after navigation' , async ( ) => {
15
+ const browser = await next . browser ( '/' )
16
+
17
+ let style = await getDevIndicatorPosition ( browser )
18
+
19
+ expect ( style ) . toContain ( 'top: 20px' )
20
+ expect ( style ) . toContain ( 'right: 20px' )
21
+
22
+ // Navigate and check devtools indicator position is maintained
23
+ await browser . refresh ( )
24
+ await browser . waitForIdleNetwork ( )
25
+
26
+ style = await getDevIndicatorPosition ( browser )
27
+
28
+ expect ( style ) . toContain ( 'top: 20px' )
29
+ expect ( style ) . toContain ( 'right: 20px' )
30
+ } )
31
+ } )
Original file line number Diff line number Diff line change
1
+ import { nextTestSetup } from 'e2e-utils'
2
+ import { getDevIndicatorPosition } from './utils'
3
+
4
+ describe ( 'devtools-position-top-left' , ( ) => {
5
+ const { next } = nextTestSetup ( {
6
+ files : __dirname ,
7
+ nextConfig : {
8
+ devIndicators : {
9
+ position : 'top-left' ,
10
+ } ,
11
+ } ,
12
+ } )
13
+
14
+ it ( 'should devtools indicator position initially be top-left when configured' , async ( ) => {
15
+ const browser = await next . browser ( '/' )
16
+ const style = await getDevIndicatorPosition ( browser )
17
+ expect ( style ) . toContain ( 'top: 20px' )
18
+ expect ( style ) . toContain ( 'left: 20px' )
19
+ } )
20
+ } )
Original file line number Diff line number Diff line change
1
+ import { nextTestSetup } from 'e2e-utils'
2
+ import { getDevIndicatorPosition } from './utils'
3
+
4
+ describe ( 'devtools-position-top-right' , ( ) => {
5
+ const { next } = nextTestSetup ( {
6
+ files : __dirname ,
7
+ nextConfig : {
8
+ devIndicators : {
9
+ position : 'top-right' ,
10
+ } ,
11
+ } ,
12
+ } )
13
+
14
+ it ( 'should devtools indicator position initially be top-right when configured' , async ( ) => {
15
+ const browser = await next . browser ( '/' )
16
+ const style = await getDevIndicatorPosition ( browser )
17
+ expect ( style ) . toContain ( 'top: 20px' )
18
+ expect ( style ) . toContain ( 'right: 20px' )
19
+ } )
20
+ } )
Original file line number Diff line number Diff line change
1
+ import type { Playwright } from '../../../lib/next-webdriver'
2
+ import { assertHasDevToolsIndicator } from 'next-test-utils'
3
+
4
+ export async function getDevIndicatorPosition ( browser : Playwright ) {
5
+ // assert before eval() to prevent race condition
6
+ await assertHasDevToolsIndicator ( browser )
7
+
8
+ const style = await browser . eval ( ( ) => {
9
+ return (
10
+ [ ] . slice
11
+ . call ( document . querySelectorAll ( 'nextjs-portal' ) )
12
+ . find ( ( p ) => p . shadowRoot . querySelector ( '[data-nextjs-toast]' ) )
13
+ // portal
14
+ ?. shadowRoot ?. querySelector ( '[data-nextjs-toast]' )
15
+ ?. getAttribute ( 'style' ) || ''
16
+ )
17
+ } )
18
+ return style || ''
19
+ }
You can’t perform that action at this time.
0 commit comments