Merge branch 'update-expected' into typescript-tests

pull/4917/head
pushkine 5 years ago
commit 5be29fe0d5

@ -26,7 +26,7 @@
"test": "mocha",
"test:unit": "mocha --require sucrase/register --recursive src/**/__test__.ts",
"quicktest": "mocha",
"update-expected": "node -r sucrase/register ./test/js/update.ts && node -r sucrase/register ./test/parser/update.ts",
"update-expected": "rollup -c && node -r sucrase/register ./test/js/update.ts && node -r sucrase/register ./test/parser/update.ts",
"precoverage": "c8 mocha --opts mocha.coverage.opts",
"coverage": "c8 report --reporter=text-lcov > coverage.lcov && c8 report --reporter=html",
"codecov": "codecov",

@ -1,16 +1,9 @@
import { readFileSync, writeFileSync } from 'fs';
import { glob } from '../tiny-glob';
import {replaceIfUpdated } from "../tiny-glob";
// this file will replace all the expected.js files with their _actual
// equivalents. Only use it when you're sure that you haven't
// broken anything!
const svelte = (function loadSvelte(test) {
process.env.TEST = test ? 'true' : '';
const resolved = require.resolve('../../compiler.js');
delete require.cache[resolved];
return require(resolved);
})(false);
function loadConfig(file) {
try {
const resolved = require.resolve(file);
@ -19,23 +12,19 @@ function loadConfig(file) {
const config = require(resolved);
return config.default || config;
} catch (err) {
if (err.code === 'MODULE_NOT_FOUND') {
if (err.code === "MODULE_NOT_FOUND") {
return {};
}
throw err;
}
}
glob('samples/*/input.svelte', { cwd: __dirname })
.forEach((file) => {
writeFileSync(
`${__dirname}/${file.replace('input.svelte', 'expected.js')}`,
svelte
.compile(
readFileSync(`${__dirname}/${file}`, 'utf-8').replace(/\s+$/, '').replace(/\r/g, ''),
loadConfig(`${__dirname}/${file.replace('input.svelte', '_config.js')}`).options
replaceIfUpdated((compile, check, get_relative) => {
check(
"expected.js",
compile(loadConfig(get_relative("_config.js")).options).js.code.replace(
/generated by Svelte v\d+\.\d+\.\d+(-\w+\.\d+)?/,
"generated by Svelte vX.Y.Z"
)
.js.code.replace(/generated by Svelte v\d+\.\d+\.\d+(-\w+\.\d+)?/, 'generated by Svelte vX.Y.Z').replace(/\r/g, '')
);
});
}, __dirname);

@ -1,32 +1,19 @@
import { readFileSync, writeFileSync } from 'fs';
import { glob } from '../tiny-glob';
import { replaceIfUpdated } from "../tiny-glob";
// this file will replace all the expected.js files with their _actual
// equivalents. Only use it when you're sure that you haven't
// broken anything!
const svelte = (function loadSvelte(test) {
process.env.TEST = test ? 'true' : '';
const resolved = require.resolve('../../compiler.js');
delete require.cache[resolved];
return require(resolved);
})(false);
glob('samples/*/input.svelte', { cwd: __dirname })
.forEach((file) => {
replaceIfUpdated((compile, check) => {
try {
writeFileSync(
`${__dirname}/${file.replace('input.svelte', 'output.json')}`,
JSON.stringify(
svelte.compile(readFileSync(`${__dirname}/${file}`, 'utf-8').replace(/\s+$/, '').replace(/\r/g, ''), { generate: false }).ast,
null,
'\t'
)
);
check("output.json", compile({ generate: false }).ast);
} catch (e) {
if (e.name !== 'ParseError') throw e;
writeFileSync(
`${__dirname}/${file.replace('input.svelte', 'error.json')}`,
JSON.stringify({ code:e.code, message: e.message, pos:e.pos, start:e.start }, null, '\t')
);
}
if (e.name !== "ParseError") throw e;
check("error.json", {
code: e.code,
message: e.message,
start: e.start,
pos: e.pos,
});
}
}, __dirname);

@ -1,6 +1,6 @@
import { readdirSync, lstatSync, statSync } from 'fs';
import { readdirSync, lstatSync, statSync, readFileSync, writeFileSync } from 'fs';
import { normalize, dirname, join, resolve, relative } from 'path';
import assert from "assert";
// MIT
// tiny-glob, globrex and globalyzer by Terkel Gjervig
@ -272,3 +272,46 @@ export function glob(str: string, { cwd = '.', absolute = false, filesOnly = fal
walk(matches, glob.base, path, filesOnly, dot, cwd, '.', 0);
return absolute ? matches.map((x) => resolve(cwd, x)) : matches;
}
export function replaceIfUpdated(run, cwd) {
const svelte = (function loadSvelte() {
const resolved = require.resolve("../compiler.js");
delete require.cache[resolved];
return require(resolved);
})();
glob("samples/*/input.svelte", { cwd }).forEach((dir) => {
function compile(options) {
return svelte.compile(
readFileSync(`${cwd}/${dir}`, "utf-8")
.replace(/\s+$/, "")
.replace(/\r/g, ""),
options
);
}
function check(target, value) {
const path = `${cwd}/${dir.replace("input.svelte", target)}`;
try {
const previous = readFileSync(path, "utf-8");
if (typeof value === "object") {
assert.deepEqual(
JSON.parse(previous),
JSON.parse(JSON.stringify(value))
);
} else {
assert.equal(
previous.replace(/\s+$/, "").replace(/\r/g, ""),
(value = value.replace(/\s+$/, "").replace(/\r/g, ""))
);
}
} catch (e) {
if (typeof value === "object")
value = JSON.stringify(value, null, "\t");
writeFileSync(path, value);
}
}
function get_relative(name) {
return `${cwd}/${dir.replace("input.svelte", name)}`;
}
run(compile, check, get_relative);
});
}
Loading…
Cancel
Save