Files
upstream-mirror a774ac673a
Some checks failed
Deploy analytics worker / Deploy analytics worker to ${{ (github.ref == 'refs/heads/production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Failing after 1s
i18n upload strings / Upload latest strings (push) Failing after 1s
Deploy bemo / Deploy bemo to ${{ (github.ref == 'refs/heads/bemo-production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Failing after 1s
Deploy grafana resources / ${{ github.event_name == 'push' && 'Deploy grafana resources' || 'Validate grafana resources (dry run)' }} (push) Failing after 0s
End to end tests (dotcom) / Check for relevant changes (push) Failing after 0s
End to end tests (examples) / Check for relevant changes (push) Failing after 0s
End to end tests (mermaid readability) / Check for relevant changes (push) Failing after 1s
End to end tests (perf) / Check for relevant changes (push) Failing after 0s
Publish editor extensions / Publish editor extensions (push) Failing after 1s
Publish SDK packages / Remove the publish-packages label (push) Has been skipped
Checks / Tests & checks (push) Has been cancelled
Checks / Build all projects (push) Has been cancelled
Deploy templates / Deploy templates (push) Has been cancelled
End to end tests (dotcom) / End to end tests (dotcom) (push) Has been cancelled
End to end tests (mermaid readability) / End to end tests (mermaid readability) (push) Has been cancelled
End to end tests (perf) / End to end tests (perf) (push) Has been cancelled
Deploy .com / Deploy dotcom to ${{ (github.ref == 'refs/heads/production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Has been cancelled
End to end tests (examples) / End to end tests (examples) (push) Has been cancelled
Publish SDK packages / Publish SDK packages (push) Has been cancelled
Publish SDK packages / Tell user released version (push) Has been cancelled
Publish SDK packages / Publishes code templates to separate repositories (push) Has been cancelled
Publish SDK packages / Deploys the template demos with the new SDK version (push) Has been cancelled
snapshot of https://github.com/tldraw/tldraw.git (main, 2026-09-23; blobs > 131072B omitted)
2026-09-23 16:12:52 +05:00

96 lines
2.6 KiB
TypeScript

import { expect } from '@playwright/test'
import type { Locator, Page } from '@playwright/test'
import { sleep } from './helpers'
import { Sidebar } from './Sidebar'
import { step } from './tla-test'
export class Editor {
public readonly sidebarToggle: Locator
private readonly fileName: Locator
private readonly shapes: Locator
private readonly pageMenu: Locator
constructor(
public readonly page: Page,
private readonly sidebar: Sidebar
) {
this.sidebarToggle = this.page.getByTestId('tla-sidebar-toggle')
this.fileName = this.page.getByTestId('tla-file-name')
this.shapes = this.page.locator('.tl-shape')
this.pageMenu = this.page.getByTestId('tla-main-menu')
}
async toggleSidebar() {
await this.sidebarToggle.click()
await sleep(500)
}
@step
async ensureSidebarOpen() {
const visible = await this.sidebar.isVisible()
if (!visible) {
await this.toggleSidebar()
}
await this.sidebar.expectIsVisible()
}
@step
async ensureSidebarClosed() {
const visible = await this.sidebar.isVisible()
if (visible) {
await this.toggleSidebar()
}
await this.sidebar.expectIsNotVisible()
}
async isLoaded() {
await expect(this.sidebarToggle).toBeVisible()
}
async getShapeCount() {
return await this.shapes.count()
}
@step
async expectShapesCount(expected: number, timeout?: number) {
await expect(this.shapes).toHaveCount(expected, { timeout })
}
async getCurrentFileName() {
const text = await this.fileName.innerText()
// The UI replaces spaces with \u00a0 to prevent line-breaking; normalise back.
return text.replace(/\u00a0/g, ' ')
}
@step
async rename(newName: string) {
await this.fileName.click()
await this.page.getByTestId('tla-file-name-input').fill(newName)
await this.page.keyboard.press('Enter')
}
@step
async openPageMenu() {
await this.pageMenu.click()
}
@step
async createNewPage() {
await this.page.getByTestId('page-menu.button').click()
await expect(this.page.getByTestId('page-menu.create')).toBeVisible()
await expect(this.page.getByTestId('page-menu.item').first()).toBeVisible()
const count = await this.page.getByTestId('page-menu.item').count()
await this.page.getByTestId('page-menu.create').click()
await expect(this.page.getByTestId('page-menu.item')).toHaveCount(count + 1)
await this.page.keyboard.press('Enter')
await this.page.keyboard.press('Escape')
}
@step
async createTextShape(text: string) {
await this.page.getByTestId('tools.select').click()
await this.page.locator('.tl-background').click({ clickCount: 2 })
await this.page.locator('div[contenteditable="true"]').fill(text)
}
}