From fe865526708745f878bc053357fc70db4209d015 Mon Sep 17 00:00:00 2001 From: pushkine Date: Thu, 28 May 2020 03:15:57 +0200 Subject: [PATCH 1/4] dry + only replace updated files --- test/js/update.ts | 35 ++++++++++++---------------------- test/parser/update.ts | 41 ++++++++++++++-------------------------- test/tiny-glob.ts | 44 +++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 68 insertions(+), 52 deletions(-) diff --git a/test/js/update.ts b/test/js/update.ts index aae2b6427b..6bea051bf9 100644 --- a/test/js/update.ts +++ b/test/js/update.ts @@ -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 - ) - .js.code.replace(/generated by Svelte v\d+\.\d+\.\d+(-\w+\.\d+)?/, 'generated by Svelte vX.Y.Z').replace(/\r/g, '') - ); - }); +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" + ) + ); +}, __dirname); \ No newline at end of file diff --git a/test/parser/update.ts b/test/parser/update.ts index ee64809b3c..fd7123cd74 100644 --- a/test/parser/update.ts +++ b/test/parser/update.ts @@ -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) => { - 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' - ) - ); - } 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') - ); - } - }); +replaceIfUpdated((compile, check) => { + try { + check("output.json", compile({ generate: false }).ast); + } catch (e) { + if (e.name !== "ParseError") throw e; + check("error.json", { + code: e.code, + message: e.message, + start: e.start, + pos: e.pos, + }); + } +}, __dirname); diff --git a/test/tiny-glob.ts b/test/tiny-glob.ts index 8d2474bfb3..d288b3fc03 100644 --- a/test/tiny-glob.ts +++ b/test/tiny-glob.ts @@ -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,43 @@ 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(config_getter, 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_news(file, value){ + const path = `${cwd}/${dir.replace("input.svelte", file)}`; + 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)}` + } + + config_getter(compile, check_news, get_relative ); + }); +} \ No newline at end of file From 16da0c260cdcff5ec17ca9af25fc23f621ef5d08 Mon Sep 17 00:00:00 2001 From: pushkine Date: Thu, 28 May 2020 03:20:56 +0200 Subject: [PATCH 2/4] lint --- test/tiny-glob.ts | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/test/tiny-glob.ts b/test/tiny-glob.ts index d288b3fc03..dce204900b 100644 --- a/test/tiny-glob.ts +++ b/test/tiny-glob.ts @@ -279,13 +279,15 @@ export function replaceIfUpdated(config_getter, cwd) { return require(resolved); })(); glob("samples/*/input.svelte", { cwd }).forEach((dir) => { - function compile(options){ + function compile(options) { return svelte.compile( - readFileSync(`${cwd}/${dir}`, "utf-8").replace(/\s+$/, "").replace(/\r/g, ""), + readFileSync(`${cwd}/${dir}`, "utf-8") + .replace(/\s+$/, "") + .replace(/\r/g, ""), options - ) + ); } - function check_news(file, value){ + function check_news(file, value) { const path = `${cwd}/${dir.replace("input.svelte", file)}`; try { const previous = readFileSync(path, "utf-8"); @@ -301,14 +303,15 @@ export function replaceIfUpdated(config_getter, cwd) { ); } } catch (e) { - if (typeof value === "object") value = JSON.stringify(value, null, "\t"); + if (typeof value === "object") + value = JSON.stringify(value, null, "\t"); writeFileSync(path, value); } } - function get_relative(name){ - return `${cwd}/${dir.replace("input.svelte", name)}` + function get_relative(name) { + return `${cwd}/${dir.replace("input.svelte", name)}`; } - config_getter(compile, check_news, get_relative ); + config_getter(compile, check_news, get_relative); }); } \ No newline at end of file From 2545fe7fd342c250dc4c1994c60a64e8ce5df0b5 Mon Sep 17 00:00:00 2001 From: pushkine Date: Thu, 28 May 2020 03:32:12 +0200 Subject: [PATCH 3/4] rename for clarity --- test/tiny-glob.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/tiny-glob.ts b/test/tiny-glob.ts index dce204900b..788f60c4ac 100644 --- a/test/tiny-glob.ts +++ b/test/tiny-glob.ts @@ -272,7 +272,7 @@ 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(config_getter, cwd) { +export function replaceIfUpdated(run, cwd) { const svelte = (function loadSvelte() { const resolved = require.resolve("../compiler.js"); delete require.cache[resolved]; @@ -287,8 +287,8 @@ export function replaceIfUpdated(config_getter, cwd) { options ); } - function check_news(file, value) { - const path = `${cwd}/${dir.replace("input.svelte", file)}`; + function check(target, value) { + const path = `${cwd}/${dir.replace("input.svelte", target)}`; try { const previous = readFileSync(path, "utf-8"); if (typeof value === "object") { @@ -312,6 +312,6 @@ export function replaceIfUpdated(config_getter, cwd) { return `${cwd}/${dir.replace("input.svelte", name)}`; } - config_getter(compile, check_news, get_relative); + run(compile, check, get_relative); }); } \ No newline at end of file From 03907e59c49e26be1ad6231380d1e35e8027813e Mon Sep 17 00:00:00 2001 From: pushkine Date: Thu, 28 May 2020 13:49:21 +0200 Subject: [PATCH 4/4] rebuild before script --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0d59059290..71df8facd5 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "test": "mocha --opts mocha.opts", "test:unit": "mocha --require sucrase/register --recursive src/**/__test__.ts", "quicktest": "mocha --opts mocha.opts", - "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",