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==",
"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": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz",
@ -3553,6 +3565,16 @@
"integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
"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": {
"version": "0.0.33",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",

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

@ -1,6 +1,6 @@
import * as assert$1 from 'assert';
import * as jsdom from 'jsdom';
import { glob } from './tiny-glob';
import glob from 'tiny-glob/sync';
import * as path from 'path';
import * as fs from 'fs';
import * as colors from 'kleur';
@ -258,4 +258,48 @@ export function mkdirp(dir) {
} catch (err) {
// 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 colors from "kleur";
import { loadConfig, svelte, shouldUpdateExpected } from "../helpers";
import { sanitize } from "./update";
describe("js", () => {
fs.readdirSync(`${__dirname}/samples`).forEach(dir => {
@ -32,7 +33,7 @@ describe("js", () => {
try {
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) {
console.log(err.frame);
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
// equivalents. Only use it when you're sure that you haven't
// broken anything!
function loadConfig(file) {
try {
const resolved = require.resolve(file);
delete require.cache[resolved];
const config = require(resolved);
return config.default || config;
} 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);
update_expected(
(compile, check, get_relative) =>
check(
"expected.js",
sanitize(compile(loadConfig(get_relative("_config.js")).options))
),
__dirname
);

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

@ -1,19 +1,27 @@
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
// equivalents. Only use it when you're sure that you haven't
// broken anything!
update_expected((compile, check) => {
try {
check("output.json", compile({ generate: false }).ast);
check("output.json", sanitize_ast(compile({ generate: false })));
} catch (e) {
if (e.name !== "ParseError") throw e;
check("error.json", {
code: e.code,
message: e.message,
start: e.start,
pos: e.pos,
});
check("error.json", sanitize_error(e));
}
}, __dirname);

@ -2,7 +2,7 @@ import * as path from "path";
import * as fs from "fs";
import { rollup } from 'rollup';
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 {

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

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

Loading…
Cancel
Save