UNPKG

2.22 kBJavaScriptView Raw
1'use strict';
2
3var fs = require('fs');
4var assert = require('assert');
5var getRepo = require('get-repo');
6var parse = require('../');
7
8var existing = fs.readdirSync(__dirname + '/cases').filter(function (name) {
9 return /\.tokens\.json$/.test(name);
10});
11
12function parseNewlineJson(str) {
13 return str.split('\n').filter(Boolean).map(JSON.parse)
14}
15
16getRepo('jadejs', 'jade-lexer').on('data', function (entry) {
17 var match;
18 if (entry.type === 'File' && (match = /^\/test\/cases\/(.*)\.expected\.json$/.exec(entry.path))) {
19 var name = match[1];
20 var filename = name + '.tokens.json';
21 var alreadyExists = false;
22 existing = existing.filter(function (existingName) {
23 if (existingName === filename) {
24 alreadyExists = true;
25 return false;
26 }
27 return true;
28 });
29 if (alreadyExists) {
30 try {
31 var expectedTokens = parseNewlineJson(fs.readFileSync(__dirname + '/cases/' + filename, 'utf8'));
32 var actualTokens = parseNewlineJson(entry.body.toString('utf8'));
33 assert.deepEqual(actualTokens, expectedTokens);
34 } catch (ex) {
35 console.log('update: ' + filename);
36 fs.writeFileSync(__dirname + '/cases/' + filename, entry.body);
37 }
38 var actualAst = parse(parseNewlineJson(entry.body.toString('utf8')), filename);
39 try {
40 var expectedAst = JSON.parse(fs.readFileSync(__dirname + '/cases/' + name + '.expected.json', 'utf8'));
41 assert.deepEqual(actualAst, expectedAst);
42 } catch (ex) {
43 console.log('update: ' + name + '.expected.json');
44 fs.writeFileSync(__dirname + '/cases/' + name + '.expected.json', JSON.stringify(actualAst, null, ' '));
45 }
46 } else {
47 console.log('create: ' + filename);
48 fs.writeFileSync(__dirname + '/cases/' + filename, entry.body);
49 console.log('create: ' + name + '.expected.json');
50 var ast = parse(parseNewlineJson(entry.body.toString('utf8')), filename);
51 fs.writeFileSync(__dirname + '/cases/' + name + '.expected.json', JSON.stringify(ast, null, ' '));
52 }
53 }
54}).on('end', function () {
55 existing.forEach(function (file) {
56 fs.unlinkSync(__dirname + '/cases/' + file);
57 });
58 console.log('test cases updated');
59});
\No newline at end of file