67 lines
1.7 KiB
JavaScript
67 lines
1.7 KiB
JavaScript
/**
|
|
* @typedef {import('mdast').Root} Root
|
|
*/
|
|
|
|
import fs from 'node:fs'
|
|
import path from 'node:path'
|
|
import test from 'tape'
|
|
import {readSync} from 'to-vfile'
|
|
import {unified} from 'unified'
|
|
import {remark} from 'remark'
|
|
import {isHidden} from 'is-hidden'
|
|
import directive from '../index.js'
|
|
|
|
test('directive()', (t) => {
|
|
t.doesNotThrow(() => {
|
|
remark().use(directive).freeze()
|
|
}, 'should not throw if not passed options')
|
|
|
|
t.doesNotThrow(() => {
|
|
unified().use(directive).freeze()
|
|
}, 'should not throw if without parser or compiler')
|
|
|
|
t.end()
|
|
})
|
|
|
|
test('fixtures', (t) => {
|
|
const base = path.join('test', 'fixtures')
|
|
const entries = fs.readdirSync(base).filter((d) => !isHidden(d))
|
|
|
|
t.plan(entries.length)
|
|
|
|
let index = -1
|
|
while (++index < entries.length) {
|
|
const fixture = entries[index]
|
|
t.test(fixture, (st) => {
|
|
const file = readSync(path.join(base, fixture, 'input.md'))
|
|
const input = String(file)
|
|
const outputPath = path.join(base, fixture, 'output.md')
|
|
const treePath = path.join(base, fixture, 'tree.json')
|
|
const proc = remark().use(directive).freeze()
|
|
const actual = proc.parse(file)
|
|
/** @type {string} */
|
|
let output
|
|
/** @type {Root} */
|
|
let expected
|
|
|
|
try {
|
|
expected = JSON.parse(String(fs.readFileSync(treePath)))
|
|
} catch {
|
|
// New fixture.
|
|
fs.writeFileSync(treePath, JSON.stringify(actual, null, 2) + '\n')
|
|
expected = actual
|
|
}
|
|
|
|
try {
|
|
output = fs.readFileSync(outputPath, 'utf8')
|
|
} catch {
|
|
output = input
|
|
}
|
|
|
|
st.deepEqual(actual, expected, 'tree')
|
|
st.equal(String(proc.processSync(file)), output, 'process')
|
|
|
|
st.end()
|
|
})
|
|
}
|
|
})
|