UNPKG

2.54 kBJavaScriptView Raw
1'use strict';
2
3/**
4 * Usage: node packages/babel-preset-udemy-website/tests.js [--verbose] [--update]
5 *
6 * --verbose - Print more debugging information.
7 * --update - Update the tests.
8 *
9 * Note, you have to run it from the base of the monorepo, otherwise the hashes that
10 * babel-plugin-react-css-modules generates will be different--go figure.
11 */
12
13const babel = require('@babel/core');
14const assert = require('assert');
15const fs = require('fs');
16const join = require('path').join;
17
18const preset = require('./index');
19
20const MODE = Object.freeze({
21 TEST: 'TEST',
22 UPDATE: 'UPDATE',
23});
24let mode = MODE.TEST;
25let verbose = false;
26
27process.argv.forEach(val => {
28 if (!val.startsWith('--')) {
29 // Skip "node" and "tests.js" if present.
30 return;
31 }
32 if (val === '--verbose') {
33 verbose = true;
34 } else if (val === '--update') {
35 mode = MODE.UPDATE;
36 } else {
37 throw new Error(`Unknown argument: ${val}`);
38 }
39});
40
41// eslint-disable-next-line no-console
42console.log('test babel-preset-udemy-website');
43
44const environments = ['legacy', 'modern'];
45const testEnvironment = environment => {
46 fs.readdirSync(join(__dirname, 'tests/source'))
47 .filter(name => name.endsWith('.js'))
48 .forEach(name => {
49 const result = babel.transformFileSync(
50 join(__dirname, 'tests/source', name),
51 preset(babel, {environment}),
52 ).code;
53 const expected = fs.readFileSync(join(__dirname, 'tests/result', environment, name), {
54 encoding: 'UTF-8',
55 });
56
57 // eslint-disable-next-line no-console
58 console.log(`\tcheck ${name} -- ${environment}`);
59
60 if (verbose && result.trim() !== expected.trim()) {
61 /* eslint-disable no-console */
62 console.log('===== expected =====');
63 console.log(expected);
64 console.log('===== result =====');
65 console.log(result);
66 /* eslint-enable no-console */
67 }
68
69 if (mode === MODE.TEST) {
70 assert.equal(result.trim(), expected.trim());
71 } else if (mode === MODE.UPDATE) {
72 fs.writeFileSync(
73 join(__dirname, 'tests/result', environment, name),
74 `${result}\n`,
75 {
76 encoding: 'UTF-8',
77 },
78 );
79 }
80 });
81};
82
83environments.forEach(e => {
84 testEnvironment(e);
85});