mirror of
https://github.com/streetwriters/notesnook.git
synced 2026-02-24 20:20:21 +01:00
233 lines
6.0 KiB
JavaScript
233 lines
6.0 KiB
JavaScript
const { Page, test, expect } = require("@playwright/test");
|
|
|
|
test.beforeEach(async ({ page, baseURL }) => {
|
|
await page.goto(baseURL);
|
|
});
|
|
|
|
test("add a codeblock", async ({ page }) => {
|
|
await page.waitForSelector("#mytextarea_ifr", { state: "visible" });
|
|
|
|
await page.click('[aria-label="Codeblock"]');
|
|
|
|
const frame = page.frame({
|
|
name: "mytextarea_ifr",
|
|
});
|
|
|
|
await frame.waitForSelector(".hljs");
|
|
|
|
const html = await frame.innerHTML("body");
|
|
expect(html).toMatchSnapshot("codeblock-exists.txt");
|
|
});
|
|
|
|
test("change language to javascript", async ({ page, browser }) => {
|
|
const frame = page.frame({
|
|
name: "mytextarea_ifr",
|
|
});
|
|
|
|
await insertCodeblock(page, frame, "function google() { }");
|
|
|
|
const html = await frame.innerHTML("body");
|
|
|
|
expect(html).toMatchSnapshot("language-js.txt");
|
|
});
|
|
|
|
test("pressing tab in code block adds a tab", async ({ page }) => {
|
|
const frame = page.frame({
|
|
name: "mytextarea_ifr",
|
|
});
|
|
|
|
await insertCodeblock(page, frame);
|
|
await typeCode(page);
|
|
|
|
const code = await frame.innerText("body .hljs");
|
|
expect(code).toMatchSnapshot("tabbed-code.txt");
|
|
});
|
|
|
|
test("code highlights as user types", async ({ page }) => {
|
|
const frame = page.frame({
|
|
name: "mytextarea_ifr",
|
|
});
|
|
|
|
await insertCodeblock(page, frame);
|
|
await typeCode(page);
|
|
await page.waitForTimeout(600);
|
|
|
|
const html = await frame.innerHTML("body .hljs.language-javascript");
|
|
expect(html).toMatchSnapshot("realtime-highlighted-code.txt");
|
|
});
|
|
|
|
test("pressing ctrl + A inside code block doesn't select anything outside", async ({
|
|
page,
|
|
}) => {
|
|
const frame = page.frame({
|
|
name: "mytextarea_ifr",
|
|
});
|
|
|
|
await page.click("#mytextarea_ifr");
|
|
|
|
await page.keyboard.type("Hello world");
|
|
|
|
await insertCodeblock(page, frame);
|
|
await typeCode(page);
|
|
await page.waitForTimeout(600);
|
|
|
|
await page.keyboard.press("Control+A");
|
|
|
|
expect(
|
|
await page.screenshot("#mytextarea_ifr")
|
|
).toMatchSnapshot("code-select-all.png", { threshold: 99 });
|
|
});
|
|
|
|
test("toggle a code block into a paragraph", async ({ page }) => {
|
|
const frame = page.frame({
|
|
name: "mytextarea_ifr",
|
|
});
|
|
|
|
await insertCodeblock(page, frame);
|
|
await typeCode(page);
|
|
await page.waitForTimeout(600);
|
|
|
|
await page.keyboard.press("Control+A");
|
|
|
|
await page.click('[aria-label="Codeblock"]');
|
|
|
|
const html = await frame.innerHTML("body");
|
|
expect(html).toMatchSnapshot("toggled-codeblock-to-paragraph.txt");
|
|
});
|
|
|
|
test("toggle a single line of code into a paragraph", async ({ page }) => {
|
|
const frame = page.frame({
|
|
name: "mytextarea_ifr",
|
|
});
|
|
|
|
await insertCodeblock(page, frame);
|
|
await typeCode(page);
|
|
await page.waitForTimeout(600);
|
|
|
|
await page.keyboard.press("Shift+ArrowUp");
|
|
|
|
await page.click('[aria-label="Codeblock"]');
|
|
|
|
const html = await frame.innerHTML("body");
|
|
expect(html).toMatchSnapshot("toggle-singleline-to-paragraph.txt");
|
|
});
|
|
|
|
test("indent multiple lines", async ({ page }) => {
|
|
const frame = page.frame({
|
|
name: "mytextarea_ifr",
|
|
});
|
|
|
|
await insertCodeblock(page, frame);
|
|
await typeCode(page);
|
|
await page.waitForTimeout(600);
|
|
|
|
await indentMultipleLines(page);
|
|
|
|
const code = await frame.innerText("body .hljs");
|
|
expect(code).toMatchSnapshot("multiline-tabbed-code.txt");
|
|
});
|
|
|
|
test("deindent multiple lines", async ({ page }) => {
|
|
const frame = page.frame({
|
|
name: "mytextarea_ifr",
|
|
});
|
|
|
|
await insertCodeblock(page, frame);
|
|
await typeCode(page);
|
|
await page.waitForTimeout(600);
|
|
|
|
await indentMultipleLines(page);
|
|
|
|
// Go backward three tab spaces
|
|
await page.keyboard.press("Shift+Tab");
|
|
await page.keyboard.press("Shift+Tab");
|
|
await page.keyboard.press("Shift+Tab");
|
|
|
|
const code = await frame.innerText("body .hljs");
|
|
expect(code).toMatchSnapshot("tabbed-code.txt");
|
|
});
|
|
|
|
test("deindenting and then indenting a line shouldn't erase the newline", async ({
|
|
page,
|
|
}) => {
|
|
const frame = page.frame({
|
|
name: "mytextarea_ifr",
|
|
});
|
|
|
|
await insertCodeblock(page, frame);
|
|
await typeCode(page);
|
|
await page.waitForTimeout(600);
|
|
|
|
// go to the beginning of the previous line
|
|
await page.keyboard.press("ArrowUp");
|
|
await page.keyboard.press("Home");
|
|
|
|
// indent the line 3 times
|
|
await page.keyboard.press("Tab");
|
|
await page.keyboard.press("Tab");
|
|
await page.keyboard.press("Tab");
|
|
|
|
// deindent the line 3 times
|
|
await page.keyboard.press("Shift+Tab");
|
|
await page.keyboard.press("Shift+Tab");
|
|
await page.keyboard.press("Shift+Tab");
|
|
|
|
// indent and deindent once
|
|
await page.keyboard.press("Tab");
|
|
await page.keyboard.press("Shift+Tab");
|
|
|
|
const code = await frame.innerText("body .hljs");
|
|
expect(code).toMatchSnapshot("tabbed-code.txt");
|
|
});
|
|
|
|
async function insertCodeblock(page, frame, code) {
|
|
await page.waitForSelector("#mytextarea_ifr", { state: "visible" });
|
|
|
|
await page.click('[aria-label="Codeblock"]');
|
|
|
|
await frame.waitForSelector(".hljs");
|
|
|
|
if (code) await page.type("#mytextarea", code);
|
|
|
|
// open language selector
|
|
await page.click(`.tox-split-button__chevron`);
|
|
|
|
// select language
|
|
await page.click(`[title="Javascript"]`);
|
|
|
|
await frame.waitForSelector(".hljs.language-javascript");
|
|
}
|
|
|
|
async function typeCode(page) {
|
|
await page.keyboard.type("function test() {");
|
|
await page.keyboard.press("Enter");
|
|
// indent
|
|
await page.keyboard.press("Tab");
|
|
await page.keyboard.type(`var test_var = "hello";`);
|
|
await page.keyboard.press("Enter");
|
|
await page.keyboard.type(`var test_var2 = "hello2";`);
|
|
await page.keyboard.press("Enter");
|
|
// deindent
|
|
await page.keyboard.press("Backspace");
|
|
await page.keyboard.press("Backspace");
|
|
await page.keyboard.type("}");
|
|
}
|
|
|
|
async function indentMultipleLines(page) {
|
|
// go to the end of the above line
|
|
await page.keyboard.press("ArrowUp");
|
|
await page.keyboard.press("End");
|
|
|
|
// select 2 lines
|
|
await page.keyboard.press("Shift+ArrowUp");
|
|
await page.keyboard.press("Shift+ArrowUp");
|
|
|
|
// Deselect the last character of the first line
|
|
await page.keyboard.press("Shift+ArrowRight");
|
|
|
|
// Go forward three tab spaces
|
|
await page.keyboard.press("Tab");
|
|
await page.keyboard.press("Tab");
|
|
await page.keyboard.press("Tab");
|
|
}
|