forked from eslint/js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathupdate-tests.js
101 lines (85 loc) · 3.13 KB
/
update-tests.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
/**
* @fileoverview A simple script to update existing tests to reflect new
* parser changes.
*
* Usage:
* node tools/update-tests.js
*
* @author Nicholas C. Zakas
*/
//------------------------------------------------------------------------------
// Imports
//------------------------------------------------------------------------------
import shelljs from "shelljs";
import tester from "../tests/lib/tester.js";
import path from "path";
import { fileURLToPath } from "url";
//------------------------------------------------------------------------------
// Helpers
//------------------------------------------------------------------------------
// eslint-disable-next-line no-underscore-dangle -- Conventional
const __dirname = path.dirname(fileURLToPath(import.meta.url));
/**
* Gets test file names
* @param {string} directory The directory
* @returns {string[]} The file names
*/
function getTestFilenames(directory) {
return shelljs.find(directory).filter(filename =>
filename.includes(".src.js")).map(filename =>
filename.slice(directory.length - 1, filename.length - 7)); // strip off ".src.js"
}
/**
* Gets library file names
* @param {string} directory The directory
* @returns {string[]} The file names
*/
function getLibraryFilenames(directory) {
return shelljs.find(directory).filter(filename =>
filename.includes(".js") &&
!filename.includes(".result.js")).map(filename =>
filename.slice(directory.length - 1)); // strip off directory
}
/**
* Outputs the result.
* @param {any} result The result
* @param {string} testResultFilename Test result file name
* @returns {void}
*/
function outputResult(result, testResultFilename) {
`export default ${tester.getAstCode(result)};`.to(testResultFilename);
}
//------------------------------------------------------------------------------
// Setup
//------------------------------------------------------------------------------
const FIXTURES_DIR = "./tests/fixtures/ecma-features",
LIBRARIES_DIR = "./tests/fixtures/libraries";
const testFiles = getTestFilenames(FIXTURES_DIR),
libraryFiles = getLibraryFilenames(LIBRARIES_DIR);
libraryFiles.forEach(filename => {
const testResultFilename = `${path.resolve(__dirname, "..", LIBRARIES_DIR, filename)}.result.json`,
code = shelljs.cat(path.resolve(LIBRARIES_DIR, filename));
let result = tester.getExpectedResult(code, {
loc: true,
range: true,
tokens: true
});
JSON.stringify(result).to(testResultFilename);
result = null;
});
// update all tests in ecma-features
testFiles.forEach(filename => {
const feature = path.dirname(filename),
code = shelljs.cat(`${path.resolve(FIXTURES_DIR, filename)}.src.js`),
config = {
loc: true,
range: true,
tokens: true,
ecmaVersion: 6,
ecmaFeatures: {}
};
config.ecmaFeatures[feature] = true;
const testResultFilename = `${path.resolve(__dirname, "..", FIXTURES_DIR, filename)}.result.js`;
const result = tester.getExpectedResult(code, config);
outputResult(result, testResultFilename);
});