318 lines
10 KiB
TypeScript
318 lines
10 KiB
TypeScript
import { test, expect } from "../fixtures"
|
|
import { openSettings, closeDialog, withSession } from "../actions"
|
|
import { keybindButtonSelector } from "../selectors"
|
|
import { modKey } from "../utils"
|
|
|
|
test("changing sidebar toggle keybind works", async ({ page, gotoSession }) => {
|
|
await gotoSession()
|
|
|
|
const dialog = await openSettings(page)
|
|
await dialog.getByRole("tab", { name: "Shortcuts" }).click()
|
|
|
|
const keybindButton = dialog.locator(keybindButtonSelector("sidebar.toggle"))
|
|
await expect(keybindButton).toBeVisible()
|
|
|
|
const initialKeybind = await keybindButton.textContent()
|
|
expect(initialKeybind).toContain("B")
|
|
|
|
await keybindButton.click()
|
|
await expect(keybindButton).toHaveText(/press/i)
|
|
|
|
await page.keyboard.press(`${modKey}+Shift+KeyH`)
|
|
await page.waitForTimeout(100)
|
|
|
|
const newKeybind = await keybindButton.textContent()
|
|
expect(newKeybind).toContain("H")
|
|
|
|
const stored = await page.evaluate(() => {
|
|
const raw = localStorage.getItem("settings.v3")
|
|
return raw ? JSON.parse(raw) : null
|
|
})
|
|
expect(stored?.keybinds?.["sidebar.toggle"]).toBe("mod+shift+h")
|
|
|
|
await closeDialog(page, dialog)
|
|
|
|
const main = page.locator("main")
|
|
const initialClasses = (await main.getAttribute("class")) ?? ""
|
|
const initiallyClosed = initialClasses.includes("xl:border-l")
|
|
|
|
await page.keyboard.press(`${modKey}+Shift+H`)
|
|
await page.waitForTimeout(100)
|
|
|
|
const afterToggleClasses = (await main.getAttribute("class")) ?? ""
|
|
const afterToggleClosed = afterToggleClasses.includes("xl:border-l")
|
|
expect(afterToggleClosed).toBe(!initiallyClosed)
|
|
|
|
await page.keyboard.press(`${modKey}+Shift+H`)
|
|
await page.waitForTimeout(100)
|
|
|
|
const finalClasses = (await main.getAttribute("class")) ?? ""
|
|
const finalClosed = finalClasses.includes("xl:border-l")
|
|
expect(finalClosed).toBe(initiallyClosed)
|
|
})
|
|
|
|
test("resetting all keybinds to defaults works", async ({ page, gotoSession }) => {
|
|
await page.addInitScript(() => {
|
|
localStorage.setItem("settings.v3", JSON.stringify({ keybinds: { "sidebar.toggle": "mod+shift+x" } }))
|
|
})
|
|
|
|
await gotoSession()
|
|
|
|
const dialog = await openSettings(page)
|
|
await dialog.getByRole("tab", { name: "Shortcuts" }).click()
|
|
|
|
const keybindButton = dialog.locator(keybindButtonSelector("sidebar.toggle"))
|
|
await expect(keybindButton).toBeVisible()
|
|
|
|
const customKeybind = await keybindButton.textContent()
|
|
expect(customKeybind).toContain("X")
|
|
|
|
const resetButton = dialog.getByRole("button", { name: "Reset to defaults" })
|
|
await expect(resetButton).toBeVisible()
|
|
await expect(resetButton).toBeEnabled()
|
|
await resetButton.click()
|
|
await page.waitForTimeout(100)
|
|
|
|
const restoredKeybind = await keybindButton.textContent()
|
|
expect(restoredKeybind).toContain("B")
|
|
|
|
const stored = await page.evaluate(() => {
|
|
const raw = localStorage.getItem("settings.v3")
|
|
return raw ? JSON.parse(raw) : null
|
|
})
|
|
expect(stored?.keybinds?.["sidebar.toggle"]).toBeUndefined()
|
|
|
|
await closeDialog(page, dialog)
|
|
})
|
|
|
|
test("clearing a keybind works", async ({ page, gotoSession }) => {
|
|
await gotoSession()
|
|
|
|
const dialog = await openSettings(page)
|
|
await dialog.getByRole("tab", { name: "Shortcuts" }).click()
|
|
|
|
const keybindButton = dialog.locator(keybindButtonSelector("sidebar.toggle"))
|
|
await expect(keybindButton).toBeVisible()
|
|
|
|
const initialKeybind = await keybindButton.textContent()
|
|
expect(initialKeybind).toContain("B")
|
|
|
|
await keybindButton.click()
|
|
await expect(keybindButton).toHaveText(/press/i)
|
|
|
|
await page.keyboard.press("Delete")
|
|
await page.waitForTimeout(100)
|
|
|
|
const clearedKeybind = await keybindButton.textContent()
|
|
expect(clearedKeybind).toMatch(/unassigned|press/i)
|
|
|
|
const stored = await page.evaluate(() => {
|
|
const raw = localStorage.getItem("settings.v3")
|
|
return raw ? JSON.parse(raw) : null
|
|
})
|
|
expect(stored?.keybinds?.["sidebar.toggle"]).toBe("none")
|
|
|
|
await closeDialog(page, dialog)
|
|
|
|
await page.keyboard.press(`${modKey}+B`)
|
|
await page.waitForTimeout(100)
|
|
|
|
const stillOnSession = page.url().includes("/session")
|
|
expect(stillOnSession).toBe(true)
|
|
})
|
|
|
|
test("changing settings open keybind works", async ({ page, gotoSession }) => {
|
|
await gotoSession()
|
|
|
|
const dialog = await openSettings(page)
|
|
await dialog.getByRole("tab", { name: "Shortcuts" }).click()
|
|
|
|
const keybindButton = dialog.locator(keybindButtonSelector("settings.open"))
|
|
await expect(keybindButton).toBeVisible()
|
|
|
|
const initialKeybind = await keybindButton.textContent()
|
|
expect(initialKeybind).toContain(",")
|
|
|
|
await keybindButton.click()
|
|
await expect(keybindButton).toHaveText(/press/i)
|
|
|
|
await page.keyboard.press(`${modKey}+Slash`)
|
|
await page.waitForTimeout(100)
|
|
|
|
const newKeybind = await keybindButton.textContent()
|
|
expect(newKeybind).toContain("/")
|
|
|
|
const stored = await page.evaluate(() => {
|
|
const raw = localStorage.getItem("settings.v3")
|
|
return raw ? JSON.parse(raw) : null
|
|
})
|
|
expect(stored?.keybinds?.["settings.open"]).toBe("mod+/")
|
|
|
|
await closeDialog(page, dialog)
|
|
|
|
const settingsDialog = page.getByRole("dialog")
|
|
await expect(settingsDialog).toHaveCount(0)
|
|
|
|
await page.keyboard.press(`${modKey}+Slash`)
|
|
await page.waitForTimeout(100)
|
|
|
|
await expect(settingsDialog).toBeVisible()
|
|
|
|
await closeDialog(page, settingsDialog)
|
|
})
|
|
|
|
test("changing new session keybind works", async ({ page, sdk, gotoSession }) => {
|
|
await withSession(sdk, "test session for keybind", async (session) => {
|
|
await gotoSession(session.id)
|
|
|
|
const initialUrl = page.url()
|
|
expect(initialUrl).toContain(`/session/${session.id}`)
|
|
|
|
const dialog = await openSettings(page)
|
|
await dialog.getByRole("tab", { name: "Shortcuts" }).click()
|
|
|
|
const keybindButton = dialog.locator(keybindButtonSelector("session.new"))
|
|
await expect(keybindButton).toBeVisible()
|
|
|
|
await keybindButton.click()
|
|
await expect(keybindButton).toHaveText(/press/i)
|
|
|
|
await page.keyboard.press(`${modKey}+Shift+KeyN`)
|
|
await page.waitForTimeout(100)
|
|
|
|
const newKeybind = await keybindButton.textContent()
|
|
expect(newKeybind).toContain("N")
|
|
|
|
const stored = await page.evaluate(() => {
|
|
const raw = localStorage.getItem("settings.v3")
|
|
return raw ? JSON.parse(raw) : null
|
|
})
|
|
expect(stored?.keybinds?.["session.new"]).toBe("mod+shift+n")
|
|
|
|
await closeDialog(page, dialog)
|
|
|
|
await page.keyboard.press(`${modKey}+Shift+N`)
|
|
await page.waitForTimeout(200)
|
|
|
|
const newUrl = page.url()
|
|
expect(newUrl).toMatch(/\/session\/?$/)
|
|
expect(newUrl).not.toContain(session.id)
|
|
})
|
|
})
|
|
|
|
test("changing file open keybind works", async ({ page, gotoSession }) => {
|
|
await gotoSession()
|
|
|
|
const dialog = await openSettings(page)
|
|
await dialog.getByRole("tab", { name: "Shortcuts" }).click()
|
|
|
|
const keybindButton = dialog.locator(keybindButtonSelector("file.open"))
|
|
await expect(keybindButton).toBeVisible()
|
|
|
|
const initialKeybind = await keybindButton.textContent()
|
|
expect(initialKeybind).toContain("P")
|
|
|
|
await keybindButton.click()
|
|
await expect(keybindButton).toHaveText(/press/i)
|
|
|
|
await page.keyboard.press(`${modKey}+Shift+KeyF`)
|
|
await page.waitForTimeout(100)
|
|
|
|
const newKeybind = await keybindButton.textContent()
|
|
expect(newKeybind).toContain("F")
|
|
|
|
const stored = await page.evaluate(() => {
|
|
const raw = localStorage.getItem("settings.v3")
|
|
return raw ? JSON.parse(raw) : null
|
|
})
|
|
expect(stored?.keybinds?.["file.open"]).toBe("mod+shift+f")
|
|
|
|
await closeDialog(page, dialog)
|
|
|
|
const filePickerDialog = page.getByRole("dialog").filter({ has: page.getByPlaceholder(/search files/i) })
|
|
await expect(filePickerDialog).toHaveCount(0)
|
|
|
|
await page.keyboard.press(`${modKey}+Shift+F`)
|
|
await page.waitForTimeout(100)
|
|
|
|
await expect(filePickerDialog).toBeVisible()
|
|
|
|
await page.keyboard.press("Escape")
|
|
await expect(filePickerDialog).toHaveCount(0)
|
|
})
|
|
|
|
test("changing terminal toggle keybind works", async ({ page, gotoSession }) => {
|
|
await gotoSession()
|
|
|
|
const dialog = await openSettings(page)
|
|
await dialog.getByRole("tab", { name: "Shortcuts" }).click()
|
|
|
|
const keybindButton = dialog.locator(keybindButtonSelector("terminal.toggle"))
|
|
await expect(keybindButton).toBeVisible()
|
|
|
|
await keybindButton.click()
|
|
await expect(keybindButton).toHaveText(/press/i)
|
|
|
|
await page.keyboard.press(`${modKey}+KeyY`)
|
|
await page.waitForTimeout(100)
|
|
|
|
const newKeybind = await keybindButton.textContent()
|
|
expect(newKeybind).toContain("Y")
|
|
|
|
const stored = await page.evaluate(() => {
|
|
const raw = localStorage.getItem("settings.v3")
|
|
return raw ? JSON.parse(raw) : null
|
|
})
|
|
expect(stored?.keybinds?.["terminal.toggle"]).toBe("mod+y")
|
|
|
|
await closeDialog(page, dialog)
|
|
|
|
await page.keyboard.press(`${modKey}+Y`)
|
|
await page.waitForTimeout(100)
|
|
|
|
const pageStable = await page.evaluate(() => document.readyState === "complete")
|
|
expect(pageStable).toBe(true)
|
|
})
|
|
|
|
test("changing command palette keybind works", async ({ page, gotoSession }) => {
|
|
await gotoSession()
|
|
|
|
const dialog = await openSettings(page)
|
|
await dialog.getByRole("tab", { name: "Shortcuts" }).click()
|
|
|
|
const keybindButton = dialog.locator(keybindButtonSelector("command.palette"))
|
|
await expect(keybindButton).toBeVisible()
|
|
|
|
const initialKeybind = await keybindButton.textContent()
|
|
expect(initialKeybind).toContain("P")
|
|
|
|
await keybindButton.click()
|
|
await expect(keybindButton).toHaveText(/press/i)
|
|
|
|
await page.keyboard.press(`${modKey}+Shift+KeyK`)
|
|
await page.waitForTimeout(100)
|
|
|
|
const newKeybind = await keybindButton.textContent()
|
|
expect(newKeybind).toContain("K")
|
|
|
|
const stored = await page.evaluate(() => {
|
|
const raw = localStorage.getItem("settings.v3")
|
|
return raw ? JSON.parse(raw) : null
|
|
})
|
|
expect(stored?.keybinds?.["command.palette"]).toBe("mod+shift+k")
|
|
|
|
await closeDialog(page, dialog)
|
|
|
|
const palette = page.getByRole("dialog").filter({ has: page.getByRole("textbox").first() })
|
|
await expect(palette).toHaveCount(0)
|
|
|
|
await page.keyboard.press(`${modKey}+Shift+K`)
|
|
await page.waitForTimeout(100)
|
|
|
|
await expect(palette).toBeVisible()
|
|
await expect(palette.getByRole("textbox").first()).toBeVisible()
|
|
|
|
await page.keyboard.press("Escape")
|
|
await expect(palette).toHaveCount(0)
|
|
})
|