diff options
author | ache <ache@ache.one> | 2018-12-31 16:05:48 +0100 |
---|---|---|
committer | ache <ache@ache.one> | 2018-12-31 16:05:48 +0100 |
commit | 5cc6dd928aab776392209cd58012af8bf9a2d2b4 (patch) | |
tree | 25a8f7e9fa1129a749da31307d9a565b15e0bf0b | |
parent | Dist file (diff) |
More tests
-rw-r--r-- | __tests__/index.js | 52 | ||||
-rw-r--r-- | src/index.js | 126 |
2 files changed, 42 insertions, 136 deletions
diff --git a/__tests__/index.js b/__tests__/index.js index 5d4c995..d4729df 100644 --- a/__tests__/index.js +++ b/__tests__/index.js @@ -1,11 +1,14 @@ -import test from 'ava'; -import unified from 'unified'; -import raw from 'rehype-raw'; -import reParse from 'remark-parse'; -import stringify from 'rehype-stringify'; -import remark2rehype from 'remark-rehype'; +'user strict'; -import plugin from '../app'; +import plugin from '..'; + +const test = require('ava'); +const unified = require('unified'); +const raw = require('rehype-raw'); +const reParse = require('remark-parse'); +const stringify = require('rehype-stringify'); +const remark2rehype = require('remark-rehype'); +const parse5 = require('parse5'); const render = text => unified() .use(reParse) @@ -24,15 +27,44 @@ const renderRaw = text => unified() test('simple citation', t => { const {contents} = render('>This is a citation'); - t.is(contents, '<blockquote>\n<p>This is a citation</p>\n</blockquote>'); + t.deepEqual(parse5.parse(contents), + parse5.parse('<blockquote>\n<p>This is a citation</p>\n</blockquote>') + ); }); test('simple citation raw', t => { const {contents} = renderRaw('>This is a citation'); - t.is(contents, '<blockquote>\n<p>This is a citation</p>\n</blockquote>'); + t.deepEqual(parse5.parse(contents), + parse5.parse('<blockquote>\n<p>This is a citation</p>\n</blockquote>') + ); }); test('question', t => { const {contents} = renderRaw('>!question\nWhat does the š¦ say ?'); - t.snapshot(contents); + t.deepEqual(parse5.parse(contents), + parse5.parse('<div class="special-box question"><div class="special-box-content"><p>What does the š¦ say ?</p></div></div>')); +}); + +test('attention', t => { + const {contents} = renderRaw('>!attention\nBe carefull'); + t.deepEqual(parse5.parse(contents), + parse5.parse('<div class="special-box attention"><div class="special-box-content"><p>Be carefull</p></div></div>')); +}); + +test('good', t => { + const {contents} = renderRaw('>!good\nš'); + t.deepEqual(parse5.parse(contents), + parse5.parse('<div class="special-box good"><div class="special-box-content"><p>š</p></div></div>')); +}); + +test('bad', t => { + const {contents} = renderRaw('>!bad\nā¢ļø'); + t.deepEqual(parse5.parse(contents), + parse5.parse('<div class="special-box bad"><div class="special-box-content"><p>ā¢ļø</p></div></div>')); +}); + +test('secret', t => { + const {contents} = renderRaw('>!secret Don\'t tell others about it\nš¤«'); + t.deepEqual(parse5.parse(contents), + parse5.parse('<details class="special-box secret"><div><p>š¤«</p></div><summary>Don\'t tell others about it</summary></details>')); }); diff --git a/src/index.js b/src/index.js index 6f8b5d5..e69de29 100644 --- a/src/index.js +++ b/src/index.js @@ -1,126 +0,0 @@ -const visit = require('unist-util-visit'); - -/** - * Given the MDAST ast, look for all fenced Blockquote - * - * @param {object} ast - * @param {vFile} vFile - * @return {function} - */ -function visitBlockquote(ast) { - return visit(ast, 'blockquote', (node, index, parent) => { - const firstNode = node.children[0]; - - if (firstNode.type === 'paragraph') { - if (firstNode.children[0].type === 'text') { - const firstChild = firstNode.children[0]; - if (firstChild.value.startsWith('!secret')) { - node.type = 'div'; - firstChild.value = firstChild.value.substr(7); - let sum = ''; - if (firstChild.value.indexOf('\n') >= 0) { - sum = firstChild.value.substr(0, - firstChild.value.indexOf('\n')); - firstChild.value = firstChild.value.substr( - firstChild.value.indexOf('\n')); - } else { - sum = firstChild.value; - firstChild.value = ''; - } - - const secret = { - type: 'special-box-secret', - children: [ - node, - { - type: 'summary', - data: { - hName: 'summary', - hChildren: [{ - type: 'text', - value: sum || 'Spoiler', - }], - }, - }, - ], - data: { - hName: 'details', - hProperties: { - className: 'special-box secret', - }, - }, - }; - - parent.children.splice(index, 1, secret); - - return node; - } else if (firstChild.value.startsWith('!information') || - firstChild.value.startsWith('!good') || - firstChild.value.startsWith('!bad') || - firstChild.value.startsWith('!comment') || - firstChild.value.startsWith('!attention') || - firstChild.value.startsWith('!question')) { - node.type = 'div'; - node.data = { - hName: 'div', - hProperties: { - className: 'special-box-content', - }, - }; - let type = ''; - if (firstChild.value.indexOf('\n') > 0) { - type = firstChild.value.substr(1, firstChild.value.indexOf('\n')); - firstChild.value = firstChild.value.substr(firstChild.value.indexOf('\n')); - } else { - type = firstChild.value.substr(1); - firstChild.value = ''; - } - - const box = { - type: 'special-box-div', - children: [node], - data: { - hName: 'div', - hProperties: { - className: `special-box ${type}`, - }, - }, - }; - - parent.children.splice(index, 1, box); - - return node; - } - } - } - return node; - }); -} - -/** - * Returns the transformer which acst on the MDAST tree and given VFile. - * - * @link https://github.com/unifiedjs/unified#function-transformernode-file-next - * @link https://github.com/syntax-tree/mdast - * @link https://github.com/vfile/vfile - * @return {function} - */ -function box() { - /** - * @param {object} ast MDAST - * @param {vFile} vFile - * @param {function} next - * @return {object} - */ - return function (ast, vFile, next) { // Transformer - visitBlockquote(ast); - - if (typeof next === 'function') { - return next(null, ast, vFile); - } - - return ast; - }; -} - -module.exports = box; |