var glob = require("glob"); var _require = require("fs"), writeFileSync = _require.writeFileSync, existsSync = _require.existsSync, readFileSync = _require.readFileSync; var _require2 = require("path"), join = _require2.join, dirname = _require2.dirname; var _require3 = require("chai"), assert = _require3.assert; var diff = require("jest-diff"); var _require4 = require("/usr/share/nodejs/jest-diff/build/constants"), NO_DIFF_MESSAGE = _require4.NO_DIFF_MESSAGE; var THROWS_TXT = "throws.txt"; var NOOP_FN = function NOOP_FN() { return ""; }; export function getFixtures(dirname) { for (var _len = arguments.length, rest = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { rest[_key - 1] = arguments[_key]; } var dir = join.apply(void 0, [dirname].concat(rest)); var fixtures = glob.sync(dir); if (fixtures.length === 0) { throw new Error("No fixtures found in " + JSON.stringify(dir)); } return fixtures; } function getThrowsFile(dirname) { var throwsFile = join(dirname, THROWS_TXT); if (existsSync(throwsFile)) { return readFileSync(throwsFile, "utf8").trim(); } } export function compareStrings(actual, expected) { actual = actual.trim(); expected = expected.trim(); var out = diff(expected, actual); if (out !== null && out !== NO_DIFF_MESSAGE) { throw new Error("\n" + out); } assert.equal(actual, expected); } export function compareWithExpected(fixtures) { var pre = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : NOOP_FN; var expectedFilename = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "expected.wast"; fixtures.forEach(function (suite) { it(suite, function () { var input = readFileSync(suite, "utf8"); var expectedThrows = getThrowsFile(dirname(suite)); var actual = ""; try { actual = pre(input, suite); if (typeof expectedThrows !== "undefined") { throw new Error("Expected parser error \"".concat(expectedThrows, "\", but got none.")); } } catch (e) { if (expectedThrows === undefined) { throw e; } compareStrings(e.message, expectedThrows); return; } var expectedFile = join(dirname(suite), expectedFilename); var expected; try { expected = readFileSync(expectedFile, "utf8"); } catch (e) { expected = actual; writeExpectedFile(expectedFile, actual); } compareStrings(actual, expected); }); }); } export function compare(fixtures) { var getActual = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : NOOP_FN; var getExpected = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : NOOP_FN; fixtures.forEach(function (suite) { it(suite, function () { var input = readFileSync(suite, "utf8"); var actual = getActual(input, suite); var expected = getExpected(input, suite); compareStrings(actual, expected); }); }); } function writeExpectedFile(expectedFile, content) { writeFileSync(expectedFile, content); console.log("Write expected file", expectedFile); } export * from "./fake-compiler";