diff --git a/packages/netlify-cms-backend-github/package.json b/packages/netlify-cms-backend-github/package.json index 696c7ec2..a438a490 100644 --- a/packages/netlify-cms-backend-github/package.json +++ b/packages/netlify-cms-backend-github/package.json @@ -17,7 +17,7 @@ "scripts": { "develop": "yarn build:esm --watch", "build": "cross-env NODE_ENV=production webpack", - "build:esm": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore **/__tests__ --root-mode upward", + "build:esm": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward", "createFragmentTypes": "node scripts/createFragmentTypes.js" }, "dependencies": { diff --git a/packages/netlify-cms-backend-gitlab/package.json b/packages/netlify-cms-backend-gitlab/package.json index 517069cb..8f33d96a 100644 --- a/packages/netlify-cms-backend-gitlab/package.json +++ b/packages/netlify-cms-backend-gitlab/package.json @@ -17,7 +17,7 @@ "scripts": { "develop": "yarn build:esm --watch", "build": "cross-env NODE_ENV=production webpack", - "build:esm": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore **/__tests__ --root-mode upward" + "build:esm": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward" }, "dependencies": { "js-base64": "^2.5.1", diff --git a/packages/netlify-cms-core/package.json b/packages/netlify-cms-core/package.json index e90f2d9c..035ec66e 100644 --- a/packages/netlify-cms-core/package.json +++ b/packages/netlify-cms-core/package.json @@ -13,7 +13,7 @@ "scripts": { "develop": "yarn build:esm --watch", "build": "cross-env NODE_ENV=production webpack", - "build:esm": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore **/__tests__ --root-mode upward" + "build:esm": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward" }, "keywords": [ "netlify", diff --git a/packages/netlify-cms-core/src/reducers/__tests__/entryDraft.spec.js b/packages/netlify-cms-core/src/reducers/__tests__/entryDraft.spec.js index c1fb9f9d..ddfa00e2 100644 --- a/packages/netlify-cms-core/src/reducers/__tests__/entryDraft.spec.js +++ b/packages/netlify-cms-core/src/reducers/__tests__/entryDraft.spec.js @@ -61,25 +61,6 @@ describe('entryDraft reducer', () => { }); }); - describe('DRAFT_CHANGE', () => { - it.skip('should update the draft', () => { - const newEntry = { - ...entry, - raw: 'updated', - }; - expect(reducer(initialState, actions.changeDraft(newEntry))).toEqual( - fromJS({ - entry: { - ...entry, - raw: 'updated', - }, - mediaFiles: [], - hasChanged: true, - }), - ); - }); - }); - describe('persisting', () => { beforeEach(() => { initialState = fromJS({ diff --git a/packages/netlify-cms-editor-component-image/package.json b/packages/netlify-cms-editor-component-image/package.json index 237797eb..3bc4c66d 100644 --- a/packages/netlify-cms-editor-component-image/package.json +++ b/packages/netlify-cms-editor-component-image/package.json @@ -17,7 +17,7 @@ "scripts": { "develop": "yarn build:esm --watch", "build": "cross-env NODE_ENV=production webpack", - "build:esm": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore **/__tests__ --root-mode upward" + "build:esm": "cross-env NODE_ENV=esm babel src --out-dir dist/esm --ignore \"**/__tests__\" --root-mode upward" }, "devDependencies": { "cross-env": "^5.2.0", diff --git a/packages/netlify-cms-widget-markdown/src/serializers/__tests__/__fixtures__/commonmarkExpected.json b/packages/netlify-cms-widget-markdown/src/serializers/__tests__/__fixtures__/commonmarkExpected.json new file mode 100644 index 00000000..2e74df14 --- /dev/null +++ b/packages/netlify-cms-widget-markdown/src/serializers/__tests__/__fixtures__/commonmarkExpected.json @@ -0,0 +1,625 @@ +{ + "\tfoo\tbaz\t\tbim\n": "NOT_TO_EQUAL", + " \tfoo\tbaz\t\tbim\n": "NOT_TO_EQUAL", + " a\ta\n ὐ\ta\n": "NOT_TO_EQUAL", + " - foo\n\n\tbar\n": "NOT_TO_EQUAL", + "- foo\n\n\t\tbar\n": "NOT_TO_EQUAL", + ">\t\tfoo\n": "NOT_TO_EQUAL", + "-\t\tfoo\n": "NOT_TO_EQUAL", + " foo\n\tbar\n": "TO_EQUAL", + " - foo\n - bar\n\t - baz\n": "NOT_TO_EQUAL", + "#\tFoo\n": "TO_EQUAL", + "*\t*\t*\t\n": "TO_ERROR", + "- `one\n- two`\n": "TO_EQUAL", + "***\n---\n___\n": "NOT_TO_EQUAL", + "+++\n": "TO_EQUAL", + "===\n": "TO_EQUAL", + "--\n**\n__\n": "TO_EQUAL", + " ***\n ***\n ***\n": "NOT_TO_EQUAL", + " ***\n": "TO_EQUAL", + "Foo\n ***\n": "TO_EQUAL", + "_____________________________________\n": "NOT_TO_EQUAL", + " - - -\n": "NOT_TO_EQUAL", + " ** * ** * ** * **\n": "NOT_TO_EQUAL", + "- - - -\n": "NOT_TO_EQUAL", + "- - - - \n": "NOT_TO_EQUAL", + "_ _ _ _ a\n\na------\n\n---a---\n": "TO_EQUAL", + " *-*\n": "NOT_TO_EQUAL", + "- foo\n***\n- bar\n": "NOT_TO_EQUAL", + "Foo\n***\nbar\n": "NOT_TO_EQUAL", + "Foo\n---\nbar\n": "TO_EQUAL", + "* Foo\n* * *\n* Bar\n": "NOT_TO_EQUAL", + "- Foo\n- * * *\n": "NOT_TO_EQUAL", + "# foo\n## foo\n### foo\n#### foo\n##### foo\n###### foo\n": "TO_EQUAL", + "####### foo\n": "TO_EQUAL", + "#5 bolt\n\n#hashtag\n": "TO_EQUAL", + "\\## foo\n": "TO_EQUAL", + "# foo *bar* \\*baz\\*\n": "NOT_TO_EQUAL", + "# foo \n": "TO_EQUAL", + " ### foo\n ## foo\n # foo\n": "TO_EQUAL", + " # foo\n": "TO_EQUAL", + "foo\n # bar\n": "TO_EQUAL", + "## foo ##\n ### bar ###\n": "TO_EQUAL", + "# foo ##################################\n##### foo ##\n": "TO_EQUAL", + "### foo ### \n": "TO_EQUAL", + "### foo ### b\n": "TO_EQUAL", + "# foo#\n": "NOT_TO_EQUAL", + "### foo \\###\n## foo #\\##\n# foo \\#\n": "NOT_TO_EQUAL", + "****\n## foo\n****\n": "NOT_TO_EQUAL", + "Foo bar\n# baz\nBar foo\n": "TO_EQUAL", + "## \n#\n### ###\n": "TO_ERROR", + "Foo *bar*\n=========\n\nFoo *bar*\n---------\n": "TO_EQUAL", + "Foo *bar\nbaz*\n====\n": "NOT_TO_EQUAL", + "Foo\n-------------------------\n\nFoo\n=\n": "TO_EQUAL", + " Foo\n---\n\n Foo\n-----\n\n Foo\n ===\n": "NOT_TO_EQUAL", + " Foo\n ---\n\n Foo\n---\n": "NOT_TO_EQUAL", + "Foo\n ---- \n": "NOT_TO_EQUAL", + "Foo\n ---\n": "TO_EQUAL", + "Foo\n= =\n\nFoo\n--- -\n": "NOT_TO_EQUAL", + "Foo \n-----\n": "TO_EQUAL", + "Foo\\\n----\n": "TO_EQUAL", + "`Foo\n----\n`\n\n\n": "NOT_TO_EQUAL", + "> Foo\n---\n": "NOT_TO_EQUAL", + "> foo\nbar\n===\n": "NOT_TO_EQUAL", + "- Foo\n---\n": "NOT_TO_EQUAL", + "Foo\nBar\n---\n": "NOT_TO_EQUAL", + "---\nFoo\n---\nBar\n---\nBaz\n": "NOT_TO_EQUAL", + "\n====\n": "TO_EQUAL", + "---\n---\n": "TO_ERROR", + "- foo\n-----\n": "NOT_TO_EQUAL", + " foo\n---\n": "NOT_TO_EQUAL", + "> foo\n-----\n": "NOT_TO_EQUAL", + "\\> foo\n------\n": "NOT_TO_EQUAL", + "Foo\n\nbar\n---\nbaz\n": "TO_EQUAL", + "Foo\nbar\n\n---\n\nbaz\n": "NOT_TO_EQUAL", + "Foo\nbar\n* * *\nbaz\n": "NOT_TO_EQUAL", + "Foo\nbar\n\\---\nbaz\n": "NOT_TO_EQUAL", + " a simple\n indented code block\n": "TO_EQUAL", + " - foo\n\n bar\n": "NOT_TO_EQUAL", + "1. foo\n\n - bar\n": "TO_EQUAL", + " \n *hi*\n\n - one\n": "NOT_TO_EQUAL", + " chunk1\n\n chunk2\n \n \n \n chunk3\n": "TO_EQUAL", + " chunk1\n \n chunk2\n": "TO_EQUAL", + "Foo\n bar\n\n": "TO_EQUAL", + " foo\nbar\n": "TO_EQUAL", + "# Heading\n foo\nHeading\n------\n foo\n----\n": "NOT_TO_EQUAL", + " foo\n bar\n": "TO_EQUAL", + "\n \n foo\n \n\n": "TO_EQUAL", + " foo \n": "TO_EQUAL", + "```\n<\n >\n```\n": "NOT_TO_EQUAL", + "~~~\n<\n >\n~~~\n": "NOT_TO_EQUAL", + "``\nfoo\n``\n": "TO_EQUAL", + "```\naaa\n~~~\n```\n": "NOT_TO_EQUAL", + "~~~\naaa\n```\n~~~\n": "NOT_TO_EQUAL", + "````\naaa\n```\n``````\n": "NOT_TO_EQUAL", + "~~~~\naaa\n~~~\n~~~~\n": "NOT_TO_EQUAL", + "```\n": "TO_EQUAL", + "`````\n\n```\naaa\n": "NOT_TO_EQUAL", + "> ```\n> aaa\n\nbbb\n": "TO_EQUAL", + "```\n\n \n```\n": "NOT_TO_EQUAL", + "```\n```\n": "TO_EQUAL", + " ```\n aaa\naaa\n```\n": "TO_EQUAL", + " ```\naaa\n aaa\naaa\n ```\n": "TO_EQUAL", + " ```\n aaa\n aaa\n aaa\n ```\n": "TO_EQUAL", + " ```\n aaa\n ```\n": "NOT_TO_EQUAL", + "```\naaa\n ```\n": "TO_EQUAL", + " ```\naaa\n ```\n": "TO_EQUAL", + "```\naaa\n ```\n": "NOT_TO_EQUAL", + "``` ```\naaa\n": "TO_EQUAL", + "~~~~~~\naaa\n~~~ ~~\n": "NOT_TO_EQUAL", + "foo\n```\nbar\n```\nbaz\n": "TO_EQUAL", + "foo\n---\n~~~\nbar\n~~~\n# baz\n": "TO_EQUAL", + "```ruby\ndef foo(x)\n return 3\nend\n```\n": "TO_EQUAL", + "~~~~ ruby startline=3 $%@#$\ndef foo(x)\n return 3\nend\n~~~~~~~\n": "TO_EQUAL", + "````;\n````\n": "TO_EQUAL", + "``` aa ```\nfoo\n": "TO_EQUAL", + "```\n``` aaa\n```\n": "NOT_TO_EQUAL", + "
\n
\n**Hello**,\n\n_world_.\n
\n
\n": "NOT_TO_EQUAL", + "\n \n \n \n
\n hi\n
\n\nokay.\n": "TO_EQUAL", + "
\n *hello*\n \n": "NOT_TO_EQUAL", + "
\n*foo*\n": "NOT_TO_EQUAL", + "
\n\n*Markdown*\n\n
\n": "TO_EQUAL", + "
\n
\n": "TO_EQUAL", + "
\n
\n": "TO_EQUAL", + "
\n*foo*\n\n*bar*\n": "NOT_TO_EQUAL", + "
*foo*
\n": "NOT_TO_EQUAL", + "
\nfoo\n
\n": "TO_EQUAL", + "
\n``` c\nint x = 33;\n```\n": "NOT_TO_EQUAL", + "\n*bar*\n\n": "NOT_TO_EQUAL", + "\n*bar*\n\n": "NOT_TO_EQUAL", + "\n*bar*\n\n": "NOT_TO_EQUAL", + "\n*bar*\n": "NOT_TO_EQUAL", + "\n*foo*\n\n": "NOT_TO_EQUAL", + "\n\n*foo*\n\n\n": "TO_EQUAL", + "*foo*\n": "TO_EQUAL", + "
\nimport Text.HTML.TagSoup\n\nmain :: IO ()\nmain = print $ parseTags tags\n
\nokay\n": "TO_EQUAL", + "\nokay\n": "TO_EQUAL", + "\nh1 {color:red;}\n\np {color:blue;}\n\nokay\n": "TO_EQUAL", + "\n\nfoo\n": "TO_EQUAL", + ">
\n> foo\n\nbar\n": "TO_EQUAL", + "-
\n- foo\n": "TO_EQUAL", + "\n*foo*\n": "TO_EQUAL", + "*bar*\n*baz*\n": "NOT_TO_EQUAL", + "1. *bar*\n": "NOT_TO_EQUAL", + "\nokay\n": "TO_EQUAL", + "';\n\n?>\nokay\n": "TO_EQUAL", + "\n": "TO_EQUAL", + "\nokay\n": "NOT_TO_EQUAL", + " \n\n \n": "NOT_TO_EQUAL", + "
\n\n
\n": "NOT_TO_EQUAL", + "Foo\n
\nbar\n
\n": "TO_EQUAL", + "
\nbar\n
\n*foo*\n": "NOT_TO_EQUAL", + "Foo\n\nbaz\n": "TO_EQUAL", + "
\n\n*Emphasized* text.\n\n
\n": "TO_EQUAL", + "
\n*Emphasized* text.\n
\n": "NOT_TO_EQUAL", + "\n\n\n\n\n\n\n\n
\nHi\n
\n": "TO_EQUAL", + "\n\n \n\n \n\n \n\n
\n Hi\n
\n": "NOT_TO_EQUAL", + "[foo]: /url \"title\"\n\n[foo]\n": "TO_EQUAL", + " [foo]: \n /url \n 'the title' \n\n[foo]\n": "TO_EQUAL", + "[Foo*bar\\]]:my_(url) 'title (with parens)'\n\n[Foo*bar\\]]\n": "NOT_TO_EQUAL", + "[Foo bar]:\n\n'title'\n\n[Foo bar]\n": "TO_EQUAL", + "[foo]: /url '\ntitle\nline1\nline2\n'\n\n[foo]\n": "NOT_TO_EQUAL", + "[foo]: /url 'title\n\nwith blank line'\n\n[foo]\n": "TO_EQUAL", + "[foo]:\n/url\n\n[foo]\n": "TO_EQUAL", + "[foo]:\n\n[foo]\n": "TO_EQUAL", + "[foo]: /url\\bar\\*baz \"foo\\\"bar\\baz\"\n\n[foo]\n": "NOT_TO_EQUAL", + "[foo]\n\n[foo]: url\n": "TO_EQUAL", + "[foo]\n\n[foo]: first\n[foo]: second\n": "NOT_TO_EQUAL", + "[FOO]: /url\n\n[Foo]\n": "TO_EQUAL", + "[ΑΓΩ]: /φου\n\n[αγω]\n": "TO_EQUAL", + "[foo]: /url\n": "TO_ERROR", + "[\nfoo\n]: /url\nbar\n": "TO_EQUAL", + "[foo]: /url \"title\" ok\n": "NOT_TO_EQUAL", + "[foo]: /url\n\"title\" ok\n": "NOT_TO_EQUAL", + " [foo]: /url \"title\"\n\n[foo]\n": "NOT_TO_EQUAL", + "```\n[foo]: /url\n```\n\n[foo]\n": "TO_EQUAL", + "Foo\n[bar]: /baz\n\n[bar]\n": "TO_EQUAL", + "# [Foo]\n[foo]: /url\n> bar\n": "TO_EQUAL", + "[foo]: /foo-url \"foo\"\n[bar]: /bar-url\n \"bar\"\n[baz]: /baz-url\n\n[foo],\n[bar],\n[baz]\n": "TO_EQUAL", + "[foo]\n\n> [foo]: /url\n": "NOT_TO_EQUAL", + "aaa\n\nbbb\n": "TO_EQUAL", + "aaa\nbbb\n\nccc\nddd\n": "TO_EQUAL", + "aaa\n\n\nbbb\n": "TO_EQUAL", + " aaa\n bbb\n": "NOT_TO_EQUAL", + "aaa\n bbb\n ccc\n": "TO_EQUAL", + " aaa\nbbb\n": "NOT_TO_EQUAL", + " aaa\nbbb\n": "TO_EQUAL", + "aaa \nbbb \n": "NOT_TO_EQUAL", + " \n\naaa\n \n\n# aaa\n\n \n": "TO_EQUAL", + "> # Foo\n> bar\n> baz\n": "TO_EQUAL", + "># Foo\n>bar\n> baz\n": "TO_EQUAL", + " > # Foo\n > bar\n > baz\n": "TO_EQUAL", + " > # Foo\n > bar\n > baz\n": "NOT_TO_EQUAL", + "> # Foo\n> bar\nbaz\n": "TO_EQUAL", + "> bar\nbaz\n> foo\n": "TO_EQUAL", + "> foo\n---\n": "NOT_TO_EQUAL", + "> - foo\n- bar\n": "TO_EQUAL", + "> foo\n bar\n": "TO_EQUAL", + "> ```\nfoo\n```\n": "NOT_TO_EQUAL", + "> foo\n - bar\n": "NOT_TO_EQUAL", + ">\n": "TO_ERROR", + ">\n> \n> \n": "TO_ERROR", + ">\n> foo\n> \n": "TO_EQUAL", + "> foo\n\n> bar\n": "NOT_TO_EQUAL", + "> foo\n> bar\n": "TO_EQUAL", + "> foo\n>\n> bar\n": "TO_EQUAL", + "foo\n> bar\n": "TO_EQUAL", + "> aaa\n***\n> bbb\n": "NOT_TO_EQUAL", + "> bar\nbaz\n": "TO_EQUAL", + "> bar\n\nbaz\n": "TO_EQUAL", + "> bar\n>\nbaz\n": "NOT_TO_EQUAL", + "> > > foo\nbar\n": "TO_EQUAL", + ">>> foo\n> bar\n>>baz\n": "TO_EQUAL", + "> code\n\n> not code\n": "NOT_TO_EQUAL", + "A paragraph\nwith two lines.\n\n indented code\n\n> A block quote.\n": "TO_EQUAL", + "1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote.\n": "TO_EQUAL", + "- one\n\n two\n": "NOT_TO_EQUAL", + "- one\n\n two\n": "NOT_TO_EQUAL", + " - one\n\n two\n": "NOT_TO_EQUAL", + " - one\n\n two\n": "NOT_TO_EQUAL", + " > > 1. one\n>>\n>> two\n": "NOT_TO_EQUAL", + ">>- one\n>>\n > > two\n": "TO_EQUAL", + "-one\n\n2.two\n": "TO_EQUAL", + "- foo\n\n\n bar\n": "TO_EQUAL", + "1. foo\n\n ```\n bar\n ```\n\n baz\n\n > bam\n": "TO_EQUAL", + "- Foo\n\n bar\n\n\n baz\n": "NOT_TO_EQUAL", + "123456789. ok\n": "TO_EQUAL", + "1234567890. not ok\n": "NOT_TO_EQUAL", + "0. ok\n": "NOT_TO_EQUAL", + "003. ok\n": "TO_EQUAL", + "-1. not ok\n": "TO_EQUAL", + "- foo\n\n bar\n": "TO_EQUAL", + " 10. foo\n\n bar\n": "TO_EQUAL", + " indented code\n\nparagraph\n\n more code\n": "TO_EQUAL", + "1. indented code\n\n paragraph\n\n more code\n": "TO_EQUAL", + "1. indented code\n\n paragraph\n\n more code\n": "TO_EQUAL", + " foo\n\nbar\n": "NOT_TO_EQUAL", + "- foo\n\n bar\n": "NOT_TO_EQUAL", + "- foo\n\n bar\n": "NOT_TO_EQUAL", + "-\n foo\n-\n ```\n bar\n ```\n-\n baz\n": "NOT_TO_EQUAL", + "- \n foo\n": "TO_ERROR", + "-\n\n foo\n": "NOT_TO_EQUAL", + "- foo\n-\n- bar\n": "TO_ERROR", + "- foo\n- \n- bar\n": "TO_ERROR", + "1. foo\n2.\n3. bar\n": "TO_ERROR", + "*\n": "NOT_TO_EQUAL", + "foo\n*\n\nfoo\n1.\n": "TO_EQUAL", + " 1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote.\n": "TO_EQUAL", + " 1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote.\n": "TO_EQUAL", + " 1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote.\n": "TO_EQUAL", + " 1. A paragraph\n with two lines.\n\n indented code\n\n > A block quote.\n": "NOT_TO_EQUAL", + " 1. A paragraph\nwith two lines.\n\n indented code\n\n > A block quote.\n": "NOT_TO_EQUAL", + " 1. A paragraph\n with two lines.\n": "TO_EQUAL", + "> 1. > Blockquote\ncontinued here.\n": "TO_EQUAL", + "> 1. > Blockquote\n> continued here.\n": "TO_EQUAL", + "- foo\n - bar\n - baz\n - boo\n": "NOT_TO_EQUAL", + "- foo\n - bar\n - baz\n - boo\n": "TO_EQUAL", + "10) foo\n - bar\n": "NOT_TO_EQUAL", + "10) foo\n - bar\n": "TO_EQUAL", + "- - foo\n": "TO_EQUAL", + "1. - 2. foo\n": "TO_EQUAL", + "- # Foo\n- Bar\n ---\n baz\n": "NOT_TO_EQUAL", + "- foo\n- bar\n+ baz\n": "TO_EQUAL", + "1. foo\n2. bar\n3) baz\n": "TO_EQUAL", + "Foo\n- bar\n- baz\n": "TO_EQUAL", + "The number of windows in my house is\n14. The number of doors is 6.\n": "NOT_TO_EQUAL", + "The number of windows in my house is\n1. The number of doors is 6.\n": "TO_EQUAL", + "- foo\n\n- bar\n\n\n- baz\n": "NOT_TO_EQUAL", + "- foo\n - bar\n - baz\n\n\n bim\n": "NOT_TO_EQUAL", + "- foo\n- bar\n\n\n\n- baz\n- bim\n": "TO_EQUAL", + "- foo\n\n notcode\n\n- foo\n\n\n\n code\n": "NOT_TO_EQUAL", + "- a\n - b\n - c\n - d\n - e\n - f\n - g\n - h\n- i\n": "NOT_TO_EQUAL", + "1. a\n\n 2. b\n\n 3. c\n": "NOT_TO_EQUAL", + "- a\n- b\n\n- c\n": "NOT_TO_EQUAL", + "* a\n*\n\n* c\n": "TO_ERROR", + "- a\n- b\n\n c\n- d\n": "NOT_TO_EQUAL", + "- a\n- b\n\n [ref]: /url\n- d\n": "NOT_TO_EQUAL", + "- a\n- ```\n b\n\n\n ```\n- c\n": "NOT_TO_EQUAL", + "- a\n - b\n\n c\n- d\n": "NOT_TO_EQUAL", + "* a\n > b\n >\n* c\n": "NOT_TO_EQUAL", + "- a\n > b\n ```\n c\n ```\n- d\n": "NOT_TO_EQUAL", + "- a\n": "TO_EQUAL", + "- a\n - b\n": "NOT_TO_EQUAL", + "1. ```\n foo\n ```\n\n bar\n": "TO_EQUAL", + "* foo\n * bar\n\n baz\n": "NOT_TO_EQUAL", + "- a\n - b\n - c\n\n- d\n - e\n - f\n": "TO_EQUAL", + "`hi`lo`\n": "TO_EQUAL", + "\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\-\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\\\\\]\\^\\_\\`\\{\\|\\}\\~\n": "NOT_TO_EQUAL", + "\\\t\\A\\a\\ \\3\\φ\\«\n": "TO_EQUAL", + "\\*not emphasized*\n\\
not a tag\n\\[not a link](/foo)\n\\`not code`\n1\\. not a list\n\\* not a list\n\\# not a heading\n\\[foo]: /url \"not a reference\"\n": "NOT_TO_EQUAL", + "\\\\*emphasis*\n": "NOT_TO_EQUAL", + "foo\\\nbar\n": "NOT_TO_EQUAL", + "`` \\[\\` ``\n": "TO_EQUAL", + " \\[\\]\n": "TO_EQUAL", + "~~~\n\\[\\]\n~~~\n": "TO_EQUAL", + "\n": "NOT_TO_EQUAL", + "
\n": "TO_EQUAL", + "[foo](/bar\\* \"ti\\*tle\")\n": "TO_EQUAL", + "[foo]\n\n[foo]: /bar\\* \"ti\\*tle\"\n": "TO_EQUAL", + "``` foo\\+bar\nfoo\n```\n": "TO_EQUAL", + "  & © Æ Ď\n¾ ℋ ⅆ\n∲ ≧̸\n": "NOT_TO_EQUAL", + "# Ӓ Ϡ � �\n": "NOT_TO_EQUAL", + "" ആ ಫ\n": "NOT_TO_EQUAL", + "  &x; &#; &#x;\n&ThisIsNotDefined; &hi?;\n": "NOT_TO_EQUAL", + "©\n": "NOT_TO_EQUAL", + "&MadeUpEntity;\n": "NOT_TO_EQUAL", + "\n": "TO_EQUAL", + "[foo](/föö \"föö\")\n": "TO_EQUAL", + "[foo]\n\n[foo]: /föö \"föö\"\n": "TO_EQUAL", + "``` föö\nfoo\n```\n": "TO_EQUAL", + "`föö`\n": "NOT_TO_EQUAL", + " föfö\n": "NOT_TO_EQUAL", + "`foo`\n": "TO_EQUAL", + "`` foo ` bar ``\n": "TO_EQUAL", + "` `` `\n": "TO_EQUAL", + "`foo bar\n baz`\n": "TO_EQUAL", + "`a b`\n": "NOT_TO_EQUAL", + "`foo `` bar`\n": "TO_EQUAL", + "`foo\\`bar`\n": "TO_EQUAL", + "*foo`*`\n": "NOT_TO_EQUAL", + "[not a `link](/foo`)\n": "NOT_TO_EQUAL", + "``\n": "NOT_TO_EQUAL", + "`\n": "TO_EQUAL", + "``\n": "NOT_TO_EQUAL", + "`\n": "TO_EQUAL", + "```foo``\n": "NOT_TO_EQUAL", + "`foo\n": "TO_EQUAL", + "`foo``bar``\n": "NOT_TO_EQUAL", + "*foo bar*\n": "TO_EQUAL", + "a * foo bar*\n": "NOT_TO_EQUAL", + "a*\"foo\"*\n": "NOT_TO_EQUAL", + "* a *\n": "NOT_TO_EQUAL", + "foo*bar*\n": "TO_EQUAL", + "5*6*78\n": "NOT_TO_EQUAL", + "_foo bar_\n": "TO_EQUAL", + "_ foo bar_\n": "NOT_TO_EQUAL", + "a_\"foo\"_\n": "NOT_TO_EQUAL", + "foo_bar_\n": "NOT_TO_EQUAL", + "5_6_78\n": "TO_EQUAL", + "пристаням_стремятся_\n": "NOT_TO_EQUAL", + "aa_\"bb\"_cc\n": "NOT_TO_EQUAL", + "foo-_(bar)_\n": "TO_EQUAL", + "_foo*\n": "TO_EQUAL", + "*foo bar *\n": "NOT_TO_EQUAL", + "*foo bar\n*\n": "NOT_TO_EQUAL", + "*(*foo)\n": "NOT_TO_EQUAL", + "*(*foo*)*\n": "NOT_TO_EQUAL", + "*foo*bar\n": "NOT_TO_EQUAL", + "_foo bar _\n": "NOT_TO_EQUAL", + "_(_foo)\n": "TO_EQUAL", + "_(_foo_)_\n": "NOT_TO_EQUAL", + "_foo_bar\n": "TO_EQUAL", + "_пристаням_стремятся\n": "NOT_TO_EQUAL", + "_foo_bar_baz_\n": "TO_EQUAL", + "_(bar)_.\n": "TO_EQUAL", + "**foo bar**\n": "TO_EQUAL", + "** foo bar**\n": "NOT_TO_EQUAL", + "a**\"foo\"**\n": "NOT_TO_EQUAL", + "foo**bar**\n": "TO_EQUAL", + "__foo bar__\n": "TO_EQUAL", + "__ foo bar__\n": "NOT_TO_EQUAL", + "__\nfoo bar__\n": "NOT_TO_EQUAL", + "a__\"foo\"__\n": "NOT_TO_EQUAL", + "foo__bar__\n": "NOT_TO_EQUAL", + "5__6__78\n": "NOT_TO_EQUAL", + "пристаням__стремятся__\n": "NOT_TO_EQUAL", + "__foo, __bar__, baz__\n": "NOT_TO_EQUAL", + "foo-__(bar)__\n": "TO_EQUAL", + "**foo bar **\n": "NOT_TO_EQUAL", + "**(**foo)\n": "NOT_TO_EQUAL", + "*(**foo**)*\n": "TO_EQUAL", + "**Gomphocarpus (*Gomphocarpus physocarpus*, syn.\n*Asclepias physocarpa*)**\n": "TO_EQUAL", + "**foo \"*bar*\" foo**\n": "NOT_TO_EQUAL", + "**foo**bar\n": "TO_EQUAL", + "__foo bar __\n": "NOT_TO_EQUAL", + "__(__foo)\n": "NOT_TO_EQUAL", + "_(__foo__)_\n": "TO_EQUAL", + "__foo__bar\n": "NOT_TO_EQUAL", + "__пристаням__стремятся\n": "NOT_TO_EQUAL", + "__foo__bar__baz__\n": "NOT_TO_EQUAL", + "__(bar)__.\n": "TO_EQUAL", + "*foo [bar](/url)*\n": "TO_EQUAL", + "*foo\nbar*\n": "TO_EQUAL", + "_foo __bar__ baz_\n": "TO_EQUAL", + "_foo _bar_ baz_\n": "NOT_TO_EQUAL", + "__foo_ bar_\n": "NOT_TO_EQUAL", + "*foo *bar**\n": "NOT_TO_EQUAL", + "*foo **bar** baz*\n": "TO_EQUAL", + "*foo**bar**baz*\n": "TO_EQUAL", + "***foo** bar*\n": "NOT_TO_EQUAL", + "*foo **bar***\n": "NOT_TO_EQUAL", + "*foo**bar***\n": "NOT_TO_EQUAL", + "*foo **bar *baz* bim** bop*\n": "NOT_TO_EQUAL", + "*foo [*bar*](/url)*\n": "NOT_TO_EQUAL", + "** is not an empty emphasis\n": "TO_EQUAL", + "**** is not an empty strong emphasis\n": "TO_EQUAL", + "**foo [bar](/url)**\n": "TO_EQUAL", + "**foo\nbar**\n": "TO_EQUAL", + "__foo _bar_ baz__\n": "TO_EQUAL", + "__foo __bar__ baz__\n": "NOT_TO_EQUAL", + "____foo__ bar__\n": "NOT_TO_EQUAL", + "**foo **bar****\n": "NOT_TO_EQUAL", + "**foo *bar* baz**\n": "TO_EQUAL", + "**foo*bar*baz**\n": "NOT_TO_EQUAL", + "***foo* bar**\n": "TO_EQUAL", + "**foo *bar***\n": "TO_EQUAL", + "**foo *bar **baz**\nbim* bop**\n": "NOT_TO_EQUAL", + "**foo [*bar*](/url)**\n": "TO_EQUAL", + "__ is not an empty emphasis\n": "TO_EQUAL", + "____ is not an empty strong emphasis\n": "TO_EQUAL", + "foo ***\n": "TO_EQUAL", + "foo *\\**\n": "NOT_TO_EQUAL", + "foo *_*\n": "NOT_TO_EQUAL", + "foo *****\n": "NOT_TO_EQUAL", + "foo **\\***\n": "TO_EQUAL", + "foo **_**\n": "TO_EQUAL", + "**foo*\n": "TO_EQUAL", + "*foo**\n": "NOT_TO_EQUAL", + "***foo**\n": "NOT_TO_EQUAL", + "****foo*\n": "NOT_TO_EQUAL", + "**foo***\n": "NOT_TO_EQUAL", + "*foo****\n": "NOT_TO_EQUAL", + "foo ___\n": "TO_EQUAL", + "foo _\\__\n": "NOT_TO_EQUAL", + "foo _*_\n": "TO_EQUAL", + "foo _____\n": "NOT_TO_EQUAL", + "foo __\\___\n": "TO_EQUAL", + "foo __*__\n": "TO_EQUAL", + "__foo_\n": "TO_EQUAL", + "_foo__\n": "NOT_TO_EQUAL", + "___foo__\n": "NOT_TO_EQUAL", + "____foo_\n": "NOT_TO_EQUAL", + "__foo___\n": "NOT_TO_EQUAL", + "_foo____\n": "NOT_TO_EQUAL", + "**foo**\n": "TO_EQUAL", + "*_foo_*\n": "NOT_TO_EQUAL", + "__foo__\n": "TO_EQUAL", + "_*foo*_\n": "NOT_TO_EQUAL", + "****foo****\n": "NOT_TO_EQUAL", + "____foo____\n": "NOT_TO_EQUAL", + "******foo******\n": "NOT_TO_EQUAL", + "***foo***\n": "TO_EQUAL", + "_____foo_____\n": "NOT_TO_EQUAL", + "*foo _bar* baz_\n": "TO_EQUAL", + "*foo __bar *baz bim__ bam*\n": "NOT_TO_EQUAL", + "**foo **bar baz**\n": "NOT_TO_EQUAL", + "*foo *bar baz*\n": "NOT_TO_EQUAL", + "*[bar*](/url)\n": "NOT_TO_EQUAL", + "_foo [bar_](/url)\n": "NOT_TO_EQUAL", + "*\n": "NOT_TO_EQUAL", + "**\n": "NOT_TO_EQUAL", + "__\n": "NOT_TO_EQUAL", + "*a `*`*\n": "NOT_TO_EQUAL", + "_a `_`_\n": "NOT_TO_EQUAL", + "**a\n": "NOT_TO_EQUAL", + "__a\n": "NOT_TO_EQUAL", + "[link](/uri \"title\")\n": "TO_EQUAL", + "[link](/uri)\n": "TO_EQUAL", + "[link]()\n": "TO_EQUAL", + "[link](<>)\n": "TO_EQUAL", + "[link](/my uri)\n": "TO_EQUAL", + "[link]()\n": "NOT_TO_EQUAL", + "[link](foo\nbar)\n": "TO_EQUAL", + "[link]()\n": "TO_EQUAL", + "[link](\\(foo\\))\n": "TO_EQUAL", + "[link](foo(and(bar)))\n": "TO_EQUAL", + "[link](foo\\(and\\(bar\\))\n": "TO_EQUAL", + "[link]()\n": "TO_EQUAL", + "[link](foo\\)\\:)\n": "TO_EQUAL", + "[link](#fragment)\n\n[link](http://example.com#fragment)\n\n[link](http://example.com?foo=3#frag)\n": "TO_EQUAL", + "[link](foo\\bar)\n": "TO_EQUAL", + "[link](foo%20bä)\n": "TO_EQUAL", + "[link](\"title\")\n": "TO_EQUAL", + "[link](/url \"title\")\n[link](/url 'title')\n[link](/url (title))\n": "TO_EQUAL", + "[link](/url \"title \\\""\")\n": "NOT_TO_EQUAL", + "[link](/url \"title\")\n": "NOT_TO_EQUAL", + "[link](/url \"title \"and\" title\")\n": "NOT_TO_EQUAL", + "[link](/url 'title \"and\" title')\n": "NOT_TO_EQUAL", + "[link]( /uri\n \"title\" )\n": "TO_EQUAL", + "[link] (/uri)\n": "NOT_TO_EQUAL", + "[link [foo [bar]]](/uri)\n": "NOT_TO_EQUAL", + "[link] bar](/uri)\n": "TO_EQUAL", + "[link [bar](/uri)\n": "TO_EQUAL", + "[link \\[bar](/uri)\n": "NOT_TO_EQUAL", + "[link *foo **bar** `#`*](/uri)\n": "TO_EQUAL", + "[![moon](moon.jpg)](/uri)\n": "NOT_TO_EQUAL", + "[foo [bar](/uri)](/uri)\n": "NOT_TO_EQUAL", + "[foo *[bar [baz](/uri)](/uri)*](/uri)\n": "NOT_TO_EQUAL", + "![[[foo](uri1)](uri2)](uri3)\n": "NOT_TO_EQUAL", + "*[foo*](/uri)\n": "NOT_TO_EQUAL", + "[foo *bar](baz*)\n": "TO_EQUAL", + "*foo [bar* baz]\n": "TO_EQUAL", + "[foo \n": "NOT_TO_EQUAL", + "[foo`](/uri)`\n": "NOT_TO_EQUAL", + "[foo\n": "NOT_TO_EQUAL", + "[foo][bar]\n\n[bar]: /url \"title\"\n": "TO_EQUAL", + "[link [foo [bar]]][ref]\n\n[ref]: /uri\n": "NOT_TO_EQUAL", + "[link \\[bar][ref]\n\n[ref]: /uri\n": "NOT_TO_EQUAL", + "[link *foo **bar** `#`*][ref]\n\n[ref]: /uri\n": "TO_EQUAL", + "[![moon](moon.jpg)][ref]\n\n[ref]: /uri\n": "NOT_TO_EQUAL", + "[foo [bar](/uri)][ref]\n\n[ref]: /uri\n": "NOT_TO_EQUAL", + "[foo *bar [baz][ref]*][ref]\n\n[ref]: /uri\n": "NOT_TO_EQUAL", + "*[foo*][ref]\n\n[ref]: /uri\n": "NOT_TO_EQUAL", + "[foo *bar][ref]\n\n[ref]: /uri\n": "TO_EQUAL", + "[foo \n\n[ref]: /uri\n": "NOT_TO_EQUAL", + "[foo`][ref]`\n\n[ref]: /uri\n": "NOT_TO_EQUAL", + "[foo\n\n[ref]: /uri\n": "NOT_TO_EQUAL", + "[foo][BaR]\n\n[bar]: /url \"title\"\n": "TO_EQUAL", + "[Толпой][Толпой] is a Russian word.\n\n[ТОЛПОЙ]: /url\n": "TO_EQUAL", + "[Foo\n bar]: /url\n\n[Baz][Foo bar]\n": "TO_EQUAL", + "[foo] [bar]\n\n[bar]: /url \"title\"\n": "NOT_TO_EQUAL", + "[foo]\n[bar]\n\n[bar]: /url \"title\"\n": "NOT_TO_EQUAL", + "[foo]: /url1\n\n[foo]: /url2\n\n[bar][foo]\n": "NOT_TO_EQUAL", + "[bar][foo\\!]\n\n[foo!]: /url\n": "NOT_TO_EQUAL", + "[foo][ref[]\n\n[ref[]: /uri\n": "NOT_TO_EQUAL", + "[foo][ref[bar]]\n\n[ref[bar]]: /uri\n": "NOT_TO_EQUAL", + "[[[foo]]]\n\n[[[foo]]]: /url\n": "TO_EQUAL", + "[foo][ref\\[]\n\n[ref\\[]: /uri\n": "TO_EQUAL", + "[bar\\\\]: /uri\n\n[bar\\\\]\n": "NOT_TO_EQUAL", + "[]\n\n[]: /uri\n": "TO_EQUAL", + "[\n ]\n\n[\n ]: /uri\n": "NOT_TO_EQUAL", + "[foo][]\n\n[foo]: /url \"title\"\n": "TO_EQUAL", + "[*foo* bar][]\n\n[*foo* bar]: /url \"title\"\n": "TO_EQUAL", + "[Foo][]\n\n[foo]: /url \"title\"\n": "TO_EQUAL", + "[foo] \n[]\n\n[foo]: /url \"title\"\n": "NOT_TO_EQUAL", + "[foo]\n\n[foo]: /url \"title\"\n": "TO_EQUAL", + "[*foo* bar]\n\n[*foo* bar]: /url \"title\"\n": "TO_EQUAL", + "[[*foo* bar]]\n\n[*foo* bar]: /url \"title\"\n": "TO_EQUAL", + "[[bar [foo]\n\n[foo]: /url\n": "TO_EQUAL", + "[Foo]\n\n[foo]: /url \"title\"\n": "TO_EQUAL", + "[foo] bar\n\n[foo]: /url\n": "TO_EQUAL", + "\\[foo]\n\n[foo]: /url \"title\"\n": "TO_EQUAL", + "[foo*]: /url\n\n*[foo*]\n": "NOT_TO_EQUAL", + "[foo][bar]\n\n[foo]: /url1\n[bar]: /url2\n": "TO_EQUAL", + "[foo][]\n\n[foo]: /url1\n": "TO_EQUAL", + "[foo]()\n\n[foo]: /url1\n": "TO_EQUAL", + "[foo](not a link)\n\n[foo]: /url1\n": "TO_EQUAL", + "[foo][bar][baz]\n\n[baz]: /url\n": "NOT_TO_EQUAL", + "[foo][bar][baz]\n\n[baz]: /url1\n[bar]: /url2\n": "TO_EQUAL", + "[foo][bar][baz]\n\n[baz]: /url1\n[foo]: /url2\n": "NOT_TO_EQUAL", + "![foo](/url \"title\")\n": "NOT_TO_EQUAL", + "![foo *bar*]\n\n[foo *bar*]: train.jpg \"train & tracks\"\n": "NOT_TO_EQUAL", + "![foo ![bar](/url)](/url2)\n": "NOT_TO_EQUAL", + "![foo [bar](/url)](/url2)\n": "NOT_TO_EQUAL", + "![foo *bar*][]\n\n[foo *bar*]: train.jpg \"train & tracks\"\n": "NOT_TO_EQUAL", + "![foo *bar*][foobar]\n\n[FOOBAR]: train.jpg \"train & tracks\"\n": "NOT_TO_EQUAL", + "![foo](train.jpg)\n": "NOT_TO_EQUAL", + "My ![foo bar](/path/to/train.jpg \"title\" )\n": "NOT_TO_EQUAL", + "![foo]()\n": "NOT_TO_EQUAL", + "![](/url)\n": "NOT_TO_EQUAL", + "![foo][bar]\n\n[bar]: /url\n": "NOT_TO_EQUAL", + "![foo][bar]\n\n[BAR]: /url\n": "NOT_TO_EQUAL", + "![foo][]\n\n[foo]: /url \"title\"\n": "NOT_TO_EQUAL", + "![*foo* bar][]\n\n[*foo* bar]: /url \"title\"\n": "NOT_TO_EQUAL", + "![Foo][]\n\n[foo]: /url \"title\"\n": "NOT_TO_EQUAL", + "![foo] \n[]\n\n[foo]: /url \"title\"\n": "NOT_TO_EQUAL", + "![foo]\n\n[foo]: /url \"title\"\n": "NOT_TO_EQUAL", + "![*foo* bar]\n\n[*foo* bar]: /url \"title\"\n": "NOT_TO_EQUAL", + "![[foo]]\n\n[[foo]]: /url \"title\"\n": "NOT_TO_EQUAL", + "![Foo]\n\n[foo]: /url \"title\"\n": "NOT_TO_EQUAL", + "!\\[foo]\n\n[foo]: /url \"title\"\n": "TO_EQUAL", + "\\![foo]\n\n[foo]: /url \"title\"\n": "NOT_TO_EQUAL", + "\n": "TO_EQUAL", + "\n": "NOT_TO_EQUAL", + "\n": "TO_EQUAL", + "\n": "NOT_TO_EQUAL", + "\n": "NOT_TO_EQUAL", + "\n": "TO_EQUAL", + "\n": "TO_EQUAL", + "\n": "NOT_TO_EQUAL", + "\n": "NOT_TO_EQUAL", + "\n": "NOT_TO_EQUAL", + "\n": "TO_EQUAL", + "\n": "TO_EQUAL", + "\n": "NOT_TO_EQUAL", + "<>\n": "NOT_TO_EQUAL", + "< http://foo.bar >\n": "NOT_TO_EQUAL", + "\n": "NOT_TO_EQUAL", + "\n": "NOT_TO_EQUAL", + "http://example.com\n": "TO_EQUAL", + "foo@bar.example.com\n": "TO_EQUAL", + "\n": "TO_EQUAL", + "\n": "TO_EQUAL", + "\n": "TO_EQUAL", + "\n": "TO_EQUAL", + "Foo \n": "TO_EQUAL", + "<33> <__>\n": "NOT_TO_EQUAL", + "\n": "NOT_TO_EQUAL", + " \n": "NOT_TO_EQUAL", + "< a><\nfoo>\n": "NOT_TO_EQUAL", + "\n": "NOT_TO_EQUAL", + "\n": "TO_EQUAL", + "\n": "NOT_TO_EQUAL", + "foo \n": "TO_EQUAL", + "foo \n": "NOT_TO_EQUAL", + "foo foo -->\n\nfoo \n": "NOT_TO_EQUAL", + "foo \n": "TO_EQUAL", + "foo \n": "TO_EQUAL", + "foo &<]]>\n": "NOT_TO_EQUAL", + "foo \n": "TO_EQUAL", + "foo \n": "TO_EQUAL", + "\n": "NOT_TO_EQUAL", + "foo \nbaz\n": "NOT_TO_EQUAL", + "foo\\\nbaz\n": "NOT_TO_EQUAL", + "foo \nbaz\n": "NOT_TO_EQUAL", + "foo \n bar\n": "NOT_TO_EQUAL", + "foo\\\n bar\n": "NOT_TO_EQUAL", + "*foo \nbar*\n": "NOT_TO_EQUAL", + "*foo\\\nbar*\n": "NOT_TO_EQUAL", + "`code \nspan`\n": "TO_EQUAL", + "`code\\\nspan`\n": "TO_EQUAL", + "\n": "TO_EQUAL", + "\n": "TO_EQUAL", + "foo\\\n": "TO_EQUAL", + "foo \n": "TO_EQUAL", + "### foo\\\n": "TO_EQUAL", + "### foo \n": "TO_EQUAL", + "foo\nbaz\n": "TO_EQUAL", + "foo \n baz\n": "TO_EQUAL", + "hello $.;'there\n": "TO_EQUAL", + "Foo χρῆν\n": "TO_EQUAL", + "Multiple spaces\n": "TO_EQUAL" +} \ No newline at end of file diff --git a/packages/netlify-cms-widget-markdown/src/serializers/__tests__/commonmark.spec.js b/packages/netlify-cms-widget-markdown/src/serializers/__tests__/commonmark.spec.js index 56a4f1d3..f4a82cc3 100644 --- a/packages/netlify-cms-widget-markdown/src/serializers/__tests__/commonmark.spec.js +++ b/packages/netlify-cms-widget-markdown/src/serializers/__tests__/commonmark.spec.js @@ -1,5 +1,6 @@ import { flow, trim } from 'lodash'; import commonmarkSpec from './__fixtures__/commonmark.json'; +import expected from './__fixtures__/commonmarkExpected.json'; import { markdownToSlate, slateToMarkdown, markdownToHtml } from '../index.js'; /** @@ -18,13 +19,27 @@ const process = flow([markdownToSlate, slateToMarkdown, markdownToHtml]); /** * Passing this test suite requires 100% Commonmark compliance. There are 624 * tests, of which we're passing about 300 as of introduction of this suite. To - * work on improving Commonmark support, remove `.skip` from this `describe` - * and run the test suite locally. + * work on improving Commonmark support, update __fixtures__/commonmarkExpected.json */ -describe.skip('Commonmark support', () => { + +describe('Commonmark support', () => { test.each(spec)('%s', (markdown, html) => { // We're trimming the html from the spec as they all have trailing newlines // and we never output trailing newlines. This may be a compliance issue. - expect(process(markdown)).toEqual(trim(html)); + const trimmedHtml = trim(html); + + switch (expected[markdown]) { + case 'TO_EQUAL': + expect(process(markdown)).toEqual(trimmedHtml); + break; + case 'NOT_TO_EQUAL': + expect(process(markdown)).not.toEqual(trimmedHtml); + break; + case 'TO_ERROR': + expect(() => process(markdown)).toThrowError(); + break; + default: + throw new Error('Unknown expected type: ' + expected[markdown]); + } }); }); diff --git a/packages/netlify-cms-widget-markdown/src/serializers/__tests__/slate.spec.js b/packages/netlify-cms-widget-markdown/src/serializers/__tests__/slate.spec.js index 5c279df3..65a30120 100644 --- a/packages/netlify-cms-widget-markdown/src/serializers/__tests__/slate.spec.js +++ b/packages/netlify-cms-widget-markdown/src/serializers/__tests__/slate.spec.js @@ -87,291 +87,4 @@ describe('slate', () => { }; expect(slateToMarkdown(slateAst)).toEqual('foo **bar**'); }); - - describe.skip('with nested styles within a single word', () => { - it('should not produce invalid markdown when a bold word has italics applied to a smaller part', () => { - const slateAst = { - object: 'block', - type: 'root', - nodes: [ - { - object: 'block', - type: 'paragraph', - nodes: [ - { - object: 'text', - data: undefined, - leaves: [ - { text: 'h', marks: [{ type: 'bold' }] }, - { text: 'e', marks: [{ type: 'bold' }, { type: 'italic' }] }, - { text: 'y', marks: [{ type: 'bold' }] }, - ], - }, - ], - }, - ], - }; - expect(slateToMarkdown(slateAst)).toEqual('**h**_**e**_**y**'); - }); - - it('should not produce invalid markdown when an italic word has bold applied to a smaller part', () => { - const slateAst = { - object: 'block', - type: 'root', - nodes: [ - { - object: 'block', - type: 'paragraph', - nodes: [ - { - object: 'text', - data: undefined, - leaves: [ - { text: 'h', marks: [{ type: 'italic' }] }, - { text: 'e', marks: [{ type: 'italic' }, { type: 'bold' }] }, - { text: 'y', marks: [{ type: 'italic' }] }, - ], - }, - ], - }, - ], - }; - expect(slateToMarkdown(slateAst)).toEqual('_h**_e_**y_'); - }); - - it('should not produce invalid markdown when an italic word has bold applied to a smaller part', () => { - const slateAst = { - object: 'block', - type: 'root', - nodes: [ - { - object: 'block', - type: 'paragraph', - nodes: [ - { - object: 'text', - data: undefined, - leaves: [ - { text: 'h', marks: [{ type: 'italic' }] }, - { text: 'e', marks: [{ type: 'italic' }, { type: 'bold' }] }, - { text: 'y', marks: [{ type: 'italic' }] }, - ], - }, - ], - }, - ], - }; - expect(slateToMarkdown(slateAst)).toEqual('_h**_e_**y_'); - }); - - it('should handle italics inside bold inside strikethrough', () => { - const slateAst = { - object: 'block', - type: 'root', - nodes: [ - { - object: 'block', - type: 'paragraph', - nodes: [ - { - object: 'text', - data: undefined, - leaves: [ - { text: 'h', marks: [{ type: 'strikethrough' }] }, - { - text: 'e', - marks: [{ type: 'strikethrough' }, { type: 'bold' }], - }, - { - text: 'l', - marks: [{ type: 'strikethrough' }, { type: 'bold' }, { type: 'italic' }], - }, - { - text: 'l', - marks: [{ type: 'strikethrough' }, { type: 'bold' }], - }, - { text: 'o', marks: [{ type: 'strikethrough' }] }, - ], - }, - ], - }, - ], - }; - - expect(slateToMarkdown(slateAst)).toEqual('~~h~~**~~e~~**_~~**l**~~_**~~l~~**~~o~~'); - }); - - it('should handle bold inside italics inside strikethrough', () => { - const slateAst = { - object: 'block', - type: 'root', - nodes: [ - { - object: 'block', - type: 'paragraph', - nodes: [ - { - object: 'text', - data: undefined, - leaves: [ - { text: 'h', marks: [{ type: 'strikethrough' }] }, - { - text: 'e', - marks: [{ type: 'strikethrough' }, { type: 'italic' }], - }, - { - text: 'l', - marks: [{ type: 'strikethrough' }, { type: 'italic' }, { type: 'bold' }], - }, - { - text: 'l', - marks: [{ type: 'strikethrough' }, { type: 'italic' }], - }, - { text: 'o', marks: [{ type: 'strikethrough' }] }, - ], - }, - ], - }, - ], - }; - - expect(slateToMarkdown(slateAst)).toEqual('~~h~~_~~e~~_**_~~l~~_**_~~l~~_~~o~~'); - }); - - it('should handle strikethrough inside italics inside bold', () => { - const slateAst = { - object: 'block', - type: 'root', - nodes: [ - { - object: 'block', - type: 'paragraph', - nodes: [ - { - object: 'text', - data: undefined, - leaves: [ - { text: 'h', marks: [{ type: 'bold' }] }, - { text: 'e', marks: [{ type: 'bold' }, { type: 'italic' }] }, - { - text: 'l', - marks: [{ type: 'bold' }, { type: 'italic' }, { type: 'strikethrough' }], - }, - { text: 'l', marks: [{ type: 'bold' }, { type: 'italic' }] }, - { text: 'o', marks: [{ type: 'bold' }] }, - ], - }, - ], - }, - ], - }; - - expect(slateToMarkdown(slateAst)).toEqual('**h**_**e**_~~**_l_**~~_**l**_**o**'); - }); - - it('should handle italics inside strikethrough inside bold', () => { - const slateAst = { - object: 'block', - type: 'root', - nodes: [ - { - object: 'block', - type: 'paragraph', - nodes: [ - { - object: 'text', - data: undefined, - leaves: [ - { text: 'h', marks: [{ type: 'bold' }] }, - { - text: 'e', - marks: [{ type: 'bold' }, { type: 'strikethrough' }], - }, - { - text: 'l', - marks: [{ type: 'bold' }, { type: 'strikethrough' }, { type: 'italic' }], - }, - { - text: 'l', - marks: [{ type: 'bold' }, { type: 'strikethrough' }], - }, - { text: 'o', marks: [{ type: 'bold' }] }, - ], - }, - ], - }, - ], - }; - - expect(slateToMarkdown(slateAst)).toEqual('**h**~~**e**~~_~~**l**~~_~~**l**~~**o**'); - }); - - it('should handle strikethrough inside bold inside italics', () => { - const slateAst = { - object: 'block', - type: 'root', - nodes: [ - { - object: 'block', - type: 'paragraph', - nodes: [ - { - object: 'text', - data: undefined, - leaves: [ - { text: 'h', marks: [{ type: 'italic' }] }, - { text: 'e', marks: [{ type: 'italic' }, { type: 'bold' }] }, - { - text: 'l', - marks: [{ type: 'italic' }, { type: 'bold' }, { type: 'strikethrough' }], - }, - { text: 'l', marks: [{ type: 'italic' }, { type: 'bold' }] }, - { text: 'o', marks: [{ type: 'italic' }] }, - ], - }, - ], - }, - ], - }; - - expect(slateToMarkdown(slateAst)).toEqual('_h_**_e_**~~**_l_**~~**_l_**_o_'); - }); - - it('should handle bold inside strikethrough inside italics', () => { - const slateAst = { - object: 'block', - type: 'root', - nodes: [ - { - object: 'block', - type: 'paragraph', - nodes: [ - { - object: 'text', - data: undefined, - leaves: [ - { text: 'h', marks: [{ type: 'italic' }] }, - { - text: 'e', - marks: [{ type: 'italic' }, { type: 'strikethrough' }], - }, - { - text: 'l', - marks: [{ type: 'italic' }, { type: 'strikethrough' }, { type: 'bold' }], - }, - { - text: 'l', - marks: [{ type: 'italic' }, { type: 'strikethrough' }], - }, - { text: 'o', marks: [{ type: 'italic' }] }, - ], - }, - ], - }, - ], - }; - - expect(slateToMarkdown(slateAst)).toEqual('_h_~~_e_~~**_~~l~~_**~~_l_~~_o_'); - }); - }); });