pull/4917/head
pushkine 5 years ago
parent 36a0b717d4
commit 6f61b5d70d

22
package-lock.json generated

@ -1580,6 +1580,18 @@
"integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
"dev": true "dev": true
}, },
"globalyzer": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.4.tgz",
"integrity": "sha512-LeguVWaxgHN0MNbWC6YljNMzHkrCny9fzjmEUdnF1kQ7wATFD1RHFRqA1qxaX2tgxGENlcxjOflopBwj3YZiXA==",
"dev": true
},
"globrex": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz",
"integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==",
"dev": true
},
"graceful-fs": { "graceful-fs": {
"version": "4.2.0", "version": "4.2.0",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz",
@ -3553,6 +3565,16 @@
"integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
"dev": true "dev": true
}, },
"tiny-glob": {
"version": "0.2.6",
"resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.6.tgz",
"integrity": "sha512-A7ewMqPu1B5PWwC3m7KVgAu96Ch5LA0w4SnEN/LbDREj/gAD0nPWboRbn8YoP9ISZXqeNAlMvKSKoEuhcfK3Pw==",
"dev": true,
"requires": {
"globalyzer": "^0.1.0",
"globrex": "^0.1.1"
}
},
"tmp": { "tmp": {
"version": "0.0.33", "version": "0.0.33",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",

@ -95,6 +95,7 @@
"rollup": "^1.27.14", "rollup": "^1.27.14",
"source-map": "^0.7.3", "source-map": "^0.7.3",
"source-map-support": "^0.5.13", "source-map-support": "^0.5.13",
"tiny-glob": "^0.2.6",
"tslib": "^1.10.0", "tslib": "^1.10.0",
"typescript": "^3.5.3" "typescript": "^3.5.3"
}, },

@ -1,6 +1,6 @@
import * as assert$1 from 'assert'; import * as assert$1 from 'assert';
import * as jsdom from 'jsdom'; import * as jsdom from 'jsdom';
import { glob } from './tiny-glob'; import glob from 'tiny-glob/sync';
import * as path from 'path'; import * as path from 'path';
import * as fs from 'fs'; import * as fs from 'fs';
import * as colors from 'kleur'; import * as colors from 'kleur';
@ -258,4 +258,48 @@ export function mkdirp(dir) {
} catch (err) { } catch (err) {
// do nothing // do nothing
} }
}
export function update_expected(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(
fs.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 = fs.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");
fs.writeFileSync(path, value);
}
}
function get_relative(name) {
return `${cwd}/${dir.replace("input.svelte", name)}`;
}
run(compile, check, get_relative);
});
} }

@ -3,6 +3,7 @@ import * as fs from "fs";
import * as path from "path"; import * as path from "path";
import * as colors from "kleur"; import * as colors from "kleur";
import { loadConfig, svelte, shouldUpdateExpected } from "../helpers"; import { loadConfig, svelte, shouldUpdateExpected } from "../helpers";
import { sanitize } from "./update";
describe("js", () => { describe("js", () => {
fs.readdirSync(`${__dirname}/samples`).forEach(dir => { fs.readdirSync(`${__dirname}/samples`).forEach(dir => {
@ -32,7 +33,7 @@ describe("js", () => {
try { try {
const options = Object.assign(config.options || {}); const options = Object.assign(config.options || {});
actual = svelte.compile(input, options).js.code.replace(/generated by Svelte v\d+\.\d+\.\d+(-\w+\.\d+)?/, 'generated by Svelte vX.Y.Z'); actual = sanitize(svelte.compile(input, options));
} catch (err) { } catch (err) {
console.log(err.frame); console.log(err.frame);
throw err; throw err;

@ -1,31 +1,18 @@
import { update_expected } from "../update"; import { loadConfig, update_expected } from "../helpers";
export function sanitize(compiled){
return compiled.js.code.replace(/generated by Svelte v\d+\.\d+\.\d+(-\w+\.\d+)?/, 'generated by Svelte vX.Y.Z');
}
// this file will replace all the expected.js files with their _actual // this file will replace all the expected.js files with their _actual
// equivalents. Only use it when you're sure that you haven't // equivalents. Only use it when you're sure that you haven't
// broken anything! // broken anything!
function loadConfig(file) { update_expected(
try { (compile, check, get_relative) =>
const resolved = require.resolve(file); check(
delete require.cache[resolved]; "expected.js",
sanitize(compile(loadConfig(get_relative("_config.js")).options))
const config = require(resolved); ),
return config.default || config; __dirname
} catch (err) { );
if (err.code === "MODULE_NOT_FOUND") {
return {};
}
throw err;
}
}
update_expected((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);

@ -1,6 +1,7 @@
import * as assert from 'assert'; import * as assert from 'assert';
import * as fs from 'fs'; import * as fs from 'fs';
import { svelte, tryToLoadJson, shouldUpdateExpected } from '../helpers'; import { svelte, tryToLoadJson, shouldUpdateExpected } from '../helpers';
import { sanitize_ast, sanitize_error } from './update';
describe('parse', () => { describe('parse', () => {
fs.readdirSync(`${__dirname}/samples`).forEach(dir => { fs.readdirSync(`${__dirname}/samples`).forEach(dir => {
@ -25,9 +26,7 @@ describe('parse', () => {
const expectedError = tryToLoadJson(`${__dirname}/samples/${dir}/error.json`); const expectedError = tryToLoadJson(`${__dirname}/samples/${dir}/error.json`);
try { try {
const { ast } = svelte.compile(input, Object.assign(options, { const ast = sanitize_ast(svelte.compile(input, { ...options, generate: false }));
generate: false
}));
fs.writeFileSync(`${__dirname}/samples/${dir}/_actual.json`, JSON.stringify(ast, null, '\t')); fs.writeFileSync(`${__dirname}/samples/${dir}/_actual.json`, JSON.stringify(ast, null, '\t'));
@ -38,9 +37,8 @@ describe('parse', () => {
} catch (err) { } catch (err) {
if (err.name !== 'ParseError') throw err; if (err.name !== 'ParseError') throw err;
if (!expectedError) throw err; if (!expectedError) throw err;
const { code, message, pos, start } = err;
try { try {
assert.deepEqual({ code, message, pos, start }, expectedError); assert.deepEqual(sanitize_error(err), expectedError);
} catch (err2) { } catch (err2) {
const e = err2.code === 'MODULE_NOT_FOUND' ? err : err2; const e = err2.code === 'MODULE_NOT_FOUND' ? err : err2;
throw e; throw e;

@ -1,19 +1,27 @@
import { update_expected } from "../update"; import { update_expected } from "../update";
export function sanitize_ast(compiled){
return compiled.ast;
}
export function sanitize_error(e){
return {
code: e.code,
message: e.message,
start: e.start,
pos: e.pos
}
}
// this file will replace all the expected.js files with their _actual // this file will replace all the expected.js files with their _actual
// equivalents. Only use it when you're sure that you haven't // equivalents. Only use it when you're sure that you haven't
// broken anything! // broken anything!
update_expected((compile, check) => { update_expected((compile, check) => {
try { try {
check("output.json", compile({ generate: false }).ast); check("output.json", sanitize_ast(compile({ generate: false })));
} catch (e) { } catch (e) {
if (e.name !== "ParseError") throw e; if (e.name !== "ParseError") throw e;
check("error.json", { check("error.json", sanitize_error(e));
code: e.code,
message: e.message,
start: e.start,
pos: e.pos,
});
} }
}, __dirname); }, __dirname);

@ -2,7 +2,7 @@ import * as path from "path";
import * as fs from "fs"; import * as fs from "fs";
import { rollup } from 'rollup'; import { rollup } from 'rollup';
import virtual from '@rollup/plugin-virtual'; import virtual from '@rollup/plugin-virtual';
import { glob } from '../tiny-glob'; import glob from 'tiny-glob/sync';
import { clear_loops, flush, set_now, set_raf } from "../../internal"; import { clear_loops, flush, set_now, set_raf } from "../../internal";
import { import {

@ -1,6 +1,6 @@
import * as fs from "fs"; import * as fs from "fs";
import * as path from "path"; import * as path from "path";
import { glob } from '../tiny-glob'; import glob from 'tiny-glob/sync';
import { import {
assert, assert,

@ -1,4 +1,4 @@
import { glob } from './tiny-glob'; import glob from 'tiny-glob/sync';
import './setup'; import './setup';

Loading…
Cancel
Save