mirror of
https://github.com/heyman/heynote.git
synced 2025-01-23 22:38:51 +01:00
Fix bug that could cause auto formatting to fail for the last block.
Add tests for language auto detection and formatting.
This commit is contained in:
parent
6fa956f6ec
commit
bc77fa725a
@ -40,8 +40,8 @@ export const formatBlockContent = async ({ state, dispatch }) => {
|
|||||||
plugins: language.prettier.plugins,
|
plugins: language.prettier.plugins,
|
||||||
tabWidth: state.tabSize,
|
tabWidth: state.tabSize,
|
||||||
}),
|
}),
|
||||||
cursorOffset: cursorPos == block.content.from ? 0 : content.length,
|
|
||||||
}
|
}
|
||||||
|
formattedContent.cursorOffset = cursorPos == block.content.from ? 0 : formattedContent.formatted.length
|
||||||
} else {
|
} else {
|
||||||
formattedContent = await prettier.formatWithCursor(content, {
|
formattedContent = await prettier.formatWithCursor(content, {
|
||||||
cursorOffset: cursorPos - block.content.from,
|
cursorOffset: cursorPos - block.content.from,
|
||||||
@ -62,7 +62,7 @@ export const formatBlockContent = async ({ state, dispatch }) => {
|
|||||||
to: block.content.to,
|
to: block.content.to,
|
||||||
insert: formattedContent.formatted,
|
insert: formattedContent.formatted,
|
||||||
},
|
},
|
||||||
selection: EditorSelection.cursor(block.content.from + formattedContent.cursorOffset),
|
selection: EditorSelection.cursor(block.content.from + Math.min(formattedContent.cursorOffset, formattedContent.formatted.length)),
|
||||||
}, {
|
}, {
|
||||||
userEvent: "input",
|
userEvent: "input",
|
||||||
scrollIntoView: true,
|
scrollIntoView: true,
|
||||||
|
46
tests/formatting.spec.js
Normal file
46
tests/formatting.spec.js
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
import { test, expect } from "@playwright/test";
|
||||||
|
import { HeynotePage } from "./test-utils.js";
|
||||||
|
|
||||||
|
let heynotePage
|
||||||
|
|
||||||
|
test.beforeEach(async ({ page }) => {
|
||||||
|
console.log("beforeEach")
|
||||||
|
heynotePage = new HeynotePage(page)
|
||||||
|
await heynotePage.goto()
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
test("JSON formatting", async ({ page }) => {
|
||||||
|
heynotePage.setContent(`
|
||||||
|
∞∞∞json
|
||||||
|
{"test": 1, "key2": "hey!"}
|
||||||
|
`)
|
||||||
|
expect(await page.locator("css=.status .status-block.lang")).toHaveText("JSON")
|
||||||
|
await page.locator("css=.status-block.format").click()
|
||||||
|
await page.waitForTimeout(100)
|
||||||
|
expect(await heynotePage.getBlockContent(0)).toBe(`{
|
||||||
|
"test": 1,
|
||||||
|
"key2": "hey!"
|
||||||
|
}
|
||||||
|
`)
|
||||||
|
})
|
||||||
|
|
||||||
|
test("JSON formatting (cursor at start)", async ({ page }) => {
|
||||||
|
heynotePage.setContent(`
|
||||||
|
∞∞∞json
|
||||||
|
{"test": 1, "key2": "hey!"}
|
||||||
|
`)
|
||||||
|
expect(await page.locator("css=.status .status-block.lang")).toHaveText("JSON")
|
||||||
|
for (let i=0; i<5; i++) {
|
||||||
|
await page.locator("body").press("ArrowUp")
|
||||||
|
}
|
||||||
|
await page.locator("css=.status-block.format").click()
|
||||||
|
await page.waitForTimeout(100)
|
||||||
|
expect(await heynotePage.getBlockContent(0)).toBe(`{
|
||||||
|
"test": 1,
|
||||||
|
"key2": "hey!"
|
||||||
|
}
|
||||||
|
`)
|
||||||
|
const block = (await heynotePage.getBlocks())[0]
|
||||||
|
expect(await page.evaluate(() => window._heynote_editor.view.state.selection.main.from)).toBe(block.content.from)
|
||||||
|
})
|
41
tests/language-detection.spec.js
Normal file
41
tests/language-detection.spec.js
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
import { test, expect } from "@playwright/test";
|
||||||
|
import { HeynotePage } from "./test-utils.js";
|
||||||
|
|
||||||
|
let heynotePage
|
||||||
|
|
||||||
|
test.beforeEach(async ({ page }) => {
|
||||||
|
console.log("beforeEach")
|
||||||
|
heynotePage = new HeynotePage(page)
|
||||||
|
await heynotePage.goto()
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
test("test valid JSON detection", async ({ page }) => {
|
||||||
|
page.locator("body").pressSequentially(`
|
||||||
|
{"test": 1, "key2": "hey!"}
|
||||||
|
`)
|
||||||
|
await page.waitForTimeout(200);
|
||||||
|
expect(await page.locator("css=.status .status-block.lang")).toHaveText("JSON (auto)")
|
||||||
|
const block = (await heynotePage.getBlocks())[0]
|
||||||
|
expect(block.language.name).toBe("json")
|
||||||
|
expect(block.language.auto).toBeTruthy()
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
test("python detection", async ({ page }) => {
|
||||||
|
page.locator("body").pressSequentially(`
|
||||||
|
# import complex math module
|
||||||
|
import cmath
|
||||||
|
|
||||||
|
# calculate the discriminant
|
||||||
|
d = (b**2) - (4*a*c)
|
||||||
|
|
||||||
|
# find two solutions
|
||||||
|
sol1 = (-b-cmath.sqrt(d))/(2*a)
|
||||||
|
sol2 = (-b+cmath.sqrt(d))/(2*a)
|
||||||
|
|
||||||
|
print('The solution are {0} and {1}'.format(sol1,sol2))
|
||||||
|
`)
|
||||||
|
await page.waitForTimeout(1000);
|
||||||
|
expect(await page.locator("css=.status .status-block.lang")).toHaveText("Python (auto)")
|
||||||
|
})
|
Loading…
Reference in New Issue
Block a user