From dc14a6aee0fec20e8bc68b4db7c8b80d1b73db97 Mon Sep 17 00:00:00 2001 From: Tienson Qin Date: Mon, 15 May 2023 23:53:24 +0800 Subject: [PATCH] add e2e tests --- e2e-tests/blockref.spec.ts | 74 ++++++++++++++++++++++++++++++++++++++ e2e-tests/utils.ts | 26 +++++++++++++- 2 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 e2e-tests/blockref.spec.ts diff --git a/e2e-tests/blockref.spec.ts b/e2e-tests/blockref.spec.ts new file mode 100644 index 000000000..b4416ee90 --- /dev/null +++ b/e2e-tests/blockref.spec.ts @@ -0,0 +1,74 @@ +import { expect } from '@playwright/test' +import { test } from './fixtures' +import { createRandomPage, enterNextBlock, modKey, editNthBlock, moveCursorToBeginning, moveCursorToEnd } from './utils' +import { dispatch_kb_events } from './util/keyboard-events' + +// Create a random page with some pre-defined blocks +// - a +// - b +// id:: UUID +// - ((id)) +async function setUpBlocks(page, block) { + await createRandomPage(page) + + await block.mustFill('a') + await block.enterNext() + await block.mustFill('b') + await page.keyboard.press(modKey + '+c') + await page.waitForTimeout(100) + await block.enterNext() + await page.keyboard.press(modKey + '+v') + await page.waitForTimeout(100) +} + +test('backspace at the beginning of a refed block #9406', async ({ page, block }) => { + await setUpBlocks(page, block) + await editNthBlock(page, 1) + await moveCursorToBeginning(page) + await page.keyboard.press('Backspace') + await expect(page.locator('textarea >> nth=0')).toHaveText("ab") + await expect(await block.selectionStart()).toEqual(1) + await expect(page.locator('.block-ref >> text="ab"')).toHaveCount(1); +}) + +test('delete at the end of a prev block before a refed block #9406', async ({ page, block }) => { + await setUpBlocks(page, block) + await editNthBlock(page, 0) + await moveCursorToEnd(page) + await page.keyboard.press('Delete') + await expect(page.locator('textarea >> nth=0')).toHaveText("ab") + await expect(await block.selectionStart()).toEqual(1) + await expect(page.locator('.block-ref >> text="ab"')).toHaveCount(1); +}) + +test('delete selected blocks, block ref should be replaced by content #9406', async ({ page, block }) => { + await setUpBlocks(page, block) + await editNthBlock(page, 0) + await page.waitForTimeout(100) + await page.keyboard.down('Shift') + await page.keyboard.press('ArrowDown') + await page.keyboard.press('ArrowDown') + await page.keyboard.up('Shift') + await block.waitForSelectedBlocks(2) + await page.keyboard.press('Backspace') + await expect(page.locator('.ls-block')).toHaveCount(1) + await editNthBlock(page, 0) + await expect(page.locator('textarea >> nth=0')).toHaveText("b") +}) + +test('delete and undo #9406', async ({ page, block }) => { + await setUpBlocks(page, block) + await editNthBlock(page, 0) + await page.waitForTimeout(100) + await page.keyboard.down('Shift') + await page.keyboard.press('ArrowDown') + await page.keyboard.press('ArrowDown') + await page.keyboard.up('Shift') + await block.waitForSelectedBlocks(2) + await page.keyboard.press('Backspace') + await expect(page.locator('.ls-block')).toHaveCount(1) + await page.keyboard.press(modKey + '+z') + await page.waitForTimeout(100) + await expect(page.locator('.ls-block')).toHaveCount(3) + await expect(page.locator('.block-ref >> text="b"')).toHaveCount(1); +}) diff --git a/e2e-tests/utils.ts b/e2e-tests/utils.ts index 503ea7d63..e61023a8a 100644 --- a/e2e-tests/utils.ts +++ b/e2e-tests/utils.ts @@ -31,6 +31,26 @@ export async function lastBlock(page: Page): Promise { return page.locator('textarea >> nth=0') } +/** + * Move the cursor to the beginning of the current editor + * @param page The Playwright Page object. + */ +export async function moveCursorToBeginning(page: Page): Promise { + await page.press('textarea >> nth=0', modKey + '+a') // select all + await page.press('textarea >> nth=0', 'ArrowLeft') + return page.locator('textarea >> nth=0') +} + +/** + * Move the cursor to the end of the current editor + * @param page The Playwright Page object. + */ +export async function moveCursorToEnd(page: Page): Promise { + await page.press('textarea >> nth=0', modKey + '+a') // select all + await page.press('textarea >> nth=0', 'ArrowRight') + return page.locator('textarea >> nth=0') +} + /** * Press Enter and create the next block. * @param page The Playwright Page object. @@ -155,8 +175,12 @@ export async function loadLocalGraph(page: Page, path: string): Promise { console.log('Graph loaded for ' + path) } +export async function editNthBlock(page: Page, n) { + await page.click(`.ls-block .block-content >> nth=${n}`) +} + export async function editFirstBlock(page: Page) { - await page.click('.ls-block .block-content >> nth=0') + await editNthBlock(page, 0) } /**