Add list tests
This commit is contained in:
parent
afbc1ccf9f
commit
6d864bfedb
5 changed files with 1099 additions and 76 deletions
3
jest.config.js
Normal file
3
jest.config.js
Normal file
|
@ -0,0 +1,3 @@
|
|||
module.exports = {
|
||||
testEnvironment: 'jsdom',
|
||||
};
|
1122
package-lock.json
generated
1122
package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
@ -69,6 +69,7 @@
|
|||
"html-loader": "4.2.0",
|
||||
"html-webpack-plugin": "5.5.0",
|
||||
"jest": "29.0.3",
|
||||
"jest-environment-jsdom": "29.1.2",
|
||||
"mini-css-extract-plugin": "2.6.1",
|
||||
"path-browserify": "1.0.1",
|
||||
"sass": "1.55.0",
|
||||
|
|
|
@ -153,11 +153,22 @@ const markdownRules = {
|
|||
|
||||
state._list = oldList;
|
||||
|
||||
if (!state._list) {
|
||||
if (state._list) {
|
||||
items = `\n${items}`;
|
||||
} else {
|
||||
items += '\n\n';
|
||||
}
|
||||
return items;
|
||||
},
|
||||
html: (node, output, state) => {
|
||||
const items = node.items
|
||||
.map((item) => htmlTag('li', output(item, state)))
|
||||
.join('');
|
||||
|
||||
return htmlTag(node.ordered ? 'ol' : 'ul', items, {
|
||||
start: node.start === 1 ? undefined : node.start,
|
||||
});
|
||||
},
|
||||
},
|
||||
def: undefined,
|
||||
table: {
|
||||
|
@ -358,7 +369,7 @@ function mapElement(el) {
|
|||
return false;
|
||||
});
|
||||
}
|
||||
return [{ type: 'codeBlock', lang, content: el.innerText }];
|
||||
return [{ type: 'codeBlock', lang, content: el.textContent }];
|
||||
}
|
||||
case 'BLOCKQUOTE':
|
||||
return [{ type: 'blockQuote', content: mapChildren(el) }];
|
||||
|
@ -368,7 +379,7 @@ function mapElement(el) {
|
|||
return [{
|
||||
type: 'list',
|
||||
ordered: true,
|
||||
start: Number(el.getAttribute('start')),
|
||||
start: Number(el.getAttribute('start')) || 1,
|
||||
items: Array.from(el.childNodes).map(mapNode),
|
||||
}];
|
||||
case 'TABLE': {
|
||||
|
@ -433,7 +444,7 @@ function mapElement(el) {
|
|||
case 'STRIKE':
|
||||
return [{ type: 'del', content: mapChildren(el) }];
|
||||
case 'CODE':
|
||||
return [{ type: 'inlineCode', content: el.innerText }];
|
||||
return [{ type: 'inlineCode', content: el.textContent }];
|
||||
|
||||
case 'DIV':
|
||||
if (el.hasAttribute('data-mx-maths')) {
|
||||
|
|
|
@ -1,17 +1,21 @@
|
|||
/* eslint-disable no-param-reassign */
|
||||
/* eslint-disable no-undef */
|
||||
|
||||
import { markdown } from './markdown';
|
||||
import { html, markdown } from './markdown';
|
||||
|
||||
function mdTest(source, plain, html) {
|
||||
function mdTest(source, plain, htmlStr) {
|
||||
test(source, () => {
|
||||
if (html === undefined) {
|
||||
html = plain;
|
||||
if (htmlStr === undefined) {
|
||||
htmlStr = plain;
|
||||
plain = source;
|
||||
}
|
||||
|
||||
const content = markdown(source, { kind: 'edit' });
|
||||
expect(content.plain).toBe(plain);
|
||||
expect(content.html).toBe(html);
|
||||
expect(content.html).toBe(htmlStr);
|
||||
|
||||
const htmlContent = html(htmlStr, { kind: 'edit', onlyPlain: true });
|
||||
expect(htmlContent.plain).toBe(plain);
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -85,3 +89,19 @@ describe('blockquote', () => {
|
|||
|
||||
mdTest('> quote\n\ntext after', '<blockquote>quote</blockquote>text after');
|
||||
});
|
||||
|
||||
describe('list', () => {
|
||||
mdTest('* item1\n* item2', '<ul><li>item1</li><li>item2</li></ul>');
|
||||
mdTest('- item1\n- item2', '* item1\n* item2', '<ul><li>item1</li><li>item2</li></ul>');
|
||||
|
||||
mdTest('1. item1\n2. item2', '<ol><li>item1</li><li>item2</li></ol>');
|
||||
mdTest('2. item2\n3. item3', '<ol start="2"><li>item2</li><li>item3</li></ol>');
|
||||
|
||||
mdTest('* item1\n * subitem1\n * subitem2\n* item2', '<ul><li>item1<ul><li>subitem1</li><li>subitem2</li></ul></li><li>item2</li></ul>');
|
||||
|
||||
const elementHtml = '<ul><li>item1<ul><li>subitem1</li><li>subitem2</li></ul></li><li>item2</li></ul>';
|
||||
test(elementHtml, () => {
|
||||
const content = html(elementHtml, { kind: 'edit', onlyPlain: true });
|
||||
expect(content.plain).toBe('* item1\n * subitem1\n * subitem2\n* item2');
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Reference in a new issue