import assert from 'node:assert/strict' import test from 'node:test' import type { LinkDefinition } from './link-reference-definitions.ts' import { parseBlocks } from './blocks.ts' function definitions(markdown: string): [string, LinkDefinition][] { return [...parseBlocks(markdown).definitions] } function kinds(markdown: string): string[] { return parseBlocks(markdown).blocks.map((block) => block.kind) } test('keeps the link reference definitions a paragraph gives up, the first of a label winning', () => { assert.deepEqual(definitions('[a]: /url\n'), [['a', { destination: '/url' }]]) assert.deepEqual(definitions('[Foo Bar]:\n\n"Title"\n'), [['foo bar', { destination: 'the url', title: 'Title' }]]) assert.deepEqual(definitions("[a]: /url 'One'\n[a]: /other (Two)\n[b]: /b\n"), [ ['a', { destination: '/url', title: 'One' }], ['b', { destination: '/b' }], ]) assert.deepEqual(definitions('[a\\]b]: /url\n'), [['a\\]b', { destination: '/url' }]]) assert.deepEqual(definitions('[a]: /url(x)y\n'), [['a', { destination: '/url(x)y' }]]) assert.deepEqual(definitions('[a]: /url\\(x\n'), [['a', { destination: '/url\\(x' }]]) assert.deepEqual(definitions('[a]: <>\n'), [['a', { destination: '' }]]) assert.deepEqual(definitions('[a]: /url "He said \\"hi\\""\n'), [['a', { destination: '/url', title: 'He said \\"hi\\"' }]]) assert.deepEqual(definitions('[a]: /url\\\n[b]: /b\n'), [ ['a', { destination: '/url\\' }], ['b', { destination: '/b' }], ]) assert.deepEqual(definitions('[\u00a0a]: /one\n[a]: /two\n'), [ ['\u00a0a', { destination: '/one' }], ['a', { destination: '/two' }], ]) }) test('leaves the paragraph a line no definition spells', () => { assert.deepEqual(definitions('[]: /url\n'), []) assert.deepEqual(definitions('[ ]: /url\n'), []) assert.deepEqual(definitions('[a]: closed>\n'), []) assert.deepEqual(definitions('[a]: { assert.deepEqual(kinds('
\nx\n\nPart.\n'), ['html', 'paragraph']) assert.deepEqual(kinds('\nPart.\n'), ['html', 'paragraph']) assert.deepEqual(kinds('
x
\nPart.\n'), ['html', 'paragraph']) assert.deepEqual(kinds('
\nx\n'), ['html']) assert.deepEqual(kinds('Part.\n
\n'), ['paragraph', 'html']) }) test('carries a claimed line as the block it opens, the refusal the node layer builds', () => { assert.deepEqual(kinds(':::\nPart.\n'), ['claim', 'paragraph']) assert.deepEqual(kinds('Part.\n| x |\n'), ['paragraph', 'claim']) })