Skip to content

Commit b1cf491

Browse files
committed
fix: don't scale the webdriverio page
1 parent 6ab9d48 commit b1cf491

7 files changed

Lines changed: 74 additions & 11 deletions

File tree

packages/ui/client/auto-imports.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ declare global {
155155
const unref: typeof import('vue')['unref']
156156
const unrefElement: typeof import('@vueuse/core')['unrefElement']
157157
const until: typeof import('@vueuse/core')['until']
158+
const updateBrowserPanel: typeof import('./composables/navigation')['updateBrowserPanel']
158159
const useActiveElement: typeof import('@vueuse/core')['useActiveElement']
159160
const useAnimate: typeof import('@vueuse/core')['useAnimate']
160161
const useArrayDifference: typeof import('@vueuse/core')['useArrayDifference']

packages/ui/client/components/BrowserIframe.vue

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
<script setup lang="ts">
22
import type { ViewportSize } from '~/composables/browser'
33
import { viewport } from '~/composables/browser'
4+
import { browserState } from '~/composables/client'
45
import {
56
hideRightPanel,
67
panels,
78
showNavigationPanel,
89
showRightPanel,
10+
updateBrowserPanel,
911
} from '~/composables/navigation'
1012
1113
const sizes: Record<ViewportSize, [width: number, height: number]> = {
@@ -19,16 +21,24 @@ function isViewport(name: ViewportSize) {
1921
return viewport.value[0] === preset[0] && viewport.value[1] === preset[1]
2022
}
2123
24+
const { width: windowWidth, height: windowHeight } = useWindowSize()
25+
2226
async function changeViewport(name: ViewportSize) {
2327
viewport.value = sizes[name]
28+
if (browserState?.provider === 'webdriverio') {
29+
updateBrowserPanel()
30+
}
2431
}
2532
26-
const { width: windowWidth, height: windowHeight } = useWindowSize()
27-
2833
const PADDING_SIDES = 20
2934
const PADDING_TOP = 100
3035
3136
const containerSize = computed(() => {
37+
if (browserState?.provider === 'webdriverio') {
38+
const [width, height] = viewport.value
39+
return { width, height }
40+
}
41+
3242
const parentContainerWidth = windowWidth.value * (panels.details.size / 100)
3343
const parentOffsetWidth = parentContainerWidth * (panels.details.browser / 100)
3444
const containerWidth = parentOffsetWidth - PADDING_SIDES
@@ -40,6 +50,10 @@ const containerSize = computed(() => {
4050
})
4151
4252
const scale = computed(() => {
53+
if (browserState?.provider === 'webdriverio') {
54+
return 1
55+
}
56+
4357
const [iframeWidth, iframeHeight] = viewport.value
4458
const { width: containerWidth, height: containerHeight } = containerSize.value
4559
const widthScale = containerWidth > iframeWidth ? 1 : containerWidth / iframeWidth

packages/ui/client/components/views/ViewConsoleOutput.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ function getTaskName(id?: string) {
3535
/>
3636
</div>
3737
</div>
38-
<p v-else p6>
38+
<div v-else p6>
3939
Log something in your test and it would print here. (e.g. <pre inline>console.log(foo)</pre>)
40-
</p>
40+
</div>
4141
</template>

packages/ui/client/composables/api.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import type { BrowserUI } from 'vitest'
22
import { viewport } from './browser'
3-
import { findById } from './client'
3+
import { browserState, findById } from './client'
4+
import { updateBrowserPanel } from './navigation'
45

56
export const ui: BrowserUI = {
67
setCurrentFileId(fileId: string) {
@@ -11,6 +12,9 @@ export const ui: BrowserUI = {
1112
async setIframeViewport(width: number, height: number) {
1213
// reset the button before setting a custom viewport
1314
viewport.value = [width, height]
15+
if (browserState?.provider === 'webdriverio') {
16+
updateBrowserPanel()
17+
}
1418
await new Promise(r => requestAnimationFrame(r))
1519
},
1620
}

packages/ui/client/composables/client/index.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,8 +137,13 @@ export function runCurrent() {
137137
// for testing during dev
138138
// export const browserState: BrowserRunnerState = {
139139
// files: [],
140-
// config: {},
140+
// config: {
141+
// browser: {
142+
// name: 'chrome',
143+
// }
144+
// } as any,
141145
// type: 'orchestrator',
146+
// provider: 'webdriverio',
142147
// wrapModule: () => {},
143148
// }
144149
// @ts-expect-error not typed global

packages/ui/client/composables/navigation.ts

Lines changed: 43 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import type { File, Task } from '@vitest/runner'
22
import type { Params } from './params'
3-
import { client, config, findById } from './client'
3+
import { browserState, client, config, findById } from './client'
44
import { testRunState } from './client/state'
5+
import { viewport } from './browser'
56
import { activeFileId, lineNumber, selectedTest, viewMode } from './params'
67

78
export const currentModule = ref<File>()
@@ -22,7 +23,13 @@ export const mainSizes = useLocalStorage<[left: number, right: number]>(
2223
)
2324
export const detailSizes = useLocalStorage<[left: number, right: number]>(
2425
'vitest-ui_splitpanes-detailSizes',
25-
[33, 67],
26+
[
27+
// @ts-expect-error "browserState" is not initialised yet
28+
window.__vitest_browser_runner__?.provider === 'webdriverio'
29+
? ((viewport.value[0] / window.outerWidth) * 100)
30+
: 33,
31+
67,
32+
],
2633
)
2734

2835
// live sizes of panels in percentage
@@ -125,14 +132,45 @@ export function hideRightPanel() {
125132
detailSizes.value = [100, 0]
126133
}
127134

135+
function calculateBrowserPanel() {
136+
// we don't scale webdriverio provider because it doesn't support scaling
137+
// TODO: find a way to make this universal - maybe show browser separetly(?)
138+
if (browserState?.provider === 'webdriverio') {
139+
const parentWindow = window.outerWidth * (panels.details.size / 100)
140+
// 40 is 20px padding for each sice
141+
const tabWidth = ((viewport.value[0] + 20) / parentWindow) * 100
142+
return tabWidth
143+
}
144+
return 33
145+
}
146+
128147
export function showRightPanel() {
129-
panels.details.browser = 33
130-
panels.details.main = 67
131-
detailSizes.value = [33, 67]
148+
panels.details.browser = calculateBrowserPanel()
149+
panels.details.main = 100 - panels.details.browser
150+
detailSizes.value = [
151+
panels.details.browser,
152+
panels.details.main,
153+
]
132154
}
133155

134156
export function showNavigationPanel() {
135157
panels.navigation = 33
136158
panels.details.size = 67
137159
mainSizes.value = [33, 67]
138160
}
161+
162+
export function updateBrowserPanel() {
163+
// we don't need to change the size of the browser panel if the right
164+
// panel is hidden
165+
if (panels.details.main === 0) {
166+
return
167+
}
168+
169+
panels.details.browser = calculateBrowserPanel()
170+
panels.details.main = 100 - panels.details.browser
171+
172+
detailSizes.value = [
173+
panels.details.browser,
174+
panels.details.main,
175+
]
176+
}

packages/ui/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,6 @@ export interface BrowserRunnerState {
1818
files: string[]
1919
config: SerializedConfig
2020
type: 'orchestrator'
21+
provider: string
2122
wrapModule: <T>(module: () => T) => T
2223
}

0 commit comments

Comments
 (0)