1 | var Lab = require('lab');
|
2 | var Parser = require('../lib/parser');
|
3 | var assert = require('chai').assert;
|
4 |
|
5 | var lab = exports.lab = Lab.script();
|
6 |
|
7 |
|
8 | lab.experiment('Parser', function() {
|
9 |
|
10 | lab.test('._getIndent()', function(done) {
|
11 | var parser = new Parser();
|
12 |
|
13 | assert.equal(parser._getIndent(' '), 1);
|
14 | assert.equal(parser._getIndent(' '), 1);
|
15 | assert.equal(parser._getIndent(' . text'), 1);
|
16 |
|
17 | assert.equal(parser._getIndent(' bold'), 2);
|
18 | assert.equal(parser._getIndent('\t strong'), 3);
|
19 |
|
20 | done();
|
21 | });
|
22 |
|
23 | lab.test('.exec()', function(done) {
|
24 | var parser = new Parser();
|
25 |
|
26 | assert.deepEqual(
|
27 | parser.exec(' '),
|
28 | [ 'multi', [ 'newline' ] ]
|
29 | );
|
30 |
|
31 | assert.deepEqual(
|
32 | parser.exec('/ text'),
|
33 | ['multi', ['newline']]
|
34 | );
|
35 |
|
36 | assert.deepEqual(
|
37 | parser.exec('/ line 1\n line 2'),
|
38 | ['multi', ['newline'], ['newline']]
|
39 | );
|
40 |
|
41 | assert.deepEqual(
|
42 | parser.exec('== 5'),
|
43 | [
|
44 | 'multi',
|
45 | ['slm', 'output', false, '5', ['multi', ['newline']]]
|
46 | ]
|
47 | );
|
48 |
|
49 | assert.deepEqual(
|
50 | parser.exec('p nice'),
|
51 | [
|
52 | 'multi',
|
53 | [
|
54 | 'html', 'tag', 'p',
|
55 | ['html', 'attrs'],
|
56 | ['slm', 'text',
|
57 | ['multi', ['slm', 'interpolate', 'nice']]]], ['newline']
|
58 | ]
|
59 | );
|
60 |
|
61 | assert.deepEqual(
|
62 | parser.exec('. text'),
|
63 | [
|
64 | 'multi',
|
65 | [
|
66 | 'slm', 'text',
|
67 | ['multi', ['slm', 'interpolate', 'text']]
|
68 | ],
|
69 | ['static', ' '], ['newline']
|
70 | ]
|
71 | );
|
72 |
|
73 | assert.deepEqual(
|
74 | parser.exec('p.alert'),
|
75 | [
|
76 | 'multi',
|
77 | [
|
78 | 'html', 'tag', 'p',
|
79 | [
|
80 | 'html', 'attrs',
|
81 | ['html', 'attr', 'class', ['static', 'alert']]
|
82 | ],
|
83 | ['multi', ['newline']]
|
84 | ]
|
85 | ]
|
86 | );
|
87 |
|
88 | assert.deepEqual(
|
89 | parser.exec('a href="http://anjlab.ru" AnjLab'),
|
90 | [
|
91 | 'multi',
|
92 | [
|
93 | 'html', 'tag', 'a',
|
94 | [
|
95 | 'html', 'attrs',
|
96 | [
|
97 | 'html', 'attr', 'href',
|
98 | [
|
99 | 'escape', true,
|
100 | ['slm', 'interpolate', 'http://anjlab.ru']
|
101 | ]
|
102 | ]
|
103 | ],
|
104 | [
|
105 | 'slm', 'text',
|
106 | [
|
107 | 'multi',
|
108 | ['slm', 'interpolate', 'AnjLab']
|
109 | ]
|
110 | ]
|
111 | ],
|
112 | ['newline']
|
113 | ]
|
114 | );
|
115 |
|
116 | assert.deepEqual(
|
117 | parser.exec('/[if IE]\n p Get a better browser.'),
|
118 | [
|
119 | 'multi',
|
120 | ['html', 'condcomment', 'if IE',
|
121 | [
|
122 | 'multi',
|
123 | ['newline'],
|
124 | ['html', 'tag', 'p', ['html', 'attrs'], ['slm', 'text',
|
125 | ['multi', ['slm', 'interpolate', 'Get a better browser.']]
|
126 | ]],
|
127 | ['newline']
|
128 | ]
|
129 | ]
|
130 | ]
|
131 | );
|
132 |
|
133 | assert.deepEqual(
|
134 | parser.exec('p = 10'),
|
135 | [
|
136 | 'multi',
|
137 | [
|
138 | 'html', 'tag', 'p',
|
139 | ['html', 'attrs'],
|
140 | ['slm', 'output', true, '10', ['multi', ['newline']]]
|
141 | ]
|
142 | ]
|
143 | );
|
144 |
|
145 | var code =
|
146 | '- if (x)\n' +
|
147 | ' p = x\n' +
|
148 | 'p nice';
|
149 |
|
150 | assert.deepEqual(
|
151 | parser.exec(code),
|
152 | [
|
153 | 'multi',
|
154 | [
|
155 | 'slm', 'control', 'if (x)',
|
156 | [
|
157 | 'multi',
|
158 | ['newline'],
|
159 | [
|
160 | 'html', 'tag', 'p',
|
161 | ['html', 'attrs'],
|
162 | ['slm', 'output', true, 'x', ['multi', ['newline']]]
|
163 | ]
|
164 | ]
|
165 | ],
|
166 | ['html', 'tag', 'p', ['html', 'attrs'], ['slm', 'text', ['multi', ['slm', 'interpolate', 'nice']]]], ['newline']
|
167 | ]
|
168 | );
|
169 |
|
170 | done();
|
171 | });
|
172 | });
|