228 lines
5.9 KiB
JavaScript
228 lines
5.9 KiB
JavaScript
var fm = require('../')
|
|
var fs = require('fs')
|
|
var path = require('path')
|
|
var test = require('tape')
|
|
|
|
test('var fm = require("front-matter")', function (t) {
|
|
t.equal(typeof fm, 'function')
|
|
t.end()
|
|
})
|
|
|
|
test('fm(string) - parse yaml delinetead by `---`', function (t) {
|
|
fs.readFile(
|
|
path.resolve(__dirname, '../examples/dashes-seperator.md'),
|
|
'utf8',
|
|
function (err, data) {
|
|
t.error(err, 'read(...) should not error')
|
|
|
|
var content = fm(data)
|
|
|
|
t.ok(content.attributes, 'should have `attributes` key')
|
|
t.equal(content.attributes.title, 'Three dashes marks the spot')
|
|
t.equal(content.attributes.tags.length, 3)
|
|
|
|
t.ok(content.body, 'should have a `body` key')
|
|
t.ok(content.body.match("don't break"), 'should match body')
|
|
t.ok(content.body.match('---'), 'should match body')
|
|
t.ok(content.body.match("Also this shouldn't be a problem"),
|
|
'should match body')
|
|
|
|
t.ok(content.frontmatter, 'should have a `frontmatter` key')
|
|
t.ok(content.frontmatter.match('title: Three dashes marks the spot'), 'should match frontmatter')
|
|
t.ok(content.frontmatter.match('expaned-description: with some --- crazy stuff in it'), 'should match frontmatter')
|
|
|
|
t.end()
|
|
})
|
|
})
|
|
|
|
test('fm(string) - parse yaml delinetead by `= yaml =`', function (t) {
|
|
fs.readFile(
|
|
path.resolve(__dirname, '../examples/yaml-seperator.md'),
|
|
'utf8',
|
|
function (err, data) {
|
|
t.error(err, 'read(...) should not error')
|
|
|
|
var content = fm(data)
|
|
var meta = content.attributes
|
|
var body = content.body
|
|
|
|
t.equal(meta.title, "I couldn't think of a better name")
|
|
t.equal(meta.description, 'Just an example of using `= yaml =`')
|
|
t.ok(body.match('Plays nice with markdown syntax highlighting'),
|
|
'should match body')
|
|
|
|
t.end()
|
|
})
|
|
})
|
|
|
|
test('fm(string) - parse yaml ended by `...`', function (t) {
|
|
fs.readFile(
|
|
path.resolve(__dirname, '../examples/dots-ending.md'),
|
|
'utf8',
|
|
function (err, data) {
|
|
t.error(err, 'read(...) should not error')
|
|
|
|
var content = fm(data)
|
|
var meta = content.attributes
|
|
var body = content.body
|
|
|
|
t.equal(meta.title, 'Example with dots document ending')
|
|
t.equal(meta.description, 'Just an example of using `...`')
|
|
t.ok(body.match("It shouldn't break with ..."),
|
|
'should match body')
|
|
|
|
t.end()
|
|
})
|
|
})
|
|
|
|
test('fm(string) - string missing front-matter', function (t) {
|
|
var content = fm('No front matter here')
|
|
|
|
t.equal(content.body, 'No front matter here')
|
|
t.end()
|
|
})
|
|
|
|
test('fm(string) - string missing body', function (t) {
|
|
fs.readFile(
|
|
path.resolve(__dirname, '../examples/missing-body.md'),
|
|
'utf8',
|
|
function (err, data) {
|
|
t.error(err, 'read(...) should not error')
|
|
|
|
var content = fm(data)
|
|
|
|
t.equal(content.attributes.title, 'Three dashes marks the spot')
|
|
t.equal(content.attributes.tags.length, 3)
|
|
t.equal(content.body, '')
|
|
t.end()
|
|
})
|
|
})
|
|
|
|
test('fm(string) - wrapped test in yaml', function (t) {
|
|
fs.readFile(
|
|
path.resolve(__dirname, '../examples/wrapped-text.md'),
|
|
'utf8',
|
|
function (err, data) {
|
|
t.error(err, 'read(...) should not error')
|
|
|
|
var content = fm(data)
|
|
var folded = [
|
|
'There once was a man from Darjeeling',
|
|
'Who got on a bus bound for Ealing',
|
|
' It said on the door',
|
|
' "Please don\'t spit on the floor"',
|
|
'So he carefully spat on the ceiling\n'
|
|
].join('\n')
|
|
|
|
t.equal(content.attributes['folded-text'], folded)
|
|
t.ok(content.body.match('Some crazy stuff going on up there'),
|
|
'should match body')
|
|
|
|
t.end()
|
|
})
|
|
})
|
|
|
|
test('fm(string) - strings with byte order mark', function (t) {
|
|
fs.readFile(
|
|
path.resolve(__dirname, '../examples/bom.md'),
|
|
'utf8',
|
|
function (err, data) {
|
|
t.error(err, 'read(...) should not error')
|
|
|
|
var content = fm(data)
|
|
|
|
t.equal(content.attributes.title, "Relax guy, I'm not hiding any BOMs")
|
|
|
|
t.end()
|
|
})
|
|
})
|
|
|
|
test('fm(string) - no front matter, markdown with hr', function (t) {
|
|
fs.readFile(
|
|
path.resolve(__dirname, '../examples/no-front-matter.md'),
|
|
'utf8',
|
|
function (err, data) {
|
|
t.error(err, 'read should not error')
|
|
|
|
var content = fm(data)
|
|
t.equal(content.body, data)
|
|
t.end()
|
|
})
|
|
})
|
|
|
|
test('fm(string) - complex yaml', function (t) {
|
|
fs.readFile(
|
|
path.resolve(__dirname, '../examples/complex-yaml.md'),
|
|
'utf8',
|
|
function (err, data) {
|
|
t.error(err, 'read(...) should not error')
|
|
var content = fm(data)
|
|
t.ok(content.attributes, 'should have `attributes` key')
|
|
t.equal(content.attributes.title, 'This is a title!')
|
|
t.equal(content.attributes.contact, null)
|
|
t.equal(content.attributes.match.toString(), '/pattern/gim')
|
|
t.end()
|
|
})
|
|
})
|
|
|
|
test('fm.test(string) - yaml seperator', function (t) {
|
|
fs.readFile(
|
|
path.resolve(__dirname, '../examples/yaml-seperator.md'),
|
|
'utf8',
|
|
function (err, data) {
|
|
t.error(err, 'read(...) should not error')
|
|
t.equal(fm.test(data), true)
|
|
t.end()
|
|
})
|
|
})
|
|
|
|
test('fm.test(string) - dashes seperator', function (t) {
|
|
fs.readFile(
|
|
path.resolve(__dirname, '../examples/dashes-seperator.md'),
|
|
'utf8',
|
|
function (err, data) {
|
|
t.error(err, 'read(...) should not error')
|
|
t.equal(fm.test(data), true)
|
|
t.end()
|
|
})
|
|
})
|
|
|
|
test('fm.test(string) - no front-matter', function (t) {
|
|
t.equal(fm.test('no front matter here'), false)
|
|
t.end()
|
|
})
|
|
|
|
test('Supports live updating', function (t) {
|
|
var seperator = '---'
|
|
var string = ''
|
|
for (var i = 0; i < seperator.length; i++) {
|
|
string += seperator[i]
|
|
|
|
try {
|
|
fm(string)
|
|
} catch (e) {
|
|
t.error(e)
|
|
}
|
|
}
|
|
|
|
string += '\n'
|
|
string += 'foo: bar'
|
|
|
|
var content = fm(string)
|
|
|
|
t.same(content, {
|
|
attributes: {},
|
|
body: string
|
|
})
|
|
|
|
string += '\n---\n'
|
|
content = fm(string)
|
|
t.same(content, {
|
|
attributes: { foo: 'bar' },
|
|
body: '',
|
|
frontmatter: 'foo: bar'
|
|
})
|
|
|
|
t.end()
|
|
})
|