|
@@ -3,8 +3,11 @@ import { EditorView } from "prosemirror-view"
|
|
|
import { afterEach, beforeEach, describe, expect, it } from "vitest"
|
|
import { afterEach, beforeEach, describe, expect, it } from "vitest"
|
|
|
import {
|
|
import {
|
|
|
insertBlockMath,
|
|
insertBlockMath,
|
|
|
|
|
+ insertBlockRef,
|
|
|
insertInlineMath,
|
|
insertInlineMath,
|
|
|
insertLink,
|
|
insertLink,
|
|
|
|
|
+ insertPageRef,
|
|
|
|
|
+ insertTag,
|
|
|
isFormatActive,
|
|
isFormatActive,
|
|
|
setHeading,
|
|
setHeading,
|
|
|
toggleBold,
|
|
toggleBold,
|
|
@@ -373,3 +376,130 @@ describe("insertInlineMath", () => {
|
|
|
expect(doc.textBetween(1, doc.content.size)).toBe("hello $$")
|
|
expect(doc.textBetween(1, doc.content.size)).toBe("hello $$")
|
|
|
})
|
|
})
|
|
|
})
|
|
})
|
|
|
|
|
+
|
|
|
|
|
+describe("insertPageRef", () => {
|
|
|
|
|
+ it("inserts [[Page Name]] at cursor", () => {
|
|
|
|
|
+ const view = getView("hello ", 6)
|
|
|
|
|
+ insertPageRef(view, "Page Name")
|
|
|
|
|
+ const doc = view.state.doc
|
|
|
|
|
+ expect(doc.textBetween(1, doc.content.size)).toBe("hello [[Page Name]]")
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ it("inserts [[Page Name|Alias]] when alias is given", () => {
|
|
|
|
|
+ const view = getView("hello ", 6)
|
|
|
|
|
+ insertPageRef(view, "Page Name", "Alias")
|
|
|
|
|
+ const doc = view.state.doc
|
|
|
|
|
+ expect(doc.textBetween(1, doc.content.size)).toBe("hello [[Page Name|Alias]]")
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ it("wraps selected text as the page ref", () => {
|
|
|
|
|
+ const view = getViewWithRange("hello world", 6, 11)
|
|
|
|
|
+ insertPageRef(view, "Renamed")
|
|
|
|
|
+ const doc = view.state.doc
|
|
|
|
|
+ expect(doc.textBetween(1, doc.content.size)).toBe("hello [[Renamed]]")
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ it("does nothing when pageName is empty", () => {
|
|
|
|
|
+ const view = getView("hello", 5)
|
|
|
|
|
+ insertPageRef(view, "")
|
|
|
|
|
+ const doc = view.state.doc
|
|
|
|
|
+ expect(doc.textBetween(1, doc.content.size)).toBe("hello")
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ it("places cursor after closing ]]", () => {
|
|
|
|
|
+ const view = getView("hello ", 6)
|
|
|
|
|
+ insertPageRef(view, "Page")
|
|
|
|
|
+ expect(view.state.selection.head).toBe(1 + 6 + "[[Page]]".length)
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ it("discards selection when alias is given", () => {
|
|
|
|
|
+ const view = getViewWithRange("hello world", 6, 11)
|
|
|
|
|
+ insertPageRef(view, "Page", "Alias")
|
|
|
|
|
+ const doc = view.state.doc
|
|
|
|
|
+ expect(doc.textBetween(1, doc.content.size)).toBe("hello [[Page|Alias]]")
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ it("places cursor after closing ]] with selection", () => {
|
|
|
|
|
+ const view = getViewWithRange("hello world", 6, 11)
|
|
|
|
|
+ insertPageRef(view, "Page")
|
|
|
|
|
+ expect(view.state.selection.head).toBe(1 + 6 + "[[Page]]".length)
|
|
|
|
|
+ })
|
|
|
|
|
+})
|
|
|
|
|
+
|
|
|
|
|
+describe("insertBlockRef", () => {
|
|
|
|
|
+ it("inserts ((block-id)) at cursor", () => {
|
|
|
|
|
+ const view = getView("hello ", 6)
|
|
|
|
|
+ insertBlockRef(view, "abc123")
|
|
|
|
|
+ const doc = view.state.doc
|
|
|
|
|
+ expect(doc.textBetween(1, doc.content.size)).toBe("hello ((abc123))")
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ it("wraps selected text as the block ref", () => {
|
|
|
|
|
+ const view = getViewWithRange("hello world", 6, 11)
|
|
|
|
|
+ insertBlockRef(view, "xyz")
|
|
|
|
|
+ const doc = view.state.doc
|
|
|
|
|
+ expect(doc.textBetween(1, doc.content.size)).toBe("hello ((xyz))")
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ it("does nothing when blockId is empty", () => {
|
|
|
|
|
+ const view = getView("hello", 5)
|
|
|
|
|
+ insertBlockRef(view, "")
|
|
|
|
|
+ const doc = view.state.doc
|
|
|
|
|
+ expect(doc.textBetween(1, doc.content.size)).toBe("hello")
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ it("places cursor after closing ))", () => {
|
|
|
|
|
+ const view = getView("hello ", 6)
|
|
|
|
|
+ insertBlockRef(view, "id")
|
|
|
|
|
+ expect(view.state.selection.head).toBe(1 + 6 + "((id))".length)
|
|
|
|
|
+ })
|
|
|
|
|
+})
|
|
|
|
|
+
|
|
|
|
|
+describe("insertTag", () => {
|
|
|
|
|
+ it("inserts #tag at cursor", () => {
|
|
|
|
|
+ const view = getView("hello ", 6)
|
|
|
|
|
+ insertTag(view, "bug")
|
|
|
|
|
+ const doc = view.state.doc
|
|
|
|
|
+ expect(doc.textBetween(1, doc.content.size)).toBe("hello #bug")
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ it("does nothing when tag contains space", () => {
|
|
|
|
|
+ const view = getView("hello ", 6)
|
|
|
|
|
+ insertTag(view, "my tag")
|
|
|
|
|
+ const doc = view.state.doc
|
|
|
|
|
+ expect(doc.textBetween(1, doc.content.size)).toBe("hello ")
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ it("does nothing when tag is empty", () => {
|
|
|
|
|
+ const view = getView("hello ", 6)
|
|
|
|
|
+ insertTag(view, "")
|
|
|
|
|
+ const doc = view.state.doc
|
|
|
|
|
+ expect(doc.textBetween(1, doc.content.size)).toBe("hello ")
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ it("replaces selection with tagged text", () => {
|
|
|
|
|
+ const view = getViewWithRange("hello world", 6, 11)
|
|
|
|
|
+ insertTag(view, "greeting")
|
|
|
|
|
+ const doc = view.state.doc
|
|
|
|
|
+ expect(doc.textBetween(1, doc.content.size)).toBe("hello #greeting")
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ it("does nothing when selection contains space", () => {
|
|
|
|
|
+ const view = getViewWithRange("hello big world", 6, 10)
|
|
|
|
|
+ insertTag(view, "greeting")
|
|
|
|
|
+ const doc = view.state.doc
|
|
|
|
|
+ expect(doc.textBetween(1, doc.content.size)).toBe("hello big world")
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ it("places cursor after the complete tag", () => {
|
|
|
|
|
+ const view = getView("hello ", 6)
|
|
|
|
|
+ insertTag(view, "bug")
|
|
|
|
|
+ expect(view.state.selection.head).toBe(1 + 6 + "#bug".length)
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ it("places cursor after tag when replacing selection", () => {
|
|
|
|
|
+ const view = getViewWithRange("hello world", 6, 11)
|
|
|
|
|
+ insertTag(view, "greeting")
|
|
|
|
|
+ expect(view.state.selection.head).toBe(1 + 6 + "#greeting".length)
|
|
|
|
|
+ })
|
|
|
|
|
+})
|