heynote/tests/block-creation.spec.js

146 lines
4.5 KiB
JavaScript

import {expect, test} from "@playwright/test";
import {HeynotePage} from "./test-utils.js";
let heynotePage
test.beforeEach(async ({page}) => {
heynotePage = new HeynotePage(page)
await heynotePage.goto()
expect((await heynotePage.getBlocks()).length).toBe(1)
await heynotePage.setContent(`
∞∞∞text
Block A
∞∞∞text
Block B
∞∞∞text
Block C`)
await page.waitForTimeout(100);
// check that blocks are created
expect((await heynotePage.getBlocks()).length).toBe(3)
// check that visual block layers are created
await expect(page.locator("css=.heynote-blocks-layer > div")).toHaveCount(3)
});
/* from A */
test("create block before current (A)", async ({page}) => {
// select the first block
await page.locator("body").press("ArrowUp")
await page.locator("body").press("ArrowUp")
await runTest(page, "Alt+Enter", ['D', 'A', 'B', 'C'])
})
test("create block after current (A)", async ({page}) => {
// select the first block
await page.locator("body").press("ArrowUp")
await page.locator("body").press("ArrowUp")
await runTest(page, "Mod+Enter", ['A', 'D', 'B', 'C'])
})
/* from B */
test("create block before current (B)", async ({page}) => {
// select the second block
await page.locator("body").press("ArrowUp")
await runTest(page, "Alt+Enter", ['A', 'D', 'B', 'C'])
})
test("create block after current (B)", async ({page}) => {
// select the second block
await page.locator("body").press("ArrowUp")
await runTest(page, "Mod+Enter", ['A', 'B', 'D', 'C'])
})
/* from C */
test("create block before current (C)", async ({page}) => {
await runTest(page, "Alt+Enter", ['A', 'B', 'D', 'C'])
})
test("create block after current (C)", async ({page}) => {
await runTest(page, "Mod+Enter", ['A', 'B', 'C', 'D'])
})
test("create block before first", async ({page}) => {
await runTest(page, "Alt+Shift+Enter", ['D', 'A', 'B', 'C'])
})
test("create block after last", async ({page}) => {
for (let i = 0; i < 3; i++) {
await page.locator("body").press("ArrowUp")
}
await runTest(page, "Mod+Shift+Enter", ['A', 'B', 'C', 'D'])
})
test("create block before Markdown block", async ({page}) => {
await heynotePage.setContent(`
∞∞∞markdown
# Markdown!
`)
await page.locator("body").press("Alt+Enter")
await page.waitForTimeout(100);
expect(await heynotePage.getCursorPosition()).toBe(11)
})
test("create block before first Markdown block", async ({page}) => {
await heynotePage.setContent(`
∞∞∞markdown
# Markdown!
∞∞∞text
`)
for (let i = 0; i < 5; i++) {
await page.locator("body").press("ArrowDown")
}
await page.locator("body").press("Alt+Shift+Enter")
await page.waitForTimeout(100);
expect(await heynotePage.getCursorPosition()).toBe(11)
})
const runTest = async (page, key, expectedBlocks) => {
// create a new block
await page.locator("body").press(key.replace("Mod", heynotePage.isMac ? "Meta" : "Control"))
await page.waitForTimeout(100);
await page.locator("body").pressSequentially("Block D")
// check that blocks are created
expect((await heynotePage.getBlocks()).length).toBe(4)
// check that the content of each block is correct
for (const expectedBlock of expectedBlocks) {
const index = expectedBlocks.indexOf(expectedBlock);
expect(await heynotePage.getBlockContent(index)).toBe(`Block ${expectedBlock}`)
}
// check that only one block delimiter widget has the class first
await expect(await page.locator("css=.heynote-block-start.first")).toHaveCount(1)
}
test("test custom default block language", async ({ page, browserName }) => {
heynotePage.setContent(`
∞∞∞text
Text block`)
await page.locator("css=.status-block.settings").click()
await page.locator("css=li.tab-editing").click()
await page.locator("css=select.block-language").selectOption("Rust")
await page.locator("body").press("Escape")
await page.locator("body").press((heynotePage.isMac ? "Meta" : "Control") + "+Enter")
expect(await heynotePage.getContent()).toBe(`
∞∞∞text
Text block
∞∞∞rust-a
`)
await page.locator("css=.status-block.settings").click()
await page.locator("css=li.tab-editing").click()
await page.locator("css=input.language-auto-detect").click()
await page.locator("body").press("Escape")
await page.locator("body").press((heynotePage.isMac ? "Meta" : "Control") + "+Enter")
expect(await heynotePage.getContent()).toBe(`
∞∞∞text
Text block
∞∞∞rust-a
∞∞∞rust
`)
})