import * as fs from "fs"; import assert from "assert"; import { svelte, tryToLoadJson } from "../helpers.js"; describe("validate", () => { fs.readdirSync("test/validator/samples").forEach(dir => { if (dir[0] === ".") return; // add .solo to a sample directory name to only run that test const solo = /\.solo/.test(dir); if (solo && process.env.CI) { throw new Error("Forgot to remove `solo: true` from test"); } (solo ? it.only : it)(dir, () => { const filename = `test/validator/samples/${dir}/input.html`; const input = fs.readFileSync(filename, "utf-8").replace(/\s+$/, ""); try { const parsed = svelte.parse(input); const errors = []; const warnings = []; svelte.validate(parsed, input, { onerror(error) { errors.push({ message: error.message, pos: error.pos, loc: error.loc }); }, onwarn(warning) { warnings.push({ message: warning.message, pos: warning.pos, loc: warning.loc }); } }); const expectedErrors = tryToLoadJson(`test/validator/samples/${dir}/errors.json`) || []; const expectedWarnings = tryToLoadJson(`test/validator/samples/${dir}/warnings.json`) || []; assert.deepEqual(errors, expectedErrors); assert.deepEqual(warnings, expectedWarnings); } catch (err) { if (err.name !== "ParseError") throw err; try { const expected = require(`./samples/${dir}/errors.json`)[0]; assert.equal(err.message, expected.message); assert.deepEqual(err.loc, expected.loc); assert.equal(err.pos, expected.pos); } catch (err2) { throw err2.code === "MODULE_NOT_FOUND" ? err : err2; } } }); }); it("errors if options.name is illegal", () => { assert.throws(() => { svelte.compile("
", { name: "not.valid" }); }, /options\.name must be a valid identifier/); }); it("warns if options.name is not capitalised", () => { const warnings = []; svelte.compile("
", { name: "lowercase", onwarn(warning) { warnings.push({ message: warning.message, pos: warning.pos, loc: warning.loc }); } }); assert.deepEqual(warnings, [ { message: "options.name should be capitalised", pos: undefined, loc: undefined } ]); }); });