"use strict"; const tape = require("tape-catch"); const fs = require("fs"); const path = require("path"); const evaluate = require("../src/evaluate"); const NIX_SOURCE_REPO = process.env.NIX_SOURCE_REPO; if (NIX_SOURCE_REPO == null) { throw new Error(`To run the upstream Nix language tests, you must specify a NIX_SOURCE_REPO environment variable, that points at the root of a local checkout of the Git repository for Nix`); } const testsPath = path.join(NIX_SOURCE_REPO, "tests/lang"); let tests = fs.readdirSync(testsPath) .filter((entry) => entry.endsWith(".exp")) .map((entry) => entry.replace(/\.exp$/, "")); for (let test of tests) { try { let expression = fs.readFileSync(path.join(testsPath, `${test}.nix`), "utf8"); let expectedResult = fs.readFileSync(path.join(testsPath, `${test}.exp`), "utf8").replace(/\n$/, ""); tape(`Nix upstream language tests - ${test}`, (test) => { test.plan(1); let result = evaluate(expression).value.toString(); test.equals(expectedResult, result); }); } catch (error) { // FIXME: This would currently cause ENOENTs during evaluation (eg. reading a file from Nix itself) to be ignored if (error.code === "ENOENT") { // skip } else { throw error; } } }