mirror of
https://github.com/streetwriters/notesnook.git
synced 2025-12-16 19:57:52 +01:00
editor: add test for code block in outline list
Signed-off-by: 01zulfi <85733202+01zulfi@users.noreply.github.com>
This commit is contained in:
@@ -17,28 +17,18 @@ You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import { createEditor, h, ul, li, p } from "../../../../test-utils/index.js";
|
||||
import {
|
||||
createEditor,
|
||||
h,
|
||||
p,
|
||||
outlineList,
|
||||
outlineListItem
|
||||
} from "../../../../test-utils/index.js";
|
||||
import { test, expect, describe } from "vitest";
|
||||
import { ImageNode } from "../index.js";
|
||||
import { OutlineList } from "../../outline-list/outline-list.js";
|
||||
import { OutlineListItem } from "../../outline-list-item/outline-list-item.js";
|
||||
|
||||
function outlineList(...children: HTMLLIElement[]) {
|
||||
return ul(children, { "data-type": "outlineList" });
|
||||
}
|
||||
|
||||
function outlineListItem(
|
||||
paragraphChildren: (string | HTMLElement)[],
|
||||
subList?: HTMLUListElement
|
||||
) {
|
||||
const children: HTMLElement[] = [h("p", paragraphChildren)];
|
||||
if (subList) children.push(subList);
|
||||
|
||||
return li(children, {
|
||||
"data-type": "outlineListItem"
|
||||
});
|
||||
}
|
||||
|
||||
describe("migration", () => {
|
||||
test(`inline image in paragraph`, async () => {
|
||||
const el = p(["hello", h("img", [], { src: "image.png" }), "world"]);
|
||||
|
||||
@@ -0,0 +1,130 @@
|
||||
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
|
||||
|
||||
exports[`outline list item > code block in outline list item 1`] = `
|
||||
{
|
||||
"content": [
|
||||
{
|
||||
"content": [
|
||||
{
|
||||
"attrs": {
|
||||
"collapsed": false,
|
||||
},
|
||||
"content": [
|
||||
{
|
||||
"content": [
|
||||
{
|
||||
"text": "item 1",
|
||||
"type": "text",
|
||||
},
|
||||
],
|
||||
"type": "paragraph",
|
||||
},
|
||||
],
|
||||
"type": "outlineListItem",
|
||||
},
|
||||
{
|
||||
"attrs": {
|
||||
"collapsed": false,
|
||||
},
|
||||
"content": [
|
||||
{
|
||||
"content": [
|
||||
{
|
||||
"text": "hello",
|
||||
"type": "text",
|
||||
},
|
||||
],
|
||||
"type": "paragraph",
|
||||
},
|
||||
{
|
||||
"attrs": {
|
||||
"caretPosition": undefined,
|
||||
"id": "codeblock-test-id-123456",
|
||||
"indentLength": 2,
|
||||
"indentType": "space",
|
||||
"language": null,
|
||||
"lines": [],
|
||||
},
|
||||
"content": [
|
||||
{
|
||||
"text": "const x = 1;",
|
||||
"type": "text",
|
||||
},
|
||||
],
|
||||
"type": "codeblock",
|
||||
},
|
||||
{
|
||||
"content": [
|
||||
{
|
||||
"text": "world",
|
||||
"type": "text",
|
||||
},
|
||||
],
|
||||
"type": "paragraph",
|
||||
},
|
||||
{
|
||||
"content": [
|
||||
{
|
||||
"attrs": {
|
||||
"collapsed": false,
|
||||
},
|
||||
"content": [
|
||||
{
|
||||
"content": [
|
||||
{
|
||||
"text": "sub item 2",
|
||||
"type": "text",
|
||||
},
|
||||
],
|
||||
"type": "paragraph",
|
||||
},
|
||||
],
|
||||
"type": "outlineListItem",
|
||||
},
|
||||
{
|
||||
"attrs": {
|
||||
"collapsed": false,
|
||||
},
|
||||
"content": [
|
||||
{
|
||||
"content": [
|
||||
{
|
||||
"text": "sub item 3",
|
||||
"type": "text",
|
||||
},
|
||||
],
|
||||
"type": "paragraph",
|
||||
},
|
||||
],
|
||||
"type": "outlineListItem",
|
||||
},
|
||||
],
|
||||
"type": "outlineList",
|
||||
},
|
||||
],
|
||||
"type": "outlineListItem",
|
||||
},
|
||||
{
|
||||
"attrs": {
|
||||
"collapsed": false,
|
||||
},
|
||||
"content": [
|
||||
{
|
||||
"content": [
|
||||
{
|
||||
"text": "item 4",
|
||||
"type": "text",
|
||||
},
|
||||
],
|
||||
"type": "paragraph",
|
||||
},
|
||||
],
|
||||
"type": "outlineListItem",
|
||||
},
|
||||
],
|
||||
"type": "outlineList",
|
||||
},
|
||||
],
|
||||
"type": "doc",
|
||||
}
|
||||
`;
|
||||
@@ -0,0 +1,73 @@
|
||||
/*
|
||||
This file is part of the Notesnook project (https://notesnook.com/)
|
||||
|
||||
Copyright (C) 2023 Streetwriters (Private) Limited
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import {
|
||||
createEditor,
|
||||
h,
|
||||
li,
|
||||
outlineList,
|
||||
outlineListItem
|
||||
} from "../../../../test-utils/index.js";
|
||||
import { test, expect, describe, beforeAll, vi } from "vitest";
|
||||
import { OutlineList } from "../../outline-list/outline-list.js";
|
||||
import { OutlineListItem } from "../outline-list-item.js";
|
||||
import { CodeBlock } from "../../code-block/code-block.js";
|
||||
|
||||
describe("outline list item", () => {
|
||||
beforeAll(() => {
|
||||
vi.mock("nanoid", () => ({
|
||||
nanoid: () => "test-id-123456"
|
||||
}));
|
||||
});
|
||||
|
||||
test(`code block in outline list item`, async () => {
|
||||
const subList = outlineList(
|
||||
outlineListItem(["sub item 2"]),
|
||||
outlineListItem(["sub item 3"])
|
||||
);
|
||||
const listItemWithCodeBlock = li(
|
||||
[
|
||||
h("p", ["hello"]),
|
||||
h("pre", [h("code", ["const x = 1;"])]),
|
||||
h("p", ["world"]),
|
||||
subList
|
||||
],
|
||||
{ "data-type": "outlineListItem" }
|
||||
);
|
||||
const el = outlineList(
|
||||
outlineListItem(["item 1"]),
|
||||
listItemWithCodeBlock,
|
||||
outlineListItem(["item 4"])
|
||||
);
|
||||
|
||||
const {
|
||||
builder: { codeBlock },
|
||||
editor
|
||||
} = createEditor({
|
||||
initialContent: el.outerHTML,
|
||||
extensions: {
|
||||
outlineList: OutlineList,
|
||||
outlineListItem: OutlineListItem,
|
||||
codeBlock: CodeBlock
|
||||
}
|
||||
});
|
||||
|
||||
expect(editor.getJSON()).toMatchSnapshot();
|
||||
});
|
||||
});
|
||||
@@ -92,3 +92,19 @@ export const p = elem("p");
|
||||
export function text(text: string) {
|
||||
return document.createTextNode(text);
|
||||
}
|
||||
|
||||
export function outlineList(...children: HTMLLIElement[]) {
|
||||
return ul(children, { "data-type": "outlineList" });
|
||||
}
|
||||
|
||||
export function outlineListItem(
|
||||
paragraphChildren: (string | HTMLElement)[],
|
||||
subList?: HTMLUListElement
|
||||
) {
|
||||
const children: HTMLElement[] = [h("p", paragraphChildren)];
|
||||
if (subList) children.push(subList);
|
||||
|
||||
return li(children, {
|
||||
"data-type": "outlineListItem"
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user