UNPKG

4.28 kBJavaScriptView Raw
1var wmd = require('../lib/wmd'),
2 underscores = wmd.preprocessors.underscores,
3 metadata = wmd.preprocessors.metadata,
4 yamlFrontMatter = wmd.preprocessors.yamlFrontMatter,
5 fencedCodeBlocks = wmd.preprocessors.fencedCodeBlocks;
6
7
8var mkTest = function (test, fn) {
9 return function (input, expected) {
10 var doc = {markdown: input};
11 test.same(fn(doc), {markdown: expected});
12 };
13};
14
15// underscore changes from github-flavored-markdown
16
17exports['underscores'] = function (test) {
18 var testOutput = mkTest(test, underscores);
19 // not touch single underscores inside words
20 testOutput('foo_bar', 'foo_bar');
21 // not touch underscores in code blocks
22 testOutput(' foo_bar', ' foo_bar');
23 // not touch underscores in pre blocks
24 testOutput('<pre>\nfoo_bar_baz\n</pre>', '<pre>\nfoo_bar_baz\n</pre>');
25 // escape two or more underscores inside words
26 testOutput("foo_bar_baz", "foo\\_bar\\_baz");
27 test.done();
28};
29
30// Tests for newline changes in github-flavored-markdown:
31/*
32 // turn newlines into br tags in simple cases
33 testOutput("foo \nbar", "foo\nbar");
34 // convert newlines in all groups
35 testOutput(
36 "apple\npear\norange\n\nruby\npython\nerlang",
37 "apple \npear \norange\n\nruby \npython \nerlang"
38 );
39 // not convert newlines in lists
40 testOutput("# foo\n# bar", "# foo\n# bar");
41 testOutput("* foo\n* bar", "* foo\n* bar");
42*/
43
44exports['metadata'] = function (test) {
45 test.same(
46 metadata({
47 markdown: 'property: value'
48 }),
49 {
50 markdown: '',
51 metadata: {property: 'value'}
52 }
53 );
54 test.same(
55 metadata({
56 markdown: 'prop1: value1\n' +
57 'prop_two: value2\n' +
58 '\n' +
59 'markdown'
60 }),
61 {
62 markdown: 'markdown',
63 metadata: {prop1: 'value1', prop_two: 'value2'}
64 }
65 );
66 test.same(
67 metadata({
68 markdown: 'prop1: value with spaces\n' +
69 'prop_two: value2\n' +
70 ' double-line\n' +
71 ' \n' +
72 '\n' +
73 'markdown'
74 }),
75 {
76 markdown: 'markdown',
77 metadata: {
78 prop1: 'value with spaces',
79 prop_two: 'value2\ndouble-line'
80 }
81 }
82 );
83 test.done();
84};
85
86
87
88
89exports['yamlFrontMatter'] = function (test) {
90 test.same(
91 yamlFrontMatter({
92 markdown: '---\n' +
93 'property: value\n' +
94 '---'
95 }),
96 {
97 markdown: '',
98 metadata: {property: 'value'}
99 }
100 );
101 test.same(
102 yamlFrontMatter({
103 markdown: '---\n' +
104 'prop1: value1\n' +
105 'prop_two: 2\n' +
106 '---\n' +
107 '\n' +
108 'markdown'
109 }),
110 {
111 markdown: 'markdown',
112 metadata: {prop1: 'value1', prop_two: 2}
113 }
114 );
115 test.same(
116 yamlFrontMatter({
117 markdown: '---\n' +
118 'prop1: value with spaces\n' +
119 'list:\n' +
120 ' - item1\n' +
121 ' - item2\n' +
122 '---\n' +
123 '\n' +
124 '\n' +
125 '# markdown'
126 }),
127 {
128 markdown: '# markdown',
129 metadata: {
130 prop1: 'value with spaces',
131 list: ['item1', 'item2']
132 }
133 }
134 );
135 test.done();
136};
137
138
139exports['fencedCodeBlocks'] = function (test) {
140 test.same(
141 fencedCodeBlocks({
142 markdown: 'foo\n\n```testlang\nbar\n```\n'
143 }),
144 {
145 markdown: 'foo\n\n<pre><code class="testlang">bar\n</code></pre>\n'
146 }
147 );
148 test.same(
149 fencedCodeBlocks({
150 markdown: 'foo\n\n```\nbar\n baz\n```\n'
151 }),
152 {
153 markdown: 'foo\n\n<pre><code class="no-highlight">' +
154 'bar\n baz\n</code></pre>\n'
155 }
156 );
157 test.done();
158};