diff --git a/Jakefile.js b/Jakefile.js
index a6483355c73..8329f66118f 100644
--- a/Jakefile.js
+++ b/Jakefile.js
@@ -2,759 +2,71 @@
// @ts-check
///
-var fs = require("fs");
-var os = require("os");
-var path = require("path");
-var child_process = require("child_process");
-var fold = require("travis-fold");
-var ts = require("./lib/typescript");
+const fs = require("fs");
+const os = require("os");
+const path = require("path");
+const child_process = require("child_process");
+const fold = require("travis-fold");
+const ts = require("./lib/typescript");
+const del = require("del");
const getDirSize = require("./scripts/build/getDirSize");
-// Variables
-var compilerDirectory = "src/compiler/";
-var serverDirectory = "src/server/";
-var harnessDirectory = "src/harness/";
-var libraryDirectory = "src/lib/";
-var scriptsDirectory = "scripts/";
-var unittestsDirectory = "src/harness/unittests/";
-var docDirectory = "doc/";
-var lclDirectory = "src/loc/lcl";
+const host = process.env.TYPESCRIPT_HOST || process.env.host || "node";
-var builtDirectory = "built/";
-var builtLocalDirectory = "built/local/";
-var LKGDirectory = "lib/";
+const defaultTestTimeout = 40000;
-var copyright = "CopyrightNotice.txt";
-var thirdParty = "ThirdPartyNoticeText.txt";
-
-var defaultTestTimeout = 40000;
-
-// add node_modules to path so we don't need global modules, prefer the modules by adding them first
-var nodeModulesPathPrefix = path.resolve("./node_modules/.bin/") + path.delimiter;
-if (process.env.path !== undefined) {
- process.env.path = nodeModulesPathPrefix + process.env.path;
-}
-else if (process.env.PATH !== undefined) {
- process.env.PATH = nodeModulesPathPrefix + process.env.PATH;
+const TaskNames = {
+ runtests: "runtests",
+ runtestsParallel: "runtests-parallel",
+ buildRules: "build-rules",
+ clean: "clean"
}
-/**
- * @param diagnostics {ts.Diagnostic[]}
- * @param [pretty] {boolean}
- */
-function diagnosticsToString(diagnostics, pretty) {
- const host = {
- getCurrentDirectory() { return process.cwd(); },
- getCanonicalFileName(fileName) { return fileName; },
- getNewLine() { return os.EOL; }
- };
- return pretty ? ts.formatDiagnosticsWithColorAndContext(diagnostics, host) :
- ts.formatDiagnostics(diagnostics, host);
-}
-
-/** @param diagnostics {ts.Diagnostic[]} */
-function reportDiagnostics(diagnostics) {
- console.log(diagnosticsToString(diagnostics, process.stdout.isTTY));
-}
-
-/** @param jsonPath {string} */
-function readJson(jsonPath) {
- const jsonText = fs.readFileSync(jsonPath, "utf8");
- const result = ts.parseConfigFileTextToJson(jsonPath, jsonText);
- if (result.error) {
- reportDiagnostics([result.error]);
- throw new Error("An error occurred during parse.");
+const Paths = {
+ lkgCompiler: "lib/tsc.js",
+ built: "built",
+ builtLocal: "built/local",
+ builtLocalCompiler: "built/local/tsc.js",
+ builtLocalRun: "built/local/run.js",
+ baselines: {
+ local: "tests/baselines/local",
+ localTest262: "tests/baselines/test262/local",
+ localRwc: "tests/baselines/rwc/local",
+ reference: "tests/baselines/reference",
+ referenceTest262: "tests/baselines/test262/reference",
+ referenceTwc: "tests/baselines/rwc/reference"
}
- return result.config;
}
-/** @param configPath {string} */
-function filesFromConfig(configPath) {
- const config = readJson(configPath);
- const configFileContent = ts.parseJsonConfigFileContent(config, ts.sys, path.dirname(configPath));
- if (configFileContent.errors && configFileContent.errors.length) {
- reportDiagnostics(configFileContent.errors);
- throw new Error("An error occurred during parse.");
- }
- return configFileContent.fileNames;
-}
+const ConfigFileFor = {
+ tsc: "src/tsc",
+ tsserver: "src/tsserver",
+ runjs: "src/testRunner",
+ lint: "scripts/tslint"
+};
-function toNs(diff) {
- return diff[0] * 1e9 + diff[1];
-}
+desc("Runs all the tests in parallel using the built run.js file. Optional arguments are: t[ests]=category1|category2|... d[ebug]=true.");
+task(TaskNames.runtestsParallel, [TaskNames.buildRules], function() {
+ tsbuild(ConfigFileFor.runjs);
+ runConsoleTests("min", /*parallel*/ true);
+}, { async: true});
-function mark() {
- if (!fold.isTravis()) return;
- var stamp = process.hrtime();
- var id = Math.floor(Math.random() * 0xFFFFFFFF).toString(16);
- console.log("travis_time:start:" + id + "\r");
- return {
- stamp: stamp,
- id: id
- };
-}
+desc("Runs all the tests in parallel using the built run.js file. Optional arguments are: t[ests]=category1|category2|... d[ebug]=true.");
+task(TaskNames.runtests, [TaskNames.buildRules], function() {
+ tsbuild(ConfigFileFor.runjs);
+ runConsoleTests('mocha-fivemat-progress-reporter', /*runInParallel*/ false);;
+}, { async: true});
-function measure(marker) {
- if (!fold.isTravis()) return;
- var diff = process.hrtime(marker.stamp);
- var total = [marker.stamp[0] + diff[0], marker.stamp[1] + diff[1]];
- console.log("travis_time:end:" + marker.id + ":start=" + toNs(marker.stamp) + ",finish=" + toNs(total) + ",duration=" + toNs(diff) + "\r");
-}
-
-function removeConstModifierFromEnumDeclarations(text) {
- return text.replace(/^(\s*)(export )?const enum (\S+) {(\s*)$/gm, '$1$2enum $3 {$4');
-}
-
-var compilerSources = filesFromConfig("./src/compiler/tsconfig.json");
-var servicesSources = filesFromConfig("./src/services/tsconfig.json");
-var cancellationTokenSources = filesFromConfig(path.join(serverDirectory, "cancellationToken/tsconfig.json"));
-var typingsInstallerSources = filesFromConfig(path.join(serverDirectory, "typingsInstaller/tsconfig.json"));
-var watchGuardSources = filesFromConfig(path.join(serverDirectory, "watchGuard/tsconfig.json"));
-var serverSources = filesFromConfig(path.join(serverDirectory, "tsconfig.json"));
-var languageServiceLibrarySources = filesFromConfig(path.join(serverDirectory, "tsconfig.library.json"));
-var harnessSources = filesFromConfig("./src/harness/tsconfig.json");
-
-var typesMapOutputPath = path.join(builtLocalDirectory, 'typesMap.json');
-
-/** @type {{ libs: string[], paths?: Record, sources?: Record }} */
-var libraries = readJson("./src/lib/libs.json");
-
-/**
- * .lcg file is what localization team uses to know what messages to localize.
- * The file is always generated in 'enu\diagnosticMessages.generated.json.lcg'
- */
-var generatedLCGFile = path.join(builtLocalDirectory, "enu", "diagnosticMessages.generated.json.lcg");
-
-/**
- * The localization target produces the two following transformations:
- * 1. 'src\loc\lcl\\diagnosticMessages.generated.json.lcl' => 'built\local\\diagnosticMessages.generated.json'
- * convert localized resources into a .json file the compiler can understand
- * 2. 'src\compiler\diagnosticMessages.generated.json' => 'built\local\ENU\diagnosticMessages.generated.json.lcg'
- * generate the lcg file (source of messages to localize) from the diagnosticMessages.generated.json
- */
-var localizationTargets = ["cs", "de", "es", "fr", "it", "ja", "ko", "pl", "pt-br", "ru", "tr", "zh-cn", "zh-tw"].map(function (f) {
- return path.join(builtLocalDirectory, f);
-}).concat(path.dirname(generatedLCGFile));
-
-// Prepends the contents of prefixFile to destinationFile
-function prependFile(prefixFile, destinationFile) {
- if (!fs.existsSync(prefixFile)) {
- fail(prefixFile + " does not exist!");
- }
- if (!fs.existsSync(destinationFile)) {
- fail(destinationFile + " failed to be created!");
- }
- var temp = "temptemp";
- jake.cpR(prefixFile, temp, { silent: true });
- fs.appendFileSync(temp, fs.readFileSync(destinationFile));
- fs.renameSync(temp, destinationFile);
-}
-
-// concatenate a list of sourceFiles to a destinationFile
-function concatenateFiles(destinationFile, sourceFiles) {
- var temp = "temptemp";
- // append all files in sequence
- var text = "";
- for (var i = 0; i < sourceFiles.length; i++) {
- if (!fs.existsSync(sourceFiles[i])) {
- fail(sourceFiles[i] + " does not exist!");
- }
- if (i > 0) { text += "\n\n"; }
- text += fs.readFileSync(sourceFiles[i]).toString().replace(/\r?\n/g, "\n");
- }
- fs.writeFileSync(temp, text);
- // Move the file to the final destination
- fs.renameSync(temp, destinationFile);
-}
-
-var useDebugMode = true;
-var host = process.env.TYPESCRIPT_HOST || process.env.host || "node";
-var compilerFilename = "tsc.js";
-var LKGCompiler = path.join(LKGDirectory, compilerFilename);
-var builtLocalCompiler = path.join(builtLocalDirectory, compilerFilename);
-
-/**
- * Compiles a file from a list of sources
- * @param {string} outFile the target file name
- * @param {string[]} sources an array of the names of the source files
- * @param {string[]} prereqs prerequisite tasks to compiling the file
- * @param {string[]} prefixes a list of files to prepend to the target file
- * @param {boolean} useBuiltCompiler true to use the built compiler, false to use the LKG
- * @param {object} [opts] property bag containing auxiliary options
- * @param {boolean} [opts.noOutFile] true to compile without using --out
- * @param {boolean} [opts.generateDeclarations] true to compile using --declaration
- * @param {string} [opts.outDir] value for '--outDir' command line option
- * @param {boolean} [opts.keepComments] false to compile using --removeComments
- * @param {boolean} [opts.preserveConstEnums] true if compiler should keep const enums in code
- * @param {boolean} [opts.noResolve] true if compiler should not include non-rooted files in compilation
- * @param {boolean} [opts.stripInternal] true if compiler should remove declarations marked as internal
- * @param {boolean} [opts.inlineSourceMap] true if compiler should inline sourceMap
- * @param {string[]} [opts.types] array of types to include in compilation
- * @param {string} [opts.lib] explicit libs to include.
- * @param {function(): void} [callback] a function to execute after the compilation process ends
- */
-function compileFile(outFile, sources, prereqs, prefixes, useBuiltCompiler, opts, callback) {
- file(outFile, prereqs, function() {
- var startCompileTime = mark();
- opts = opts || {};
- var compilerPath = useBuiltCompiler ? builtLocalCompiler : LKGCompiler;
- var options = "--noImplicitAny --noImplicitThis --alwaysStrict --noEmitOnError";
- if (opts.types) {
- options += " --types " + opts.types.join(",");
- }
- options += " --pretty";
- // Keep comments when specifically requested
- // or when in debug mode.
- if (!(opts.keepComments || useDebugMode)) {
- options += " --removeComments";
- }
-
- if (opts.generateDeclarations) {
- options += " --declaration";
- }
-
- if (opts.preserveConstEnums || useDebugMode) {
- options += " --preserveConstEnums";
- }
-
- if (opts.outDir) {
- options += " --outDir " + opts.outDir;
- }
-
- if (!opts.noOutFile) {
- options += " --out " + outFile;
- }
- else {
- options += " --module commonjs";
- }
-
- if (opts.noResolve) {
- options += " --noResolve";
- }
-
- if (useDebugMode) {
- if (opts.inlineSourceMap) {
- options += " --inlineSourceMap --inlineSources";
- }
- else {
- options += " --sourcemap";
- }
- }
- options += " --newLine LF";
-
- if (opts.stripInternal) {
- options += " --stripInternal";
- }
- options += " --target es5";
- if (opts.lib) {
- options += " --lib " + opts.lib;
- }
- else {
- options += " --lib es5";
- }
- options += " --noUnusedLocals --noUnusedParameters --strictNullChecks";
-
- var cmd = host + " " + compilerPath + " " + options + " ";
- cmd = cmd + sources.join(" ");
- console.log(cmd + "\n");
-
- var ex = jake.createExec([cmd]);
- // Add listeners for output and error
- ex.addListener("stdout", function (output) {
- process.stdout.write(output);
- });
- ex.addListener("stderr", function (error) {
- process.stderr.write(error);
- });
- ex.addListener("cmdEnd", function () {
- if (!useDebugMode && prefixes && fs.existsSync(outFile)) {
- for (var i in prefixes) {
- prependFile(prefixes[i], outFile);
- }
- }
-
- if (callback) {
- callback();
- }
-
- measure(startCompileTime);
- complete();
- });
- ex.addListener("error", function () {
- fs.unlinkSync(outFile);
- fail("Compilation of " + outFile + " unsuccessful");
- measure(startCompileTime);
- });
- ex.run();
- }, { async: true });
-}
-
-// Prerequisite task for built directory and library typings
-directory(builtLocalDirectory);
-
-var libraryTargets = libraries.libs.map(function (lib) {
- var relativeSources = ["header.d.ts"].concat(libraries.sources && libraries.sources[lib] || [lib + ".d.ts"]);
- var relativeTarget = libraries.paths && libraries.paths[lib] || ("lib." + lib + ".d.ts");
- var sources = [copyright].concat(relativeSources.map(s => path.join(libraryDirectory, s)));
- var target = path.join(builtLocalDirectory, relativeTarget);
- file(target, [builtLocalDirectory].concat(sources), function () {
- concatenateFiles(target, sources);
- });
- return target;
-});
-
-// Lib target to build the library files
-desc("Builds the library targets");
-task("lib", libraryTargets);
-
-
-// Generate diagnostics
-var processDiagnosticMessagesJs = path.join(scriptsDirectory, "processDiagnosticMessages.js");
-var processDiagnosticMessagesTs = path.join(scriptsDirectory, "processDiagnosticMessages.ts");
-var processDiagnosticMessagesSources = filesFromConfig("./scripts/processDiagnosticMessages.tsconfig.json");
-
-var diagnosticMessagesJson = path.join(compilerDirectory, "diagnosticMessages.json");
-var diagnosticInfoMapTs = path.join(compilerDirectory, "diagnosticInformationMap.generated.ts");
-var generatedDiagnosticMessagesJSON = path.join(compilerDirectory, "diagnosticMessages.generated.json");
-var builtGeneratedDiagnosticMessagesJSON = path.join(builtLocalDirectory, "diagnosticMessages.generated.json");
-
-file(processDiagnosticMessagesTs);
-
-// processDiagnosticMessages script
-compileFile(processDiagnosticMessagesJs,
- processDiagnosticMessagesSources,
- processDiagnosticMessagesSources,
- [],
- /*useBuiltCompiler*/ false);
-
-// Localize diagnostics script
-var generateLocalizedDiagnosticMessagesJs = path.join(scriptsDirectory, "generateLocalizedDiagnosticMessages.js");
-var generateLocalizedDiagnosticMessagesTs = path.join(scriptsDirectory, "generateLocalizedDiagnosticMessages.ts");
-
-file(generateLocalizedDiagnosticMessagesTs);
-
-compileFile(generateLocalizedDiagnosticMessagesJs,
- [generateLocalizedDiagnosticMessagesTs],
- [generateLocalizedDiagnosticMessagesTs],
- [],
- /*useBuiltCompiler*/ false, { noOutFile: true, types: ["node", "xml2js"] });
-
-// Localize diagnostics
-file(generatedLCGFile, [generateLocalizedDiagnosticMessagesJs, diagnosticInfoMapTs, generatedDiagnosticMessagesJSON], function () {
- var cmd = host + " " + generateLocalizedDiagnosticMessagesJs + " " + lclDirectory + " " + builtLocalDirectory + " " + generatedDiagnosticMessagesJSON;
- console.log(cmd);
- var ex = jake.createExec([cmd]);
- // Add listeners for output and error
- ex.addListener("stdout", function (output) {
- process.stdout.write(output);
- });
- ex.addListener("stderr", function (error) {
- process.stderr.write(error);
- });
- ex.addListener("cmdEnd", function () {
- complete();
- });
- ex.run();
+desc("Compiles tslint rules to js");
+task(TaskNames.buildRules, [], function() {
+ tsbuild(ConfigFileFor.lint);
}, { async: true });
-task("localize", [generatedLCGFile]);
-
-var buildProtocolTs = path.join(scriptsDirectory, "buildProtocol.ts");
-var buildProtocolJs = path.join(scriptsDirectory, "buildProtocol.js");
-var buildProtocolDts = path.join(builtLocalDirectory, "protocol.d.ts");
-var typescriptServicesDts = path.join(builtLocalDirectory, "typescriptServices.d.ts");
-
-file(buildProtocolTs);
-
-compileFile(buildProtocolJs,
- [buildProtocolTs],
- [buildProtocolTs],
- [],
- /*useBuiltCompiler*/ false,
- { noOutFile: true, lib: "es6" });
-
-file(buildProtocolDts, [buildProtocolTs, buildProtocolJs, typescriptServicesDts], function() {
-
- var protocolTs = path.join(serverDirectory, "protocol.ts");
-
- var cmd = host + " " + buildProtocolJs + " "+ protocolTs + " " + typescriptServicesDts + " " + buildProtocolDts;
- console.log(cmd);
- var ex = jake.createExec([cmd]);
- // Add listeners for output and error
- ex.addListener("stdout", function (output) {
- process.stdout.write(output);
- });
- ex.addListener("stderr", function (error) {
- process.stderr.write(error);
- });
- ex.addListener("cmdEnd", function () {
- complete();
- });
- ex.run();
-}, { async: true });
-
-// The generated diagnostics map; built for the compiler and for the 'generate-diagnostics' task
-file(diagnosticInfoMapTs, [processDiagnosticMessagesJs, diagnosticMessagesJson], function () {
- var cmd = host + " " + processDiagnosticMessagesJs + " " + diagnosticMessagesJson;
- console.log(cmd);
- var ex = jake.createExec([cmd]);
- // Add listeners for output and error
- ex.addListener("stdout", function (output) {
- process.stdout.write(output);
- });
- ex.addListener("stderr", function (error) {
- process.stderr.write(error);
- });
- ex.addListener("cmdEnd", function () {
- complete();
- });
- ex.run();
-}, { async: true });
-
-file(builtGeneratedDiagnosticMessagesJSON, [generatedDiagnosticMessagesJSON], function () {
- if (fs.existsSync(builtLocalDirectory)) {
- jake.cpR(generatedDiagnosticMessagesJSON, builtGeneratedDiagnosticMessagesJSON);
- }
-});
-
-desc("Generates a diagnostic file in TypeScript based on an input JSON file");
-task("generate-diagnostics", [diagnosticInfoMapTs]);
-
-// Publish nightly
-var configurePrereleaseJs = path.join(scriptsDirectory, "configurePrerelease.js");
-var configurePrereleaseTs = path.join(scriptsDirectory, "configurePrerelease.ts");
-var packageJson = "package.json";
-var versionFile = path.join(compilerDirectory, "core.ts");
-
-file(configurePrereleaseTs);
-
-compileFile(/*outfile*/configurePrereleaseJs,
- /*sources*/[configurePrereleaseTs],
- /*prereqs*/[configurePrereleaseTs],
- /*prefixes*/[],
- /*useBuiltCompiler*/ false,
- { noOutFile: true, generateDeclarations: false, keepComments: false, noResolve: false, stripInternal: false });
-
-task("setDebugMode", function () {
- useDebugMode = true;
-});
-
-task("configure-nightly", [configurePrereleaseJs], function () {
- var cmd = host + " " + configurePrereleaseJs + " dev " + packageJson + " " + versionFile;
- console.log(cmd);
- exec(cmd);
-}, { async: true });
-
-desc("Configure, build, test, and publish the nightly release.");
-task("publish-nightly", ["configure-nightly", "LKG", "clean", "setDebugMode", "runtests-parallel"], function () {
- var cmd = "npm publish --tag next";
- console.log(cmd);
- exec(cmd);
-});
-
-task("configure-insiders", [configurePrereleaseJs], function () {
- var cmd = host + " " + configurePrereleaseJs + " insiders " + packageJson + " " + versionFile;
- console.log(cmd);
- exec(cmd);
-}, { async: true });
-
-desc("Configure, build, test, and publish the insiders release.");
-task("publish-insiders", ["configure-insiders", "LKG", "clean", "setDebugMode", "runtests-parallel"], function () {
- var cmd = "npm publish --tag insiders";
- console.log(cmd);
- exec(cmd);
-});
-
-var importDefinitelyTypedTestsDirectory = path.join(scriptsDirectory, "importDefinitelyTypedTests");
-var importDefinitelyTypedTestsJs = path.join(importDefinitelyTypedTestsDirectory, "importDefinitelyTypedTests.js");
-var importDefinitelyTypedTestsTs = path.join(importDefinitelyTypedTestsDirectory, "importDefinitelyTypedTests.ts");
-
-file(importDefinitelyTypedTestsTs);
-file(importDefinitelyTypedTestsJs, ["tsd-scripts", importDefinitelyTypedTestsTs], function () {
- var cmd = host + " " + LKGCompiler + " -p " + importDefinitelyTypedTestsDirectory;
- console.log(cmd);
- exec(cmd);
-}, { async: true });
-
-task("importDefinitelyTypedTests", [importDefinitelyTypedTestsJs], function () {
- var cmd = host + " " + importDefinitelyTypedTestsJs + " ./ ../DefinitelyTyped";
- console.log(cmd);
- exec(cmd);
-}, { async: true });
-
-// Local target to build the compiler and services
-var tscFile = path.join(builtLocalDirectory, compilerFilename);
-compileFile(tscFile, compilerSources, [builtLocalDirectory, copyright].concat(compilerSources), [copyright], /*useBuiltCompiler:*/ false);
-
-var servicesFile = path.join(builtLocalDirectory, "typescriptServices.js");
-var standaloneDefinitionsFile = path.join(builtLocalDirectory, "typescriptServices.d.ts");
-var nodePackageFile = path.join(builtLocalDirectory, "typescript.js");
-var nodeDefinitionsFile = path.join(builtLocalDirectory, "typescript.d.ts");
-var nodeStandaloneDefinitionsFile = path.join(builtLocalDirectory, "typescript_standalone.d.ts");
-
-compileFile(servicesFile, servicesSources, [builtLocalDirectory, copyright].concat(servicesSources),
- /*prefixes*/[copyright],
- /*useBuiltCompiler*/ true,
- /*opts*/ {
- noOutFile: false,
- generateDeclarations: true,
- preserveConstEnums: true,
- keepComments: true,
- noResolve: false,
- stripInternal: true
- },
- /*callback*/ function () {
- jake.cpR(servicesFile, nodePackageFile, { silent: true });
-
- prependFile(copyright, standaloneDefinitionsFile);
-
- // Stanalone/web definition file using global 'ts' namespace
- jake.cpR(standaloneDefinitionsFile, nodeDefinitionsFile, { silent: true });
- var definitionFileContents = fs.readFileSync(nodeDefinitionsFile).toString();
- definitionFileContents = removeConstModifierFromEnumDeclarations(definitionFileContents);
- fs.writeFileSync(standaloneDefinitionsFile, definitionFileContents);
-
- // Official node package definition file, pointed to by 'typings' in package.json
- // Created by appending 'export = ts;' at the end of the standalone file to turn it into an external module
- var nodeDefinitionsFileContents = definitionFileContents + "\nexport = ts;";
- fs.writeFileSync(nodeDefinitionsFile, nodeDefinitionsFileContents);
-
- // Node package definition file to be distributed without the package. Created by replacing
- // 'ts' namespace with '"typescript"' as a module.
- var nodeStandaloneDefinitionsFileContents = definitionFileContents.replace(/declare (namespace|module) ts/g, 'declare module "typescript"');
- fs.writeFileSync(nodeStandaloneDefinitionsFile, nodeStandaloneDefinitionsFileContents);
- });
-
-file(typescriptServicesDts, [servicesFile]);
-
-var cancellationTokenFile = path.join(builtLocalDirectory, "cancellationToken.js");
-compileFile(cancellationTokenFile, cancellationTokenSources, [builtLocalDirectory].concat(cancellationTokenSources), /*prefixes*/ [copyright], /*useBuiltCompiler*/ true, { types: ["node"], outDir: builtLocalDirectory, noOutFile: true, lib: "es6" });
-
-var typingsInstallerFile = path.join(builtLocalDirectory, "typingsInstaller.js");
-compileFile(typingsInstallerFile, typingsInstallerSources, [builtLocalDirectory].concat(typingsInstallerSources), /*prefixes*/ [copyright], /*useBuiltCompiler*/ true, { types: ["node"], outDir: builtLocalDirectory, noOutFile: false, lib: "es6" });
-
-var watchGuardFile = path.join(builtLocalDirectory, "watchGuard.js");
-compileFile(watchGuardFile, watchGuardSources, [builtLocalDirectory].concat(watchGuardSources), /*prefixes*/ [copyright], /*useBuiltCompiler*/ true, { types: ["node"], outDir: builtLocalDirectory, noOutFile: false, lib: "es6" });
-
-var serverFile = path.join(builtLocalDirectory, "tsserver.js");
-compileFile(serverFile, serverSources, [builtLocalDirectory, copyright, cancellationTokenFile, typingsInstallerFile, watchGuardFile].concat(serverSources).concat(servicesSources), /*prefixes*/ [copyright], /*useBuiltCompiler*/ true, { types: ["node"], preserveConstEnums: true, lib: "es6" });
-var tsserverLibraryFile = path.join(builtLocalDirectory, "tsserverlibrary.js");
-var tsserverLibraryDefinitionFile = path.join(builtLocalDirectory, "tsserverlibrary.d.ts");
-file(typesMapOutputPath, /** @type {*} */(function() {
- var content = fs.readFileSync(path.join(serverDirectory, 'typesMap.json'));
- // Validate that it's valid JSON
- try {
- JSON.parse(content.toString());
- } catch (e) {
- console.log("Parse error in typesMap.json: " + e);
- }
- fs.writeFileSync(typesMapOutputPath, content);
-}));
-compileFile(
- tsserverLibraryFile,
- languageServiceLibrarySources,
- [builtLocalDirectory, copyright, builtLocalCompiler].concat(languageServiceLibrarySources).concat(libraryTargets),
- /*prefixes*/[copyright],
- /*useBuiltCompiler*/ true,
- { noOutFile: false, generateDeclarations: true, stripInternal: true, preserveConstEnums: true, keepComments: true },
- /*callback*/ function () {
- prependFile(copyright, tsserverLibraryDefinitionFile);
-
- // Appending exports at the end of the server library
- var tsserverLibraryDefinitionFileContents =
- fs.readFileSync(tsserverLibraryDefinitionFile).toString() +
- "\nexport = ts;" +
- "\nexport as namespace ts;";
- tsserverLibraryDefinitionFileContents = removeConstModifierFromEnumDeclarations(tsserverLibraryDefinitionFileContents);
-
- fs.writeFileSync(tsserverLibraryDefinitionFile, tsserverLibraryDefinitionFileContents);
- });
-
-// Local target to build the language service server library
-desc("Builds language service server library");
-task("lssl", [tsserverLibraryFile, tsserverLibraryDefinitionFile, typesMapOutputPath]);
-
-desc("Emit the start of the build fold");
-task("build-fold-start", [], function () {
- if (fold.isTravis()) console.log(fold.start("build"));
-});
-
-desc("Emit the end of the build fold");
-task("build-fold-end", [], function () {
- if (fold.isTravis()) console.log(fold.end("build"));
-});
-
-// Local target to build the compiler and services
-desc("Builds the full compiler and services");
-task("local", ["build-fold-start", "generate-diagnostics", "lib", tscFile, servicesFile, nodeDefinitionsFile, serverFile, buildProtocolDts, builtGeneratedDiagnosticMessagesJSON, "lssl", "localize", "build-fold-end"]);
-
-// Local target to build only tsc.js
-desc("Builds only the compiler");
-task("tsc", ["generate-diagnostics", "lib", tscFile]);
-
-// Local target to build the compiler and services
-desc("Sets release mode flag");
-task("release", function () {
- useDebugMode = false;
-});
-
-// Set the default task to "local"
-task("default", ["local"]);
-
-// Cleans the built directory
desc("Cleans the compiler output, declare files, and tests");
task("clean", function () {
- jake.rmRf(builtDirectory);
+ jake.rmRf(Paths.built);;
});
-// Generate Markdown spec
-var word2mdJs = path.join(scriptsDirectory, "word2md.js");
-var word2mdTs = path.join(scriptsDirectory, "word2md.ts");
-var specWord = path.join(docDirectory, "TypeScript Language Specification.docx");
-var specMd = path.join(docDirectory, "spec.md");
-
-file(word2mdTs);
-
-// word2md script
-compileFile(word2mdJs,
- [word2mdTs],
- [word2mdTs],
- [],
- /*useBuiltCompiler*/ false,
- {
- lib: "scripthost,es5"
- });
-
-// The generated spec.md; built for the 'generate-spec' task
-file(specMd, [word2mdJs, specWord], function () {
- var specWordFullPath = path.resolve(specWord);
- var specMDFullPath = path.resolve(specMd);
- var cmd = "cscript //nologo " + word2mdJs + ' "' + specWordFullPath + '" ' + '"' + specMDFullPath + '"';
- console.log(cmd);
- child_process.exec(cmd, function () {
- complete();
- });
-}, { async: true });
-
-
-desc("Generates a Markdown version of the Language Specification");
-task("generate-spec", [specMd]);
-
-
-// Makes a new LKG. This target does not build anything, but errors if not all the outputs are present in the built/local directory
-desc("Makes a new LKG out of the built js files");
-task("LKG", ["clean", "release", "local"].concat(libraryTargets), () => {
- const sizeBefore = getDirSize(LKGDirectory);
- var expectedFiles = [tscFile, servicesFile, serverFile, nodePackageFile, nodeDefinitionsFile, standaloneDefinitionsFile, tsserverLibraryFile, tsserverLibraryDefinitionFile, cancellationTokenFile, typingsInstallerFile, buildProtocolDts, watchGuardFile].
- concat(libraryTargets).
- concat(localizationTargets);
- var missingFiles = expectedFiles.filter(f => !fs.existsSync(f));
- if (missingFiles.length > 0) {
- fail(new Error("Cannot replace the LKG unless all built targets are present in directory " + builtLocalDirectory +
- ". The following files are missing:\n" + missingFiles.join("\n")));
- }
- // Copy all the targets into the LKG directory
- jake.mkdirP(LKGDirectory);
- expectedFiles.forEach(f => jake.cpR(f, LKGDirectory));
-
- const sizeAfter = getDirSize(LKGDirectory);
- if (sizeAfter > (sizeBefore * 1.10)) {
- throw new Error("The lib folder increased by 10% or more. This likely indicates a bug.");
- }
-});
-
-// Test directory
-directory(builtLocalDirectory);
-
-// Task to build the tests infrastructure using the built compiler
-var run = path.join(builtLocalDirectory, "run.js");
-compileFile(
- /*outFile*/ run,
- /*source*/ harnessSources,
- /*prereqs*/[builtLocalDirectory, tscFile, tsserverLibraryFile].concat(libraryTargets).concat(servicesSources).concat(harnessSources),
- /*prefixes*/[],
- /*useBuiltCompiler:*/ true,
- /*opts*/ { types: ["node", "mocha", "chai"], lib: "es6" });
-
-var internalTests = "internal/";
-
-var localBaseline = "tests/baselines/local/";
-var refBaseline = "tests/baselines/reference/";
-
-var localRwcBaseline = path.join(internalTests, "baselines/rwc/local");
-var refRwcBaseline = path.join(internalTests, "baselines/rwc/reference");
-
-var localTest262Baseline = path.join(internalTests, "baselines/test262/local");
-var refTest262Baseline = path.join(internalTests, "baselines/test262/reference");
-
-desc("Builds the test infrastructure using the built compiler");
-task("tests", ["local", run].concat(libraryTargets));
-
-function exec(cmd, completeHandler, errorHandler) {
- var ex = jake.createExec([cmd], /** @type {jake.ExecOptions} */({ windowsVerbatimArguments: true, interactive: true }));
- // Add listeners for output and error
- ex.addListener("stdout", function (output) {
- process.stdout.write(output);
- });
- ex.addListener("stderr", function (error) {
- process.stderr.write(error);
- });
- ex.addListener("cmdEnd", function () {
- if (completeHandler) {
- completeHandler();
- }
- complete();
- });
- ex.addListener("error", function (e, status) {
- if (errorHandler) {
- errorHandler(e, status);
- }
- else {
- fail("Process exited with code " + status);
- }
- });
-
- ex.run();
-}
-
-const del = require("del");
-function cleanTestDirs() {
- // Clean the local baselines directory
- if (fs.existsSync(localBaseline)) {
- del.sync(localBaseline);
- }
-
- // Clean the local Rwc baselines directory
- if (fs.existsSync(localRwcBaseline)) {
- del.sync(localRwcBaseline);
- }
-
- jake.mkdirP(localRwcBaseline);
- jake.mkdirP(localTest262Baseline);
- jake.mkdirP(localBaseline);
-}
-
-// used to pass data from jake command line directly to run.js
-function writeTestConfigFile(tests, runners, light, taskConfigsFolder, workerCount, stackTraceLimit, colors, testTimeout) {
- var testConfigContents = JSON.stringify({
- runners: runners ? runners.split(",") : undefined,
- test: tests ? [tests] : undefined,
- light: light,
- workerCount: workerCount,
- taskConfigsFolder: taskConfigsFolder,
- stackTraceLimit: stackTraceLimit,
- noColor: !colors,
- timeout: testTimeout
- });
- fs.writeFileSync('test.config', testConfigContents);
-}
-
-function deleteTemporaryProjectOutput() {
- if (fs.existsSync(path.join(localBaseline, "projectOutput/"))) {
- jake.rmRf(path.join(localBaseline, "projectOutput/"));
- }
-}
-
function runConsoleTests(defaultReporter, runInParallel) {
var dirty = process.env.dirty;
if (!dirty) {
@@ -803,7 +115,7 @@ function runConsoleTests(defaultReporter, runInParallel) {
// timeout normally isn't necessary but Travis-CI has been timing out on compiler baselines occasionally
// default timeout is 2sec which really should be enough, but maybe we just need a small amount longer
if (!runInParallel) {
- var startTime = mark();
+ var startTime = Travis.mark();
var args = [];
args.push("-R", reporter);
if (tests) {
@@ -827,7 +139,7 @@ function runConsoleTests(defaultReporter, runInParallel) {
else {
args.push("-t", testTimeout);
}
- args.push(run);
+ args.push(Paths.builtLocalRun);
var cmd = "mocha " + args.join(" ");
console.log(cmd);
@@ -836,12 +148,12 @@ function runConsoleTests(defaultReporter, runInParallel) {
process.env.NODE_ENV = "development";
exec(cmd, function () {
process.env.NODE_ENV = savedNodeEnv;
- measure(startTime);
+ Travis.measure(startTime);
runLinter();
finish();
}, function (e, status) {
process.env.NODE_ENV = savedNodeEnv;
- measure(startTime);
+ Travis.measure(startTime);
finish(status);
});
@@ -849,15 +161,15 @@ function runConsoleTests(defaultReporter, runInParallel) {
else {
var savedNodeEnv = process.env.NODE_ENV;
process.env.NODE_ENV = "development";
- var startTime = mark();
+ var startTime = Travis.mark();
exec(host + " " + run, function () {
process.env.NODE_ENV = savedNodeEnv;
- measure(startTime);
+ Travis.measure(startTime);
runLinter();
finish();
}, function (e, status) {
process.env.NODE_ENV = savedNodeEnv;
- measure(startTime);
+ Travis.measure(startTime);
finish(status);
});
}
@@ -885,245 +197,128 @@ function runConsoleTests(defaultReporter, runInParallel) {
});
lint.invoke();
}
-}
-desc("Runs all the tests in parallel using the built run.js file. Optional arguments are: t[ests]=category1|category2|... d[ebug]=true.");
-task("runtests-parallel", ["build-rules", "tests", builtLocalDirectory], function () {
- runConsoleTests('min', /*runInParallel*/ true);
-}, { async: true });
-
-desc("Runs the tests using the built run.js file. Optional arguments are: t[ests]=regex r[eporter]=[list|spec|json|] d[ebug]=true color[s]=false lint=true bail=false dirty=false.");
-task("runtests", ["build-rules", "tests", builtLocalDirectory], function() {
- runConsoleTests('mocha-fivemat-progress-reporter', /*runInParallel*/ false);
-}, { async: true });
-
-desc("Generates code coverage data via instanbul");
-task("generate-code-coverage", ["tests", builtLocalDirectory], function () {
- var testTimeout = process.env.timeout || defaultTestTimeout;
- var cmd = 'istanbul cover node_modules/mocha/bin/_mocha -- -R min -t ' + testTimeout + ' ' + run;
- console.log(cmd);
- exec(cmd);
-}, { async: true });
-
-// Browser tests
-var nodeServerOutFile = "tests/webTestServer.js";
-var nodeServerInFile = "tests/webTestServer.ts";
-compileFile(nodeServerOutFile, [nodeServerInFile], [builtLocalDirectory, tscFile], [], /*useBuiltCompiler:*/ true, { noOutFile: true, lib: "es6" });
-
-desc("Runs browserify on run.js to produce a file suitable for running tests in the browser");
-task("browserify", [], function() {
- // Shell out to `gulp`, since we do the work to handle sourcemaps correctly w/o inline maps there
- var cmd = 'gulp browserify --silent';
- exec(cmd);
-}, { async: true });
-
-desc("Runs the tests using the built run.js file like 'jake runtests'. Syntax is jake runtests-browser. Additional optional parameters tests=[regex], browser=[chrome|IE]");
-task("runtests-browser", ["browserify", nodeServerOutFile], function () {
- cleanTestDirs();
- host = "node";
- var browser = process.env.browser || process.env.b || (os.platform() === "win32" ? "edge" : "chrome");
- var runners = process.env.runners || process.env.runner || process.env.ru;
- var tests = process.env.test || process.env.tests || process.env.t;
- var light = process.env.light || false;
- var testConfigFile = 'test.config';
- if (fs.existsSync(testConfigFile)) {
- fs.unlinkSync(testConfigFile);
- }
- if (tests || runners || light) {
- writeTestConfigFile(tests, runners, light);
+ // used to pass data from jake command line directly to run.js
+ function writeTestConfigFile(tests, runners, light, taskConfigsFolder, workerCount, stackTraceLimit, colors, testTimeout) {
+ var testConfigContents = JSON.stringify({
+ runners: runners ? runners.split(",") : undefined,
+ test: tests ? [tests] : undefined,
+ light: light,
+ workerCount: workerCount,
+ taskConfigsFolder: taskConfigsFolder,
+ stackTraceLimit: stackTraceLimit,
+ noColor: !colors,
+ timeout: testTimeout
+ });
+ fs.writeFileSync('test.config', testConfigContents);
}
- tests = tests ? tests : '';
- var cmd = host + " tests/webTestServer.js " + browser + " " + JSON.stringify(tests);
- console.log(cmd);
- exec(cmd);
-}, { async: true });
-
-function getDiffTool() {
- var program = process.env['DIFF'];
- if (!program) {
- fail("Add the 'DIFF' environment variable to the path of the program you want to use.");
- }
- return program;
-}
-
-// Baseline Diff
-desc("Diffs the compiler baselines using the diff tool specified by the 'DIFF' environment variable");
-task('diff', function () {
- var cmd = '"' + getDiffTool() + '" ' + refBaseline + ' ' + localBaseline;
- console.log(cmd);
- exec(cmd);
-}, { async: true });
-
-desc("Diffs the RWC baselines using the diff tool specified by the 'DIFF' environment variable");
-task('diff-rwc', function () {
- var cmd = '"' + getDiffTool() + '" ' + refRwcBaseline + ' ' + localRwcBaseline;
- console.log(cmd);
- exec(cmd);
-}, { async: true });
-
-desc("Builds the test sources and automation in debug mode");
-task("tests-debug", ["setDebugMode", "tests"]);
-
-
-// Makes the test results the new baseline
-desc("Makes the most recent test results the new baseline, overwriting the old baseline");
-task("baseline-accept", function () {
- acceptBaseline(localBaseline, refBaseline);
-});
-
-function acceptBaseline(sourceFolder, targetFolder) {
- console.log('Accept baselines from ' + sourceFolder + ' to ' + targetFolder);
- var deleteEnding = '.delete';
-
- acceptBaselineFolder(sourceFolder, targetFolder);
-
- function acceptBaselineFolder(sourceFolder, targetFolder) {
- var files = fs.readdirSync(sourceFolder);
-
- for (var i in files) {
- var filename = files[i];
- var fullLocalPath = path.join(sourceFolder, filename);
- var stat = fs.statSync(fullLocalPath);
- if (stat.isFile()) {
- if (filename.substr(filename.length - deleteEnding.length) === deleteEnding) {
- filename = filename.substr(0, filename.length - deleteEnding.length);
- fs.unlinkSync(path.join(targetFolder, filename));
- }
- else {
- var target = path.join(targetFolder, filename);
- if (fs.existsSync(target)) {
- fs.unlinkSync(target);
- }
- jake.mkdirP(path.dirname(target));
- fs.renameSync(path.join(sourceFolder, filename), target);
- }
- }
- else if (stat.isDirectory()) {
- acceptBaselineFolder(fullLocalPath, path.join(targetFolder, filename));
- }
+ function deleteTemporaryProjectOutput() {
+ if (fs.existsSync(path.join(Paths.baselines.local, "projectOutput/"))) {
+ jake.rmRf(path.join(Paths.baselines.local, "projectOutput/"));
}
}
}
-desc("Makes the most recent rwc test results the new baseline, overwriting the old baseline");
-task("baseline-accept-rwc", function () {
- acceptBaseline(localRwcBaseline, refRwcBaseline);
-});
-
-desc("Makes the most recent test262 test results the new baseline, overwriting the old baseline");
-task("baseline-accept-test262", function () {
- acceptBaseline(localTest262Baseline, refTest262Baseline);
-});
-
-
-// Webhost
-var webhostPath = "tests/webhost/webtsc.ts";
-var webhostJsPath = "tests/webhost/webtsc.js";
-compileFile(webhostJsPath, [webhostPath], [tscFile, webhostPath].concat(libraryTargets), [], /*useBuiltCompiler*/true);
-
-desc("Builds the tsc web host");
-task("webhost", [webhostJsPath], function () {
- jake.cpR(path.join(builtLocalDirectory, "lib.d.ts"), "tests/webhost/", { silent: true });
-});
-
-// Perf compiler
-var perftscPath = "tests/perftsc.ts";
-var perftscJsPath = "built/local/perftsc.js";
-compileFile(perftscJsPath, [perftscPath], [tscFile, perftscPath, "tests/perfsys.ts"].concat(libraryTargets), [], /*useBuiltCompiler*/ true);
-desc("Builds augmented version of the compiler for perf tests");
-task("perftsc", [perftscJsPath]);
-
-// Instrumented compiler
-var loggedIOpath = harnessDirectory + 'loggedIO.ts';
-var loggedIOJsPath = builtLocalDirectory + 'loggedIO.js';
-file(loggedIOJsPath, [builtLocalDirectory, loggedIOpath], function () {
- var temp = builtLocalDirectory + 'temp';
- jake.mkdirP(temp);
- var options = "--target es5 --lib es6 --types --outdir " + temp + ' ' + loggedIOpath;
- var cmd = host + " " + LKGDirectory + compilerFilename + " " + options + " ";
- console.log(cmd + "\n");
- var ex = jake.createExec([cmd]);
- ex.addListener("cmdEnd", function () {
- fs.renameSync(temp + '/harness/loggedIO.js', loggedIOJsPath);
- jake.rmRf(temp);
- complete();
- });
- ex.run();
-}, { async: true });
-
-var instrumenterPath = harnessDirectory + 'instrumenter.ts';
-var instrumenterJsPath = builtLocalDirectory + 'instrumenter.js';
-compileFile(instrumenterJsPath, [instrumenterPath], [tscFile, instrumenterPath].concat(libraryTargets), [], /*useBuiltCompiler*/ true, { lib: "es6", types: ["node"], noOutFile: true, outDir: builtLocalDirectory });
-
-desc("Builds an instrumented tsc.js - run with test=[testname]");
-task('tsc-instrumented', [loggedIOJsPath, instrumenterJsPath, tscFile], function () {
- var test = process.env.test || process.env.tests || process.env.t || "iocapture";
- var cmd = host + ' ' + instrumenterJsPath + " record " + test + " " + builtLocalDirectory + compilerFilename;
- console.log(cmd);
- var ex = jake.createExec([cmd]);
- ex.addListener("cmdEnd", function () {
- complete();
- });
- ex.run();
-}, { async: true });
-
-desc("Updates the sublime plugin's tsserver");
-task("update-sublime", ["local", serverFile], function () {
- jake.cpR(serverFile, "../TypeScript-Sublime-Plugin/tsserver/");
- jake.cpR(serverFile + ".map", "../TypeScript-Sublime-Plugin/tsserver/");
-});
-
-var tslintRuleDir = "scripts/tslint/rules";
-var tslintRules = fs.readdirSync(tslintRuleDir);
-var tslintRulesFiles = tslintRules.map(function (p) {
- return path.join(tslintRuleDir, p);
-});
-var tslintRulesOutFiles = tslintRules.map(function (p) {
- return path.join(builtLocalDirectory, "tslint/rules", p.replace(".ts", ".js"));
-});
-var tslintFormattersDir = "scripts/tslint/formatters";
-var tslintFormatters = [
- "autolinkableStylishFormatter",
-];
-var tslintFormatterFiles = tslintFormatters.map(function (p) {
- return path.join(tslintFormattersDir, p + ".ts");
-});
-var tslintFormattersOutFiles = tslintFormatters.map(function (p) {
- return path.join(builtLocalDirectory, "tslint/formatters", p + ".js");
-});
-desc("Compiles tslint rules to js");
-task("build-rules", ["build-rules-start"].concat(tslintRulesOutFiles).concat(tslintFormattersOutFiles).concat(["build-rules-end"]));
-tslintRulesFiles.forEach(function (ruleFile, i) {
- compileFile(tslintRulesOutFiles[i], [ruleFile], [ruleFile], [], /*useBuiltCompiler*/ false,
- { noOutFile: true, generateDeclarations: false, outDir: path.join(builtLocalDirectory, "tslint/rules"), lib: "es6" });
-});
-tslintFormatterFiles.forEach(function (ruleFile, i) {
- compileFile(tslintFormattersOutFiles[i], [ruleFile], [ruleFile], [], /*useBuiltCompiler*/ false,
- { noOutFile: true, generateDeclarations: false, outDir: path.join(builtLocalDirectory, "tslint/formatters"), lib: "es6" });
-});
-
-desc("Emit the start of the build-rules fold");
-task("build-rules-start", [], function () {
- if (fold.isTravis()) console.log(fold.start("build-rules"));
-});
-
-desc("Emit the end of the build-rules fold");
-task("build-rules-end", [], function () {
- if (fold.isTravis()) console.log(fold.end("build-rules"));
-});
-
-desc("Runs tslint on the compiler sources. Optional arguments are: f[iles]=regex");
-task("lint", ["build-rules"], () => {
- if (fold.isTravis()) console.log(fold.start("lint"));
- function lint(project, cb) {
- const fix = process.env.fix || process.env.f;
- const cmd = `node node_modules/tslint/bin/tslint --project ${project} --formatters-dir ./built/local/tslint/formatters --format autolinkableStylish${fix ? " --fix" : ""}`;
- console.log("Linting: " + cmd);
- jake.exec([cmd], cb, /** @type {jake.ExecOptions} */({ interactive: true, windowsVerbatimArguments: true }));
+function cleanTestDirs() {
+ // Clean the local baselines directory
+ if (fs.existsSync(Paths.baselines.local)) {
+ del.sync(Paths.baselines.local);
}
- lint("scripts/tslint/tsconfig.json", () => lint("src/tsconfig-base.json", () => {
- if (fold.isTravis()) console.log(fold.end("lint"));
+
+ // Clean the local Rwc baselines directory
+ if (fs.existsSync(Paths.baselines.localRwc)) {
+ del.sync(Paths.baselines.localRwc);
+ }
+
+ jake.mkdirP(Paths.baselines.local);
+ jake.mkdirP(Paths.baselines.localRwc);
+ jake.mkdirP(Paths.baselines.localTest262);
+}
+
+function tsbuild(tsconfigPath, useLkg = false) {
+ const startCompileTime = Travis.mark();
+
+ const compilerPath = useLkg ? Paths.lkgCompiler : Paths.builtLocalCompiler;
+ const cmd = `${host} ${compilerPath} -b -v ${tsconfigPath}`;
+
+ var ex = jake.createExec([cmd]);
+ // Add listeners for output and error
+ ex.addListener("stdout", function (output) {
+ process.stdout.write(output);
+ });
+ ex.addListener("stderr", function (error) {
+ process.stderr.write(error);
+ });
+ ex.addListener("cmdEnd", function () {
+ /*
+ if (!useDebugMode && prefixes && fs.existsSync(outFile)) {
+ for (var i in prefixes) {
+ prependFile(prefixes[i], outFile);
+ }
+ }
+
+ if (callback) {
+ callback();
+ }
+ */
+
+ Travis.measure(startCompileTime);
complete();
- }));
-});
+ });
+ ex.addListener("error", function () {
+ fail(`Compilation of ${tsconfigPath} unsuccessful`);
+ Travis.measure(startCompileTime);
+ });
+ ex.run();
+}
+
+const Travis = {
+ mark() {
+ if (!fold.isTravis()) return;
+ var stamp = process.hrtime();
+ var id = Math.floor(Math.random() * 0xFFFFFFFF).toString(16);
+ console.log("travis_time:start:" + id + "\r");
+ return {
+ stamp: stamp,
+ id: id
+ };
+ },
+ measure(marker) {
+ if (!fold.isTravis()) return;
+ var diff = process.hrtime(marker.stamp);
+ var total = [marker.stamp[0] + diff[0], marker.stamp[1] + diff[1]];
+ console.log("travis_time:end:" + marker.id + ":start=" + toNs(marker.stamp) + ",finish=" + toNs(total) + ",duration=" + toNs(diff) + "\r");
+ }
+};
+
+function toNs(diff) {
+ return diff[0] * 1e9 + diff[1];
+}
+
+function exec(cmd, completeHandler, errorHandler) {
+ var ex = jake.createExec([cmd], /** @type {jake.ExecOptions} */({ windowsVerbatimArguments: true, interactive: true }));
+ // Add listeners for output and error
+ ex.addListener("stdout", function (output) {
+ process.stdout.write(output);
+ });
+ ex.addListener("stderr", function (error) {
+ process.stderr.write(error);
+ });
+ ex.addListener("cmdEnd", function () {
+ if (completeHandler) {
+ completeHandler();
+ }
+ complete();
+ });
+ ex.addListener("error", function (e, status) {
+ if (errorHandler) {
+ errorHandler(e, status);
+ }
+ else {
+ fail("Process exited with code " + status);
+ }
+ });
+
+ ex.run();
+}
\ No newline at end of file
diff --git a/scripts/tslint/tsconfig.json b/scripts/tslint/tsconfig.json
index 9d348658394..79ec67c3ad6 100644
--- a/scripts/tslint/tsconfig.json
+++ b/scripts/tslint/tsconfig.json
@@ -1,6 +1,8 @@
{
"compilerOptions": {
"lib": ["es6"],
+ "sourceMap": false,
+ "declaration": false,
"noImplicitAny": true,
"noImplicitReturns": true,
"noImplicitThis": true,
diff --git a/src/built/local/cancellationToken.js b/src/built/local/cancellationToken.js
new file mode 100644
index 00000000000..5ead504797b
--- /dev/null
+++ b/src/built/local/cancellationToken.js
@@ -0,0 +1,57 @@
+"use strict";
+var fs = require("fs");
+function pipeExists(name) {
+ try {
+ fs.statSync(name);
+ return true;
+ }
+ catch (e) {
+ return false;
+ }
+}
+function createCancellationToken(args) {
+ var cancellationPipeName;
+ for (var i = 0; i < args.length - 1; i++) {
+ if (args[i] === "--cancellationPipeName") {
+ cancellationPipeName = args[i + 1];
+ break;
+ }
+ }
+ if (!cancellationPipeName) {
+ return {
+ isCancellationRequested: function () { return false; },
+ setRequest: function (_requestId) { return void 0; },
+ resetRequest: function (_requestId) { return void 0; }
+ };
+ }
+ if (cancellationPipeName.charAt(cancellationPipeName.length - 1) === "*") {
+ var namePrefix_1 = cancellationPipeName.slice(0, -1);
+ if (namePrefix_1.length === 0 || namePrefix_1.indexOf("*") >= 0) {
+ throw new Error("Invalid name for template cancellation pipe: it should have length greater than 2 characters and contain only one '*'.");
+ }
+ var perRequestPipeName_1;
+ var currentRequestId_1;
+ return {
+ isCancellationRequested: function () { return perRequestPipeName_1 !== undefined && pipeExists(perRequestPipeName_1); },
+ setRequest: function (requestId) {
+ currentRequestId_1 = requestId;
+ perRequestPipeName_1 = namePrefix_1 + requestId;
+ },
+ resetRequest: function (requestId) {
+ if (currentRequestId_1 !== requestId) {
+ throw new Error("Mismatched request id, expected " + currentRequestId_1 + ", actual " + requestId);
+ }
+ perRequestPipeName_1 = undefined;
+ }
+ };
+ }
+ else {
+ return {
+ isCancellationRequested: function () { return pipeExists(cancellationPipeName); },
+ setRequest: function (_requestId) { return void 0; },
+ resetRequest: function (_requestId) { return void 0; }
+ };
+ }
+}
+module.exports = createCancellationToken;
+//# sourceMappingURL=cancellationToken.js.map
\ No newline at end of file
diff --git a/src/built/local/cancellationToken.js.map b/src/built/local/cancellationToken.js.map
new file mode 100644
index 00000000000..d8f1300682a
--- /dev/null
+++ b/src/built/local/cancellationToken.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"cancellationToken.js","sourceRoot":"","sources":["../../cancellationToken/cancellationToken.ts"],"names":[],"mappings":";AAEA,uBAA0B;AAQ1B,oBAAoB,IAAY;IAC5B,IAAI;QACA,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAClB,OAAO,IAAI,CAAC;KACf;IACD,OAAO,CAAC,EAAE;QACN,OAAO,KAAK,CAAC;KAChB;AACL,CAAC;AAED,iCAAiC,IAAc;IAC3C,IAAI,oBAAwC,CAAC;IAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;QACtC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,wBAAwB,EAAE;YACtC,oBAAoB,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACnC,MAAM;SACT;KACJ;IACD,IAAI,CAAC,oBAAoB,EAAE;QACvB,OAAO;YACH,uBAAuB,EAAE,cAAM,OAAA,KAAK,EAAL,CAAK;YACpC,UAAU,EAAE,UAAC,UAAkB,IAAW,OAAA,KAAK,CAAC,EAAN,CAAM;YAChD,YAAY,EAAE,UAAC,UAAkB,IAAW,OAAA,KAAK,CAAC,EAAN,CAAM;SACrD,CAAC;KACL;IAMD,IAAI,oBAAoB,CAAC,MAAM,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;QACtE,IAAM,YAAU,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACrD,IAAI,YAAU,CAAC,MAAM,KAAK,CAAC,IAAI,YAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YACzD,MAAM,IAAI,KAAK,CAAC,wHAAwH,CAAC,CAAC;SAC7I;QACD,IAAI,oBAAsC,CAAC;QAC3C,IAAI,kBAAwB,CAAC;QAC7B,OAAO;YACH,uBAAuB,EAAE,cAAM,OAAA,oBAAkB,KAAK,SAAS,IAAI,UAAU,CAAC,oBAAkB,CAAC,EAAlE,CAAkE;YACjG,UAAU,YAAC,SAAiB;gBACxB,kBAAgB,GAAG,SAAS,CAAC;gBAC7B,oBAAkB,GAAG,YAAU,GAAG,SAAS,CAAC;YAChD,CAAC;YACD,YAAY,YAAC,SAAiB;gBAC1B,IAAI,kBAAgB,KAAK,SAAS,EAAE;oBAChC,MAAM,IAAI,KAAK,CAAC,qCAAmC,kBAAgB,iBAAY,SAAW,CAAC,CAAC;iBAC/F;gBACD,oBAAkB,GAAG,SAAS,CAAC;YACnC,CAAC;SACJ,CAAC;KACL;SACI;QACD,OAAO;YACH,uBAAuB,EAAE,cAAM,OAAA,UAAU,CAAC,oBAAqB,CAAC,EAAjC,CAAiC;YAChE,UAAU,EAAE,UAAC,UAAkB,IAAW,OAAA,KAAK,CAAC,EAAN,CAAM;YAChD,YAAY,EAAE,UAAC,UAAkB,IAAW,OAAA,KAAK,CAAC,EAAN,CAAM;SACrD,CAAC;KACL;AACL,CAAC;AACD,iBAAS,uBAAuB,CAAC"}
\ No newline at end of file
diff --git a/src/built/local/harness.d.ts b/src/built/local/harness.d.ts
new file mode 100644
index 00000000000..04c03214347
--- /dev/null
+++ b/src/built/local/harness.d.ts
@@ -0,0 +1,2223 @@
+///
+///
+declare namespace collections {
+ interface SortOptions {
+ comparer: (a: T, b: T) => number;
+ sort: "insertion" | "comparison";
+ }
+ class SortedMap {
+ private _comparer;
+ private _keys;
+ private _values;
+ private _order;
+ private _version;
+ private _copyOnWrite;
+ constructor(comparer: ((a: K, b: K) => number) | SortOptions, iterable?: Iterable<[K, V]>);
+ readonly size: number;
+ readonly comparer: (a: K, b: K) => number;
+ readonly [Symbol.toStringTag]: string;
+ has(key: K): boolean;
+ get(key: K): V | undefined;
+ set(key: K, value: V): this;
+ delete(key: K): boolean;
+ clear(): void;
+ forEach(callback: (value: V, key: K, collection: this) => void, thisArg?: any): void;
+ keys(): IterableIterator;
+ values(): IterableIterator;
+ entries(): IterableIterator<[K, V]>;
+ [Symbol.iterator](): IterableIterator<[K, V]>;
+ private writePreamble;
+ private writePostScript;
+ private getIterationOrder;
+ }
+ function insertAt(array: T[], index: number, value: T): void;
+ function getIterator(iterable: Iterable): Iterator;
+ function nextResult(iterator: Iterator): IteratorResult | undefined;
+ function closeIterator(iterator: Iterator): void;
+ /**
+ * A collection of metadata that supports inheritance.
+ */
+ class Metadata {
+ private static readonly _undefinedValue;
+ private _parent;
+ private _map;
+ private _version;
+ private _size;
+ private _parentVersion;
+ constructor(parent?: Metadata);
+ readonly size: number;
+ readonly parent: Metadata | undefined;
+ has(key: string): boolean;
+ get(key: string): any;
+ set(key: string, value: any): this;
+ delete(key: string): boolean;
+ clear(): void;
+ forEach(callback: (value: any, key: string, map: this) => void): void;
+ private static _escapeKey;
+ private static _unescapeKey;
+ }
+}
+/**
+ * Common utilities
+ */
+declare namespace utils {
+ function removeTestPathPrefixes(text: string, retainTrailingDirectorySeparator?: boolean): string;
+ /**
+ * Removes leading indentation from a template literal string.
+ */
+ function dedent(array: TemplateStringsArray, ...args: any[]): string;
+ function toUtf8(text: string): string;
+ function getByteOrderMarkLength(text: string): number;
+ function removeByteOrderMark(text: string): string;
+ function addUTF8ByteOrderMark(text: string): string;
+}
+declare namespace documents {
+ class TextDocument {
+ readonly meta: Map;
+ readonly file: string;
+ readonly text: string;
+ private _lineStarts;
+ private _testFile;
+ constructor(file: string, text: string, meta?: Map);
+ readonly lineStarts: ReadonlyArray;
+ static fromTestFile(file: Harness.Compiler.TestFile): TextDocument;
+ asTestFile(): Harness.Compiler.TestFile;
+ }
+ interface RawSourceMap {
+ version: number;
+ file: string;
+ sourceRoot?: string;
+ sources: string[];
+ sourcesContent?: string[];
+ names: string[];
+ mappings: string;
+ }
+ interface Mapping {
+ mappingIndex: number;
+ emittedLine: number;
+ emittedColumn: number;
+ sourceIndex: number;
+ sourceLine: number;
+ sourceColumn: number;
+ nameIndex?: number;
+ }
+ class SourceMap {
+ readonly raw: RawSourceMap;
+ readonly mapFile: string | undefined;
+ readonly version: number;
+ readonly file: string;
+ readonly sourceRoot: string | undefined;
+ readonly sources: ReadonlyArray;
+ readonly sourcesContent: ReadonlyArray | undefined;
+ readonly mappings: ReadonlyArray;
+ readonly names: ReadonlyArray | undefined;
+ private static readonly _mappingRegExp;
+ private static readonly _sourceMappingURLRegExp;
+ private static readonly _dataURLRegExp;
+ private static readonly _base64Chars;
+ private _emittedLineMappings;
+ private _sourceLineMappings;
+ constructor(mapFile: string | undefined, data: string | RawSourceMap);
+ static getUrl(text: string): string | undefined;
+ static fromUrl(url: string): SourceMap | undefined;
+ static fromSource(text: string): SourceMap | undefined;
+ getMappingsForEmittedLine(emittedLine: number): ReadonlyArray | undefined;
+ getMappingsForSourceLine(sourceIndex: number, sourceLine: number): ReadonlyArray | undefined;
+ private static _decodeVLQ;
+ }
+}
+declare namespace vpath {
+ export import sep = ts.directorySeparator;
+ export import normalizeSeparators = ts.normalizeSlashes;
+ export import isAbsolute = ts.isRootedDiskPath;
+ export import isRoot = ts.isDiskPathRoot;
+ export import hasTrailingSeparator = ts.hasTrailingDirectorySeparator;
+ export import addTrailingSeparator = ts.ensureTrailingDirectorySeparator;
+ export import removeTrailingSeparator = ts.removeTrailingDirectorySeparator;
+ export import normalize = ts.normalizePath;
+ export import combine = ts.combinePaths;
+ export import parse = ts.getPathComponents;
+ export import reduce = ts.reducePathComponents;
+ export import format = ts.getPathFromPathComponents;
+ export import resolve = ts.resolvePath;
+ export import compare = ts.comparePaths;
+ export import compareCaseSensitive = ts.comparePathsCaseSensitive;
+ export import compareCaseInsensitive = ts.comparePathsCaseInsensitive;
+ export import dirname = ts.getDirectoryPath;
+ export import basename = ts.getBaseFileName;
+ export import extname = ts.getAnyExtensionFromPath;
+ export import relative = ts.getRelativePathFromDirectory;
+ export import beneath = ts.containsPath;
+ export import changeExtension = ts.changeAnyExtension;
+ export import isTypeScript = ts.hasTypeScriptFileExtension;
+ export import isJavaScript = ts.hasJavaScriptFileExtension;
+ const enum ValidationFlags {
+ None = 0,
+ RequireRoot = 1,
+ RequireDirname = 2,
+ RequireBasename = 4,
+ RequireExtname = 8,
+ RequireTrailingSeparator = 16,
+ AllowRoot = 32,
+ AllowDirname = 64,
+ AllowBasename = 128,
+ AllowExtname = 256,
+ AllowTrailingSeparator = 512,
+ AllowNavigation = 1024,
+ AllowWildcard = 2048,
+ /** Path must be a valid directory root */
+ Root = 545,
+ /** Path must be a absolute */
+ Absolute = 2017,
+ /** Path may be relative or absolute */
+ RelativeOrAbsolute = 2016,
+ /** Path may only be a filename */
+ Basename = 260
+ }
+ function validate(path: string, flags?: ValidationFlags): string;
+ function isDeclaration(path: string): boolean;
+ function isSourceMap(path: string): boolean;
+ function isJavaScriptSourceMap(path: string): boolean;
+ function isJson(path: string): boolean;
+ function isDefaultLibrary(path: string): boolean;
+ function isTsConfigFile(path: string): boolean;
+}
+declare namespace vfs {
+ /**
+ * Posix-style path to the TypeScript compiler build outputs (including tsc.js, lib.d.ts, etc.)
+ */
+ const builtFolder = "/.ts";
+ /**
+ * Posix-style path to additional mountable folders (./tests/projects in this repo)
+ */
+ const projectsFolder = "/.projects";
+ /**
+ * Posix-style path to additional test libraries
+ */
+ const testLibFolder = "/.lib";
+ /**
+ * Posix-style path to sources under test
+ */
+ const srcFolder = "/.src";
+ /**
+ * Represents a virtual POSIX-like file system.
+ */
+ class FileSystem {
+ /** Indicates whether the file system is case-sensitive (`false`) or case-insensitive (`true`). */
+ readonly ignoreCase: boolean;
+ /** Gets the comparison function used to compare two paths. */
+ readonly stringComparer: (a: string, b: string) => number;
+ private _lazy;
+ private _cwd;
+ private _time;
+ private _shadowRoot;
+ private _dirStack;
+ constructor(ignoreCase: boolean, options?: FileSystemOptions);
+ /**
+ * Gets metadata for this `FileSystem`.
+ */
+ readonly meta: collections.Metadata;
+ /**
+ * Gets a value indicating whether the file system is read-only.
+ */
+ readonly isReadonly: boolean;
+ /**
+ * Makes the file system read-only.
+ */
+ makeReadonly(): this;
+ /**
+ * Gets the file system shadowed by this file system.
+ */
+ readonly shadowRoot: FileSystem | undefined;
+ /**
+ * Gets a shadow copy of this file system. Changes to the shadow copy do not affect the
+ * original, allowing multiple copies of the same core file system without multiple copies
+ * of the same data.
+ */
+ shadow(ignoreCase?: boolean): FileSystem;
+ /**
+ * Gets or sets the timestamp (in milliseconds) used for file status, returning the previous timestamp.
+ *
+ * @link http://pubs.opengroup.org/onlinepubs/9699919799/functions/time.html
+ */
+ time(value?: number | Date | (() => number | Date)): number;
+ /**
+ * Gets the metadata object for a path.
+ * @param path
+ */
+ filemeta(path: string): collections.Metadata;
+ private _filemeta;
+ /**
+ * Get the pathname of the current working directory.
+ *
+ * @link - http://pubs.opengroup.org/onlinepubs/9699919799/functions/getcwd.html
+ */
+ cwd(): string;
+ /**
+ * Changes the current working directory.
+ *
+ * @link http://pubs.opengroup.org/onlinepubs/9699919799/functions/chdir.html
+ */
+ chdir(path: string): void;
+ /**
+ * Pushes the current directory onto the directory stack and changes the current working directory to the supplied path.
+ */
+ pushd(path?: string): void;
+ /**
+ * Pops the previous directory from the location stack and changes the current directory to that directory.
+ */
+ popd(): void;
+ /**
+ * Update the file system with a set of files.
+ */
+ apply(files: FileSet): void;
+ /**
+ * Scan file system entries along a path. If `path` is a symbolic link, it is dereferenced.
+ * @param path The path at which to start the scan.
+ * @param axis The axis along which to traverse.
+ * @param traversal The traversal scheme to use.
+ */
+ scanSync(path: string, axis: Axis, traversal: Traversal): string[];
+ /**
+ * Scan file system entries along a path.
+ * @param path The path at which to start the scan.
+ * @param axis The axis along which to traverse.
+ * @param traversal The traversal scheme to use.
+ */
+ lscanSync(path: string, axis: Axis, traversal: Traversal): string[];
+ private _scan;
+ /**
+ * Mounts a physical or virtual file system at a location in this virtual file system.
+ *
+ * @param source The path in the physical (or other virtual) file system.
+ * @param target The path in this virtual file system.
+ * @param resolver An object used to resolve files in `source`.
+ */
+ mountSync(source: string, target: string, resolver: FileSystemResolver): void;
+ /**
+ * Recursively remove all files and directories underneath the provided path.
+ */
+ rimrafSync(path: string): void;
+ /**
+ * Make a directory and all of its parent paths (if they don't exist).
+ */
+ mkdirpSync(path: string): void;
+ getFileListing(): string;
+ /**
+ * Print diagnostic information about the structure of the file system to the console.
+ */
+ debugPrint(): void;
+ /**
+ * Determines whether a path exists.
+ */
+ existsSync(path: string): boolean;
+ /**
+ * Get file status. If `path` is a symbolic link, it is dereferenced.
+ *
+ * @link http://pubs.opengroup.org/onlinepubs/9699919799/functions/stat.html
+ *
+ * NOTE: do not rename this method as it is intended to align with the same named export of the "fs" module.
+ */
+ statSync(path: string): Stats;
+ /**
+ * Change file access times
+ *
+ * NOTE: do not rename this method as it is intended to align with the same named export of the "fs" module.
+ */
+ utimesSync(path: string, atime: Date, mtime: Date): void;
+ /**
+ * Get file status. If `path` is a symbolic link, it is dereferenced.
+ *
+ * @link http://pubs.opengroup.org/onlinepubs/9699919799/functions/lstat.html
+ *
+ * NOTE: do not rename this method as it is intended to align with the same named export of the "fs" module.
+ */
+ lstatSync(path: string): Stats;
+ private _stat;
+ /**
+ * Read a directory. If `path` is a symbolic link, it is dereferenced.
+ *
+ * @link http://pubs.opengroup.org/onlinepubs/9699919799/functions/readdir.html
+ *
+ * NOTE: do not rename this method as it is intended to align with the same named export of the "fs" module.
+ */
+ readdirSync(path: string): string[];
+ /**
+ * Make a directory.
+ *
+ * @link http://pubs.opengroup.org/onlinepubs/9699919799/functions/mkdir.html
+ *
+ * NOTE: do not rename this method as it is intended to align with the same named export of the "fs" module.
+ */
+ mkdirSync(path: string): void;
+ private _mkdir;
+ /**
+ * Remove a directory.
+ *
+ * @link http://pubs.opengroup.org/onlinepubs/9699919799/functions/rmdir.html
+ *
+ * NOTE: do not rename this method as it is intended to align with the same named export of the "fs" module.
+ */
+ rmdirSync(path: string): void;
+ /**
+ * Link one file to another file (also known as a "hard link").
+ *
+ * @link http://pubs.opengroup.org/onlinepubs/9699919799/functions/link.html
+ *
+ * NOTE: do not rename this method as it is intended to align with the same named export of the "fs" module.
+ */
+ linkSync(oldpath: string, newpath: string): void;
+ /**
+ * Remove a directory entry.
+ *
+ * @link http://pubs.opengroup.org/onlinepubs/9699919799/functions/unlink.html
+ *
+ * NOTE: do not rename this method as it is intended to align with the same named export of the "fs" module.
+ */
+ unlinkSync(path: string): void;
+ /**
+ * Rename a file.
+ *
+ * @link http://pubs.opengroup.org/onlinepubs/9699919799/functions/rename.html
+ *
+ * NOTE: do not rename this method as it is intended to align with the same named export of the "fs" module.
+ */
+ renameSync(oldpath: string, newpath: string): void;
+ /**
+ * Make a symbolic link.
+ *
+ * @link http://pubs.opengroup.org/onlinepubs/9699919799/functions/symlink.html
+ *
+ * NOTE: do not rename this method as it is intended to align with the same named export of the "fs" module.
+ */
+ symlinkSync(target: string, linkpath: string): void;
+ /**
+ * Resolve a pathname.
+ *
+ * @link http://pubs.opengroup.org/onlinepubs/9699919799/functions/realpath.html
+ *
+ * NOTE: do not rename this method as it is intended to align with the same named export of the "fs" module.
+ */
+ realpathSync(path: string): string;
+ /**
+ * Read from a file.
+ *
+ * NOTE: do not rename this method as it is intended to align with the same named export of the "fs" module.
+ */
+ readFileSync(path: string, encoding?: null): Buffer;
+ /**
+ * Read from a file.
+ *
+ * NOTE: do not rename this method as it is intended to align with the same named export of the "fs" module.
+ */
+ readFileSync(path: string, encoding: string): string;
+ /**
+ * Read from a file.
+ *
+ * NOTE: do not rename this method as it is intended to align with the same named export of the "fs" module.
+ */
+ readFileSync(path: string, encoding?: string | null): string | Buffer;
+ /**
+ * Write to a file.
+ *
+ * NOTE: do not rename this method as it is intended to align with the same named export of the "fs" module.
+ */
+ writeFileSync(path: string, data: string | Buffer, encoding?: string | null): void;
+ private _mknod;
+ private _addLink;
+ private _removeLink;
+ private _replaceLink;
+ private _getRootLinks;
+ private _getLinks;
+ private _getShadow;
+ private _copyShadowLinks;
+ private _getSize;
+ private _getBuffer;
+ /**
+ * Walk a path to its end.
+ *
+ * @param path The path to follow.
+ * @param noFollow A value indicating whether to *not* dereference a symbolic link at the
+ * end of a path.
+ *
+ * @link http://man7.org/linux/man-pages/man7/path_resolution.7.html
+ */
+ private _walk;
+ /**
+ * Resolve a path relative to the current working directory.
+ */
+ private _resolve;
+ private _applyFiles;
+ private _applyFileExtendedOptions;
+ private _applyFilesWorker;
+ private _normalizeFileSetEntry;
+ }
+ interface FileSystemOptions {
+ time?: number | Date | (() => number | Date);
+ files?: FileSet;
+ cwd?: string;
+ meta?: Record;
+ }
+ interface FileSystemCreateOptions {
+ documents?: ReadonlyArray;
+ cwd?: string;
+ }
+ type Axis = "ancestors" | "ancestors-or-self" | "self" | "descendants-or-self" | "descendants";
+ interface Traversal {
+ /** A function called to choose whether to continue to traverse to either ancestors or descendants. */
+ traverse?(path: string, stats: Stats): boolean;
+ /** A function called to choose whether to accept a path as part of the result. */
+ accept?(path: string, stats: Stats): boolean;
+ }
+ interface FileSystemResolver {
+ statSync(path: string): {
+ mode: number;
+ size: number;
+ };
+ readdirSync(path: string): string[];
+ readFileSync(path: string): Buffer;
+ }
+ interface FileSystemResolverHost {
+ useCaseSensitiveFileNames(): boolean;
+ getAccessibleFileSystemEntries(path: string): ts.FileSystemEntries;
+ directoryExists(path: string): boolean;
+ fileExists(path: string): boolean;
+ getFileSize(path: string): number;
+ readFile(path: string): string | undefined;
+ getWorkspaceRoot(): string;
+ }
+ function createResolver(host: FileSystemResolverHost): FileSystemResolver;
+ /**
+ * Create a virtual file system from a physical file system using the following path mappings:
+ *
+ * - `/.ts` is a directory mapped to `${workspaceRoot}/built/local`
+ * - `/.lib` is a directory mapped to `${workspaceRoot}/tests/lib`
+ * - `/.src` is a virtual directory to be used for tests.
+ *
+ * Unless overridden, `/.src` will be the current working directory for the virtual file system.
+ */
+ function createFromFileSystem(host: FileSystemResolverHost, ignoreCase: boolean, { documents, cwd }?: FileSystemCreateOptions): FileSystem;
+ class Stats {
+ dev: number;
+ ino: number;
+ mode: number;
+ nlink: number;
+ uid: number;
+ gid: number;
+ rdev: number;
+ size: number;
+ blksize: number;
+ blocks: number;
+ atimeMs: number;
+ mtimeMs: number;
+ ctimeMs: number;
+ birthtimeMs: number;
+ atime: Date;
+ mtime: Date;
+ ctime: Date;
+ birthtime: Date;
+ constructor();
+ constructor(dev: number, ino: number, mode: number, nlink: number, rdev: number, size: number, blksize: number, blocks: number, atimeMs: number, mtimeMs: number, ctimeMs: number, birthtimeMs: number);
+ isFile(): boolean;
+ isDirectory(): boolean;
+ isSymbolicLink(): boolean;
+ isBlockDevice(): boolean;
+ isCharacterDevice(): boolean;
+ isFIFO(): boolean;
+ isSocket(): boolean;
+ }
+ const IOErrorMessages: Readonly<{
+ EACCES: string;
+ EIO: string;
+ ENOENT: string;
+ EEXIST: string;
+ ELOOP: string;
+ ENOTDIR: string;
+ EISDIR: string;
+ EBADF: string;
+ EINVAL: string;
+ ENOTEMPTY: string;
+ EPERM: string;
+ EROFS: string;
+ }>;
+ function createIOError(code: keyof typeof IOErrorMessages, details?: string): NodeJS.ErrnoException;
+ /**
+ * A template used to populate files, directories, links, etc. in a virtual file system.
+ */
+ interface FileSet {
+ [name: string]: DirectoryLike | FileLike | Link | Symlink | Mount | null | undefined;
+ }
+ type DirectoryLike = FileSet | Directory;
+ type FileLike = File | Buffer | string;
+ /** Extended options for a directory in a `FileSet` */
+ class Directory {
+ readonly files: FileSet;
+ readonly meta: Record | undefined;
+ constructor(files: FileSet, { meta }?: {
+ meta?: Record;
+ });
+ }
+ /** Extended options for a file in a `FileSet` */
+ class File {
+ readonly data: Buffer | string;
+ readonly encoding: string | undefined;
+ readonly meta: Record | undefined;
+ constructor(data: Buffer | string, { meta, encoding }?: {
+ encoding?: string;
+ meta?: Record;
+ });
+ }
+ /** Extended options for a hard link in a `FileSet` */
+ class Link {
+ readonly path: string;
+ constructor(path: string);
+ }
+ /** Extended options for a symbolic link in a `FileSet` */
+ class Symlink {
+ readonly symlink: string;
+ readonly meta: Record | undefined;
+ constructor(symlink: string, { meta }?: {
+ meta?: Record;
+ });
+ }
+ /** Extended options for mounting a virtual copy of an external file system via a `FileSet` */
+ class Mount {
+ readonly source: string;
+ readonly resolver: FileSystemResolver;
+ readonly meta: Record | undefined;
+ constructor(source: string, resolver: FileSystemResolver, { meta }?: {
+ meta?: Record;
+ });
+ }
+}
+/**
+ * Test harness compiler functionality.
+ */
+declare namespace compiler {
+ interface Project {
+ file: string;
+ config?: ts.ParsedCommandLine;
+ errors?: ts.Diagnostic[];
+ }
+ function readProject(host: fakes.ParseConfigHost, project: string | undefined, existingOptions?: ts.CompilerOptions): Project | undefined;
+ /**
+ * Correlates compilation inputs and outputs
+ */
+ interface CompilationOutput {
+ readonly inputs: ReadonlyArray;
+ readonly js: documents.TextDocument | undefined;
+ readonly dts: documents.TextDocument | undefined;
+ readonly map: documents.TextDocument | undefined;
+ }
+ class CompilationResult {
+ readonly host: fakes.CompilerHost;
+ readonly program: ts.Program | undefined;
+ readonly result: ts.EmitResult | undefined;
+ readonly options: ts.CompilerOptions;
+ readonly diagnostics: ReadonlyArray;
+ readonly js: ReadonlyMap;
+ readonly dts: ReadonlyMap;
+ readonly maps: ReadonlyMap;
+ private _inputs;
+ private _inputsAndOutputs;
+ constructor(host: fakes.CompilerHost, options: ts.CompilerOptions, program: ts.Program | undefined, result: ts.EmitResult | undefined, diagnostics: ts.Diagnostic[]);
+ readonly vfs: vfs.FileSystem;
+ readonly inputs: ReadonlyArray;
+ readonly outputs: ReadonlyArray;
+ readonly traces: ReadonlyArray;
+ readonly emitSkipped: boolean;
+ readonly singleFile: boolean;
+ readonly commonSourceDirectory: string;
+ getInputsAndOutputs(path: string): CompilationOutput | undefined;
+ getInputs(path: string): ReadonlyArray | undefined;
+ getOutput(path: string, kind: "js" | "dts" | "map"): documents.TextDocument | undefined;
+ getSourceMapRecord(): string | undefined;
+ getSourceMap(path: string): documents.SourceMap | undefined;
+ getOutputPath(path: string, ext: string): string;
+ getNumberOfJsFiles(): number;
+ }
+ function compileFiles(host: fakes.CompilerHost, rootFiles: string[] | undefined, compilerOptions: ts.CompilerOptions): CompilationResult;
+}
+declare namespace evaluator {
+ function evaluateTypeScript(sourceText: string, options?: ts.CompilerOptions, globals?: Record): any;
+}
+/**
+ * Fake implementations of various compiler dependencies.
+ */
+declare namespace fakes {
+ interface SystemOptions {
+ executingFilePath?: string;
+ newLine?: "\r\n" | "\n";
+ env?: Record;
+ }
+ /**
+ * A fake `ts.System` that leverages a virtual file system.
+ */
+ class System implements ts.System {
+ readonly vfs: vfs.FileSystem;
+ readonly args: string[];
+ readonly output: string[];
+ readonly newLine: string;
+ readonly useCaseSensitiveFileNames: boolean;
+ exitCode: number | undefined;
+ private readonly _executingFilePath;
+ private readonly _env;
+ constructor(vfs: vfs.FileSystem, { executingFilePath, newLine, env }?: SystemOptions);
+ write(message: string): void;
+ readFile(path: string): string | undefined;
+ writeFile(path: string, data: string, writeByteOrderMark?: boolean): void;
+ deleteFile(path: string): void;
+ fileExists(path: string): boolean;
+ directoryExists(path: string): boolean;
+ createDirectory(path: string): void;
+ getCurrentDirectory(): string;
+ getDirectories(path: string): string[];
+ readDirectory(path: string, extensions?: ReadonlyArray, exclude?: ReadonlyArray, include?: ReadonlyArray, depth?: number): string[];
+ getAccessibleFileSystemEntries(path: string): ts.FileSystemEntries;
+ exit(exitCode?: number): void;
+ getFileSize(path: string): number;
+ resolvePath(path: string): string;
+ getExecutingFilePath(): string;
+ getModifiedTime(path: string): Date;
+ setModifiedTime(path: string, time: Date): void;
+ createHash(data: string): string;
+ realpath(path: string): string;
+ getEnvironmentVariable(name: string): string;
+ private _getStats;
+ }
+ /**
+ * A fake `ts.ParseConfigHost` that leverages a virtual file system.
+ */
+ class ParseConfigHost implements ts.ParseConfigHost {
+ readonly sys: System;
+ constructor(sys: System | vfs.FileSystem);
+ readonly vfs: vfs.FileSystem;
+ readonly useCaseSensitiveFileNames: boolean;
+ fileExists(fileName: string): boolean;
+ directoryExists(directoryName: string): boolean;
+ readFile(path: string): string | undefined;
+ readDirectory(path: string, extensions: string[], excludes: string[], includes: string[], depth: number): string[];
+ }
+ /**
+ * A fake `ts.CompilerHost` that leverages a virtual file system.
+ */
+ class CompilerHost implements ts.CompilerHost {
+ readonly sys: System;
+ readonly defaultLibLocation: string;
+ readonly outputs: documents.TextDocument[];
+ private readonly _outputsMap;
+ readonly traces: string[];
+ readonly shouldAssertInvariants: boolean;
+ private _setParentNodes;
+ private _sourceFiles;
+ private _parseConfigHost;
+ private _newLine;
+ constructor(sys: System | vfs.FileSystem, options?: ts.CompilerOptions, setParentNodes?: boolean);
+ readonly vfs: vfs.FileSystem;
+ readonly parseConfigHost: ParseConfigHost;
+ getCurrentDirectory(): string;
+ useCaseSensitiveFileNames(): boolean;
+ getNewLine(): string;
+ getCanonicalFileName(fileName: string): string;
+ deleteFile(fileName: string): void;
+ fileExists(fileName: string): boolean;
+ directoryExists(directoryName: string): boolean;
+ getModifiedTime(fileName: string): Date;
+ setModifiedTime(fileName: string, time: Date): void;
+ getDirectories(path: string): string[];
+ readDirectory(path: string, extensions?: ReadonlyArray, exclude?: ReadonlyArray, include?: ReadonlyArray, depth?: number): string[];
+ readFile(path: string): string | undefined;
+ writeFile(fileName: string, content: string, writeByteOrderMark: boolean): void;
+ trace(s: string): void;
+ realpath(path: string): string;
+ getDefaultLibLocation(): string;
+ getDefaultLibFileName(options: ts.CompilerOptions): string;
+ getSourceFile(fileName: string, languageVersion: number): ts.SourceFile | undefined;
+ }
+}
+declare namespace ts.server {
+ interface SessionClientHost extends LanguageServiceHost {
+ writeMessage(message: string): void;
+ }
+ function extractMessage(message: string): string;
+ class SessionClient implements LanguageService {
+ private host;
+ private sequence;
+ private lineMaps;
+ private messages;
+ private lastRenameEntry;
+ constructor(host: SessionClientHost);
+ onMessage(message: string): void;
+ private writeMessage;
+ private getLineMap;
+ private lineOffsetToPosition;
+ private positionToOneBasedLineOffset;
+ private convertCodeEditsToTextChange;
+ private processRequest;
+ private processResponse;
+ openFile(file: string, fileContent?: string, scriptKindName?: "TS" | "JS" | "TSX" | "JSX"): void;
+ closeFile(file: string): void;
+ changeFile(fileName: string, start: number, end: number, insertString: string): void;
+ toLineColumnOffset(fileName: string, position: number): {
+ line: number;
+ character: number;
+ };
+ getQuickInfoAtPosition(fileName: string, position: number): QuickInfo;
+ getProjectInfo(file: string, needFileNameList: boolean): protocol.ProjectInfo;
+ getCompletionsAtPosition(fileName: string, position: number, _preferences: UserPreferences | undefined): CompletionInfo;
+ getCompletionEntryDetails(fileName: string, position: number, entryName: string, _options: FormatCodeOptions | FormatCodeSettings | undefined, source: string | undefined): CompletionEntryDetails;
+ getCompletionEntrySymbol(_fileName: string, _position: number, _entryName: string): Symbol;
+ getNavigateToItems(searchValue: string): NavigateToItem[];
+ getFormattingEditsForRange(file: string, start: number, end: number, _options: FormatCodeOptions): TextChange[];
+ getFormattingEditsForDocument(fileName: string, options: FormatCodeOptions): TextChange[];
+ getFormattingEditsAfterKeystroke(fileName: string, position: number, key: string, _options: FormatCodeOptions): TextChange[];
+ getDefinitionAtPosition(fileName: string, position: number): DefinitionInfo[];
+ getDefinitionAndBoundSpan(fileName: string, position: number): DefinitionInfoAndBoundSpan;
+ getTypeDefinitionAtPosition(fileName: string, position: number): DefinitionInfo[];
+ getImplementationAtPosition(fileName: string, position: number): ImplementationLocation[];
+ findReferences(_fileName: string, _position: number): ReferencedSymbol[];
+ getReferencesAtPosition(fileName: string, position: number): ReferenceEntry[];
+ getEmitOutput(_fileName: string): EmitOutput;
+ getSyntacticDiagnostics(file: string): DiagnosticWithLocation[];
+ getSemanticDiagnostics(file: string): Diagnostic[];
+ getSuggestionDiagnostics(file: string): DiagnosticWithLocation[];
+ private getDiagnostics;
+ getCompilerOptionsDiagnostics(): Diagnostic[];
+ getRenameInfo(fileName: string, position: number, findInStrings?: boolean, findInComments?: boolean): RenameInfo;
+ findRenameLocations(fileName: string, position: number, findInStrings: boolean, findInComments: boolean): RenameLocation[];
+ private decodeNavigationBarItems;
+ getNavigationBarItems(file: string): NavigationBarItem[];
+ private decodeNavigationTree;
+ getNavigationTree(file: string): NavigationTree;
+ private decodeSpan;
+ getNameOrDottedNameSpan(_fileName: string, _startPos: number, _endPos: number): TextSpan;
+ getBreakpointStatementAtPosition(_fileName: string, _position: number): TextSpan;
+ getSignatureHelpItems(fileName: string, position: number): SignatureHelpItems;
+ getOccurrencesAtPosition(fileName: string, position: number): ReferenceEntry[];
+ getDocumentHighlights(fileName: string, position: number, filesToSearch: string[]): DocumentHighlights[];
+ getOutliningSpans(file: string): OutliningSpan[];
+ getTodoComments(_fileName: string, _descriptors: TodoCommentDescriptor[]): TodoComment[];
+ getDocCommentTemplateAtPosition(_fileName: string, _position: number): TextInsertion;
+ isValidBraceCompletionAtPosition(_fileName: string, _position: number, _openingBrace: number): boolean;
+ getJsxClosingTagAtPosition(_fileName: string, _position: number): never;
+ getSpanOfEnclosingComment(_fileName: string, _position: number, _onlyMultiLine: boolean): TextSpan;
+ getCodeFixesAtPosition(file: string, start: number, end: number, errorCodes: ReadonlyArray): ReadonlyArray;
+ getCombinedCodeFix: typeof notImplemented;
+ applyCodeActionCommand: typeof notImplemented;
+ private createFileLocationOrRangeRequestArgs;
+ private createFileLocationRequestArgs;
+ private createFileRangeRequestArgs;
+ private createFileLocationRequestArgsWithEndLineAndOffset;
+ getApplicableRefactors(fileName: string, positionOrRange: number | TextRange): ApplicableRefactorInfo[];
+ getEditsForRefactor(fileName: string, _formatOptions: FormatCodeSettings, positionOrRange: number | TextRange, refactorName: string, actionName: string): RefactorEditInfo;
+ organizeImports(_scope: OrganizeImportsScope, _formatOptions: FormatCodeSettings): ReadonlyArray;
+ getEditsForFileRename(): never;
+ private convertCodeEditsToTextChanges;
+ private convertChanges;
+ convertTextChangeToCodeEdit(change: protocol.CodeEdit, fileName: string): TextChange;
+ getBraceMatchingAtPosition(fileName: string, position: number): TextSpan[];
+ getIndentationAtPosition(_fileName: string, _position: number, _options: EditorOptions): number;
+ getSyntacticClassifications(_fileName: string, _span: TextSpan): ClassifiedSpan[];
+ getSemanticClassifications(_fileName: string, _span: TextSpan): ClassifiedSpan[];
+ getEncodedSyntacticClassifications(_fileName: string, _span: TextSpan): Classifications;
+ getEncodedSemanticClassifications(_fileName: string, _span: TextSpan): Classifications;
+ getProgram(): Program;
+ getNonBoundSourceFile(_fileName: string): SourceFile;
+ getSourceFile(_fileName: string): SourceFile;
+ cleanupSemanticCache(): void;
+ dispose(): void;
+ }
+}
+declare type TestRunnerKind = CompilerTestKind | FourslashTestKind | "project" | "rwc" | "test262" | "user" | "dt";
+declare type CompilerTestKind = "conformance" | "compiler";
+declare type FourslashTestKind = "fourslash" | "fourslash-shims" | "fourslash-shims-pp" | "fourslash-server";
+declare abstract class RunnerBase {
+ tests: (string | Harness.FileBasedTest)[];
+ /** Add a source file to the runner's list of tests that need to be initialized with initializeTests */
+ addTest(fileName: string): void;
+ enumerateFiles(folder: string, regex?: RegExp, options?: {
+ recursive: boolean;
+ }): string[];
+ abstract kind(): TestRunnerKind;
+ abstract enumerateTestFiles(): (string | Harness.FileBasedTest)[];
+ /** The working directory where tests are found. Needed for batch testing where the input path will differ from the output path inside baselines */
+ workingDirectory: string;
+ /** Setup the runner's tests so that they are ready to be executed by the harness
+ * The first test should be a describe/it block that sets up the harness's compiler instance appropriately
+ */
+ abstract initializeTests(): void;
+ /** Replaces instances of full paths with fileNames only */
+ static removeFullPaths(path: string): string;
+}
+declare namespace Harness.SourceMapRecorder {
+ function getSourceMapRecord(sourceMapDataList: ReadonlyArray, program: ts.Program, jsFiles: ReadonlyArray, declarationFiles: ReadonlyArray): string;
+}
+declare var _chai: typeof chai;
+declare var assert: typeof _chai.assert;
+declare var global: NodeJS.Global;
+declare var window: {};
+declare var XMLHttpRequest: {
+ new (): XMLHttpRequest;
+};
+interface XMLHttpRequest {
+ readonly readyState: number;
+ readonly responseText: string;
+ readonly status: number;
+ readonly statusText: string;
+ open(method: string, url: string, async?: boolean, user?: string, password?: string): void;
+ send(data?: string): void;
+ setRequestHeader(header: string, value: string): void;
+ getAllResponseHeaders(): string;
+ getResponseHeader(header: string): string | null;
+ overrideMimeType(mime: string): void;
+}
+declare namespace Utils {
+ const enum ExecutionEnvironment {
+ Node = 0,
+ Browser = 1
+ }
+ function getExecutionEnvironment(): ExecutionEnvironment;
+ let currentExecutionEnvironment: ExecutionEnvironment;
+ function encodeString(s: string): string;
+ function byteLength(s: string, encoding?: string): number;
+ function evalFile(fileContents: string, fileName: string, nodeContext?: any): void;
+ /** Splits the given string on \r\n, or on only \n if that fails, or on only \r if *that* fails. */
+ function splitContentByNewlines(content: string): string[];
+ /** Reads a file under /tests */
+ function readTestFile(path: string): string | undefined;
+ function memoize(f: T, memoKey: (...anything: any[]) => string): T;
+ const canonicalizeForHarness: ts.GetCanonicalFileName;
+ function assertInvariants(node: ts.Node | undefined, parent: ts.Node | undefined): void;
+ function convertDiagnostics(diagnostics: ReadonlyArray): {
+ start: number | undefined;
+ length: number | undefined;
+ messageText: string;
+ category: string;
+ code: number;
+ }[];
+ function sourceFileToJSON(file: ts.Node): string;
+ function assertDiagnosticsEquals(array1: ReadonlyArray, array2: ReadonlyArray): void;
+ function assertStructuralEquals(node1: ts.Node, node2: ts.Node): void;
+ function filterStack(error: Error, stackTraceLimit?: number): Error;
+}
+declare namespace Harness {
+ interface IO {
+ newLine(): string;
+ getCurrentDirectory(): string;
+ useCaseSensitiveFileNames(): boolean;
+ resolvePath(path: string): string | undefined;
+ getFileSize(path: string): number;
+ readFile(path: string): string | undefined;
+ writeFile(path: string, contents: string): void;
+ directoryName(path: string): string | undefined;
+ getDirectories(path: string): string[];
+ createDirectory(path: string): void;
+ fileExists(fileName: string): boolean;
+ directoryExists(path: string): boolean;
+ deleteFile(fileName: string): void;
+ enumerateTestFiles(runner: RunnerBase): (string | FileBasedTest)[];
+ listFiles(path: string, filter?: RegExp, options?: {
+ recursive?: boolean;
+ }): string[];
+ log(text: string): void;
+ args(): string[];
+ getExecutingFilePath(): string;
+ getWorkspaceRoot(): string;
+ exit(exitCode?: number): void;
+ readDirectory(path: string, extension?: ReadonlyArray, exclude?: ReadonlyArray, include?: ReadonlyArray, depth?: number): string[];
+ getAccessibleFileSystemEntries(dirname: string): ts.FileSystemEntries;
+ tryEnableSourceMapsForHost?(): void;
+ getEnvironmentVariable?(name: string): string;
+ getMemoryUsage?(): number | undefined;
+ }
+ let IO: IO;
+ const harnessNewLine = "\r\n";
+ const virtualFileSystemRoot = "/";
+ function mockHash(s: string): string;
+}
+declare namespace Harness {
+ const libFolder = "built/local/";
+ const tcServicesFile: string;
+ type SourceMapEmitterCallback = (emittedFile: string, emittedLine: number, emittedColumn: number, sourceFile: string, sourceLine: number, sourceColumn: number, sourceName: string) => void;
+ let userSpecifiedRoot: string;
+ let lightMode: boolean;
+ /** Functionality for compiling TypeScript code */
+ namespace Compiler {
+ /** Aggregate various writes into a single array of lines. Useful for passing to the
+ * TypeScript compiler to fill with source code or errors.
+ */
+ class WriterAggregator {
+ lines: string[];
+ currentLine: string;
+ Write(str: string): void;
+ WriteLine(str: string): void;
+ Close(): void;
+ reset(): void;
+ }
+ function createSourceFileAndAssertInvariants(fileName: string, sourceText: string, languageVersion: ts.ScriptTarget): ts.SourceFile;
+ const defaultLibFileName = "lib.d.ts";
+ const es2015DefaultLibFileName = "lib.es2015.d.ts";
+ function getDefaultLibrarySourceFile(fileName?: string): ts.SourceFile | undefined;
+ function getDefaultLibFileName(options: ts.CompilerOptions): string;
+ const fourslashFileName = "fourslash.ts";
+ let fourslashSourceFile: ts.SourceFile;
+ function getCanonicalFileName(fileName: string): string;
+ interface HarnessOptions {
+ useCaseSensitiveFileNames?: boolean;
+ includeBuiltFile?: string;
+ baselineFile?: string;
+ libFiles?: string;
+ }
+ function setCompilerOptionsFromHarnessSetting(settings: TestCaseParser.CompilerSettings, options: ts.CompilerOptions & HarnessOptions): void;
+ interface TestFile {
+ unitName: string;
+ content: string;
+ fileOptions?: any;
+ }
+ function compileFiles(inputFiles: TestFile[], otherFiles: TestFile[], harnessSettings: TestCaseParser.CompilerSettings | undefined, compilerOptions: ts.CompilerOptions | undefined, currentDirectory: string | undefined): compiler.CompilationResult;
+ interface DeclarationCompilationContext {
+ declInputFiles: TestFile[];
+ declOtherFiles: TestFile[];
+ harnessSettings: TestCaseParser.CompilerSettings & HarnessOptions | undefined;
+ options: ts.CompilerOptions;
+ currentDirectory: string;
+ }
+ function prepareDeclarationCompilationContext(inputFiles: ReadonlyArray, otherFiles: ReadonlyArray, result: compiler.CompilationResult, harnessSettings: TestCaseParser.CompilerSettings & HarnessOptions, options: ts.CompilerOptions, currentDirectory: string | undefined): DeclarationCompilationContext | undefined;
+ function compileDeclarationFiles(context: DeclarationCompilationContext | undefined): {
+ declInputFiles: TestFile[];
+ declOtherFiles: TestFile[];
+ declResult: compiler.CompilationResult;
+ } | undefined;
+ function minimalDiagnosticsToString(diagnostics: ReadonlyArray, pretty?: boolean): string;
+ function getErrorBaseline(inputFiles: ReadonlyArray, diagnostics: ReadonlyArray, pretty?: boolean): string;
+ const diagnosticSummaryMarker = "__diagnosticSummary";
+ const globalErrorsMarker = "__globalErrors";
+ function iterateErrorBaseline(inputFiles: ReadonlyArray, diagnostics: ReadonlyArray, options?: {
+ pretty?: boolean;
+ caseSensitive?: boolean;
+ currentDirectory?: string;
+ }): IterableIterator<[string, string, number]>;
+ function doErrorBaseline(baselinePath: string, inputFiles: ReadonlyArray, errors: ReadonlyArray, pretty?: boolean): void;
+ function doTypeAndSymbolBaseline(baselinePath: string, program: ts.Program, allFiles: {
+ unitName: string;
+ content: string;
+ }[], opts?: Baseline.BaselineOptions, multifile?: boolean, skipTypeBaselines?: boolean, skipSymbolBaselines?: boolean): void;
+ function doSourcemapBaseline(baselinePath: string, options: ts.CompilerOptions, result: compiler.CompilationResult, harnessSettings: TestCaseParser.CompilerSettings): void;
+ function doJsEmitBaseline(baselinePath: string, header: string, options: ts.CompilerOptions, result: compiler.CompilationResult, tsConfigFiles: ReadonlyArray, toBeCompiled: ReadonlyArray, otherFiles: ReadonlyArray, harnessSettings: TestCaseParser.CompilerSettings): void;
+ function collateOutputs(outputFiles: ReadonlyArray): string;
+ function iterateOutputs(outputFiles: Iterable): IterableIterator<[string, string]>;
+ function sanitizeTestFilePath(name: string): string;
+ }
+ interface FileBasedTest {
+ file: string;
+ configurations?: FileBasedTestConfiguration[];
+ }
+ interface FileBasedTestConfiguration {
+ [key: string]: string;
+ }
+ /**
+ * Compute FileBasedTestConfiguration variations based on a supplied list of variable settings.
+ */
+ function getFileBasedTestConfigurations(settings: TestCaseParser.CompilerSettings, varyBy: string[]): FileBasedTestConfiguration[] | undefined;
+ /**
+ * Compute a description for this configuration based on its entries
+ */
+ function getFileBasedTestConfigurationDescription(configuration: FileBasedTestConfiguration): string;
+ namespace TestCaseParser {
+ /** all the necessary information to set the right compiler settings */
+ interface CompilerSettings {
+ [name: string]: string;
+ }
+ /** All the necessary information to turn a multi file test into useful units for later compilation */
+ interface TestUnitData {
+ content: string;
+ name: string;
+ fileOptions: any;
+ originalFilePath: string;
+ references: string[];
+ }
+ function extractCompilerSettings(content: string): CompilerSettings;
+ interface TestCaseContent {
+ settings: CompilerSettings;
+ testUnitData: TestUnitData[];
+ tsConfig: ts.ParsedCommandLine | undefined;
+ tsConfigFileUnitData: TestUnitData | undefined;
+ }
+ /** Given a test file containing // @FileName directives, return an array of named units of code to be added to an existing compiler instance */
+ function makeUnitsFromTest(code: string, fileName: string, rootDir?: string, settings?: CompilerSettings): TestCaseContent;
+ }
+ /** Support class for baseline files */
+ namespace Baseline {
+ interface BaselineOptions {
+ Subfolder?: string;
+ Baselinefolder?: string;
+ }
+ function localPath(fileName: string, baselineFolder?: string, subfolder?: string): string;
+ function runBaseline(relativeFileName: string, generateContent: () => string | null, opts?: BaselineOptions): void;
+ function runMultifileBaseline(relativeFileBase: string, extension: string, generateContent: () => IterableIterator<[string, string, number]> | IterableIterator<[string, string]> | null, opts?: BaselineOptions, referencedExtensions?: string[]): void;
+ }
+ function isDefaultLibraryFile(filePath: string): boolean;
+ function isBuiltFile(filePath: string): boolean;
+ function getDefaultLibraryFile(filePath: string, io: IO): Compiler.TestFile;
+ function getConfigNameFromFileName(filename: string): "tsconfig.json" | "jsconfig.json" | undefined;
+}
+declare namespace Harness.LanguageService {
+ class ScriptInfo {
+ fileName: string;
+ content: string;
+ isRootFile: boolean;
+ version: number;
+ editRanges: {
+ length: number;
+ textChangeRange: ts.TextChangeRange;
+ }[];
+ private lineMap;
+ constructor(fileName: string, content: string, isRootFile: boolean);
+ private setContent;
+ getLineMap(): number[];
+ updateContent(content: string): void;
+ editContent(start: number, end: number, newText: string): void;
+ getTextChangeRangeBetweenVersions(startVersion: number, endVersion: number): ts.TextChangeRange;
+ }
+ class DefaultHostCancellationToken implements ts.HostCancellationToken {
+ static readonly instance: DefaultHostCancellationToken;
+ isCancellationRequested(): boolean;
+ }
+ interface LanguageServiceAdapter {
+ getHost(): LanguageServiceAdapterHost;
+ getLanguageService(): ts.LanguageService;
+ getClassifier(): ts.Classifier;
+ getPreProcessedFileInfo(fileName: string, fileContents: string): ts.PreProcessedFileInfo;
+ }
+ abstract class LanguageServiceAdapterHost {
+ protected cancellationToken: DefaultHostCancellationToken;
+ protected settings: ts.CompilerOptions;
+ readonly sys: fakes.System;
+ typesRegistry: ts.Map | undefined;
+ private scriptInfos;
+ constructor(cancellationToken?: DefaultHostCancellationToken, settings?: ts.CompilerOptions);
+ readonly vfs: vfs.FileSystem;
+ getNewLine(): string;
+ getFilenames(): string[];
+ getScriptInfo(fileName: string): ScriptInfo | undefined;
+ addScript(fileName: string, content: string, isRootFile: boolean): void;
+ editScript(fileName: string, start: number, end: number, newText: string): void;
+ openFile(_fileName: string, _content?: string, _scriptKindName?: string): void;
+ /**
+ * @param line 0 based index
+ * @param col 0 based index
+ */
+ positionToLineAndCharacter(fileName: string, position: number): ts.LineAndCharacter;
+ }
+ class NativeLanguageServiceHost extends LanguageServiceAdapterHost implements ts.LanguageServiceHost, LanguageServiceAdapterHost {
+ isKnownTypesPackageName(name: string): boolean;
+ installPackage: typeof ts.notImplemented;
+ getCompilationSettings(): ts.CompilerOptions;
+ getCancellationToken(): DefaultHostCancellationToken;
+ getDirectories(path: string): string[];
+ getCurrentDirectory(): string;
+ getDefaultLibFileName(): string;
+ getScriptFileNames(): string[];
+ getScriptSnapshot(fileName: string): ts.IScriptSnapshot | undefined;
+ getScriptKind(): ts.ScriptKind;
+ getScriptVersion(fileName: string): string;
+ directoryExists(dirName: string): boolean;
+ fileExists(fileName: string): boolean;
+ readDirectory(path: string, extensions?: ReadonlyArray, exclude?: ReadonlyArray, include?: ReadonlyArray, depth?: number): string[];
+ readFile(path: string): string | undefined;
+ realpath(path: string): string;
+ getTypeRootsVersion(): number;
+ log: typeof ts.noop;
+ trace: typeof ts.noop;
+ error: typeof ts.noop;
+ }
+ class NativeLanguageServiceAdapter implements LanguageServiceAdapter {
+ private host;
+ constructor(cancellationToken?: ts.HostCancellationToken, options?: ts.CompilerOptions);
+ getHost(): LanguageServiceAdapterHost;
+ getLanguageService(): ts.LanguageService;
+ getClassifier(): ts.Classifier;
+ getPreProcessedFileInfo(fileName: string, fileContents: string): ts.PreProcessedFileInfo;
+ }
+ class ShimLanguageServiceHost extends LanguageServiceAdapterHost implements ts.LanguageServiceShimHost, ts.CoreServicesShimHost {
+ private nativeHost;
+ getModuleResolutionsForFile: (fileName: string) => string;
+ getTypeReferenceDirectiveResolutionsForFile: (fileName: string) => string;
+ constructor(preprocessToResolve: boolean, cancellationToken?: ts.HostCancellationToken, options?: ts.CompilerOptions);
+ getFilenames(): string[];
+ getScriptInfo(fileName: string): ScriptInfo | undefined;
+ addScript(fileName: string, content: string, isRootFile: boolean): void;
+ editScript(fileName: string, start: number, end: number, newText: string): void;
+ positionToLineAndCharacter(fileName: string, position: number): ts.LineAndCharacter;
+ getCompilationSettings(): string;
+ getCancellationToken(): ts.HostCancellationToken;
+ getCurrentDirectory(): string;
+ getDirectories(path: string): string;
+ getDefaultLibFileName(): string;
+ getScriptFileNames(): string;
+ getScriptSnapshot(fileName: string): ts.ScriptSnapshotShim;
+ getScriptKind(): ts.ScriptKind;
+ getScriptVersion(fileName: string): string;
+ getLocalizedDiagnosticMessages(): string;
+ readDirectory: typeof ts.notImplemented;
+ readDirectoryNames: typeof ts.notImplemented;
+ readFileNames: typeof ts.notImplemented;
+ fileExists(fileName: string): boolean;
+ readFile(fileName: string): string | undefined;
+ log(s: string): void;
+ trace(s: string): void;
+ error(s: string): void;
+ directoryExists(): boolean;
+ }
+ class ShimLanguageServiceAdapter implements LanguageServiceAdapter {
+ private host;
+ private factory;
+ constructor(preprocessToResolve: boolean, cancellationToken?: ts.HostCancellationToken, options?: ts.CompilerOptions);
+ getHost(): ShimLanguageServiceHost;
+ getLanguageService(): ts.LanguageService;
+ getClassifier(): ts.Classifier;
+ getPreProcessedFileInfo(fileName: string, fileContents: string): ts.PreProcessedFileInfo;
+ }
+ class SessionClientHost extends NativeLanguageServiceHost implements ts.server.SessionClientHost {
+ private client;
+ constructor(cancellationToken: ts.HostCancellationToken | undefined, settings: ts.CompilerOptions | undefined);
+ onMessage: typeof ts.noop;
+ writeMessage: typeof ts.noop;
+ setClient(client: ts.server.SessionClient): void;
+ openFile(fileName: string, content?: string, scriptKindName?: "TS" | "JS" | "TSX" | "JSX"): void;
+ editScript(fileName: string, start: number, end: number, newText: string): void;
+ }
+ class ServerLanguageServiceAdapter implements LanguageServiceAdapter {
+ private host;
+ private client;
+ constructor(cancellationToken?: ts.HostCancellationToken, options?: ts.CompilerOptions);
+ getHost(): SessionClientHost;
+ getLanguageService(): ts.LanguageService;
+ getClassifier(): ts.Classifier;
+ getPreProcessedFileInfo(): ts.PreProcessedFileInfo;
+ }
+}
+declare namespace ts.TestFSWithWatch {
+ const libFile: File;
+ const safeList: {
+ path: Path;
+ content: string;
+ };
+ interface TestServerHostCreationParameters {
+ useCaseSensitiveFileNames?: boolean;
+ executingFilePath?: string;
+ currentDirectory?: string;
+ newLine?: string;
+ useWindowsStylePaths?: boolean;
+ environmentVariables?: Map;
+ }
+ function createWatchedSystem(fileOrFolderList: ReadonlyArray, params?: TestServerHostCreationParameters): TestServerHost;
+ function createServerHost(fileOrFolderList: ReadonlyArray, params?: TestServerHostCreationParameters): TestServerHost;
+ interface File {
+ path: string;
+ content: string;
+ fileSize?: number;
+ }
+ interface Folder {
+ path: string;
+ }
+ interface SymLink {
+ path: string;
+ symLink: string;
+ }
+ type FileOrFolderOrSymLink = File | Folder | SymLink;
+ function verifyMapSize(caption: string, map: Map, expectedKeys: ReadonlyArray): void;
+ function checkMultiMapKeyCount(caption: string, actual: MultiMap, expectedKeys: ReadonlyMap): void;
+ function checkMultiMapKeyCount(caption: string, actual: MultiMap, expectedKeys: ReadonlyArray, eachKeyCount: number): void;
+ function checkArray(caption: string, actual: ReadonlyArray, expected: ReadonlyArray): void;
+ function checkWatchedFiles(host: TestServerHost, expectedFiles: string[]): void;
+ function checkWatchedFilesDetailed(host: TestServerHost, expectedFiles: ReadonlyMap): void;
+ function checkWatchedFilesDetailed(host: TestServerHost, expectedFiles: ReadonlyArray, eachFileWatchCount: number): void;
+ function checkWatchedDirectories(host: TestServerHost, expectedDirectories: string[], recursive: boolean): void;
+ function checkWatchedDirectoriesDetailed(host: TestServerHost, expectedDirectories: ReadonlyMap, recursive: boolean): void;
+ function checkWatchedDirectoriesDetailed(host: TestServerHost, expectedDirectories: ReadonlyArray, eachDirectoryWatchCount: number, recursive: boolean): void;
+ function checkOutputContains(host: TestServerHost, expected: ReadonlyArray): void;
+ function checkOutputDoesNotContain(host: TestServerHost, expectedToBeAbsent: string[] | ReadonlyArray): void;
+ type TimeOutCallback = () => any;
+ interface TestFileWatcher {
+ cb: FileWatcherCallback;
+ fileName: string;
+ }
+ interface TestDirectoryWatcher {
+ cb: DirectoryWatcherCallback;
+ directoryName: string;
+ }
+ interface ReloadWatchInvokeOptions {
+ /** Invokes the directory watcher for the parent instead of the file changed */
+ invokeDirectoryWatcherInsteadOfFileChanged: boolean;
+ /** When new file is created, do not invoke watches for it */
+ ignoreWatchInvokedWithTriggerAsFileCreate: boolean;
+ /** Invoke the file delete, followed by create instead of file changed */
+ invokeFileDeleteCreateAsPartInsteadOfChange: boolean;
+ }
+ enum Tsc_WatchDirectory {
+ WatchFile = "RecursiveDirectoryUsingFsWatchFile",
+ NonRecursiveWatchDirectory = "RecursiveDirectoryUsingNonRecursiveWatchDirectory",
+ DynamicPolling = "RecursiveDirectoryUsingDynamicPriorityPolling"
+ }
+ class TestServerHost implements server.ServerHost, FormatDiagnosticsHost, ModuleResolutionHost {
+ withSafeList: boolean;
+ useCaseSensitiveFileNames: boolean;
+ readonly newLine: string;
+ readonly useWindowsStylePath?: boolean | undefined;
+ private readonly environmentVariables?;
+ args: string[];
+ private readonly output;
+ private fs;
+ private time;
+ getCanonicalFileName: (s: string) => string;
+ private toPath;
+ private timeoutCallbacks;
+ private immediateCallbacks;
+ readonly screenClears: number[];
+ readonly watchedDirectories: MultiMap;
+ readonly watchedDirectoriesRecursive: MultiMap;
+ readonly watchedFiles: MultiMap;
+ private readonly executingFilePath;
+ private readonly currentDirectory;
+ private readonly dynamicPriorityWatchFile;
+ private readonly customRecursiveWatchDirectory;
+ constructor(withSafeList: boolean, useCaseSensitiveFileNames: boolean, executingFilePath: string, currentDirectory: string, fileOrFolderorSymLinkList: ReadonlyArray, newLine?: string, useWindowsStylePath?: boolean | undefined, environmentVariables?: Map | undefined);
+ getNewLine(): string;
+ toNormalizedAbsolutePath(s: string): string;
+ toFullPath(s: string): Path;
+ getHostSpecificPath(s: string): string;
+ private now;
+ reloadFS(fileOrFolderOrSymLinkList: ReadonlyArray, options?: Partial): void;
+ modifyFile(filePath: string, content: string, options?: Partial): void;
+ renameFolder(folderName: string, newFolderName: string): void;
+ private renameFolderEntries;
+ ensureFileOrFolder(fileOrDirectoryOrSymLink: FileOrFolderOrSymLink, ignoreWatchInvokedWithTriggerAsFileCreate?: boolean): void;
+ private ensureFolder;
+ private addFileOrFolderInFolder;
+ private removeFileOrFolder;
+ removeFolder(folderPath: string, recursive?: boolean): void;
+ invokeWatchedDirectoriesCallback(folderFullPath: string, relativePath: string): void;
+ invokeWatchedDirectoriesRecursiveCallback(folderFullPath: string, relativePath: string): void;
+ invokeFileWatcher(fileFullPath: string, eventKind: FileWatcherEventKind, useFileNameInCallback?: boolean): void;
+ private getRelativePathToDirectory;
+ /**
+ * This will call the directory watcher for the folderFullPath and recursive directory watchers for this and base folders
+ */
+ private invokeDirectoryWatcher;
+ private directoryCallback;
+ /**
+ * This will call the recursive directory watcher for this directory as well as all the base directories
+ */
+ private invokeRecursiveDirectoryWatcher;
+ private toFsEntry;
+ private toFsFile;
+ private toFsSymLink;
+ private toFsFolder;
+ private getRealFsEntry;
+ private isFsFile;
+ private getRealFile;
+ private isFsFolder;
+ private getRealFolder;
+ fileExists(s: string): boolean;
+ getModifiedTime(s: string): Date;
+ readFile(s: string): string | undefined;
+ getFileSize(s: string): number;
+ directoryExists(s: string): boolean;
+ getDirectories(s: string): string[];
+ readDirectory(path: string, extensions?: ReadonlyArray, exclude?: ReadonlyArray, include?: ReadonlyArray, depth?: number): string[];
+ watchDirectory(directoryName: string, cb: DirectoryWatcherCallback, recursive: boolean): FileWatcher;
+ createHash(s: string): string;
+ createSHA256Hash(s: string): string;
+ watchFile(fileName: string, cb: FileWatcherCallback, pollingInterval: number): FileWatcher;
+ setTimeout(callback: TimeOutCallback, _time: number, ...args: any[]): number;
+ getNextTimeoutId(): number;
+ clearTimeout(timeoutId: any): void;
+ clearScreen(): void;
+ checkTimeoutQueueLengthAndRun(expected: number): void;
+ checkTimeoutQueueLength(expected: number): void;
+ runQueuedTimeoutCallbacks(timeoutId?: number): void;
+ runQueuedImmediateCallbacks(checkCount?: number): void;
+ setImmediate(callback: TimeOutCallback, _time: number, ...args: any[]): number;
+ clearImmediate(timeoutId: any): void;
+ createDirectory(directoryName: string): void;
+ writeFile(path: string, content: string): void;
+ write(message: string): void;
+ getOutput(): ReadonlyArray;
+ clearOutput(): void;
+ realpath(s: string): string;
+ readonly exitMessage: string;
+ exitCode: number | undefined;
+ readonly resolvePath: (s: string) => string;
+ readonly getExecutingFilePath: () => string;
+ readonly getCurrentDirectory: () => string;
+ exit(exitCode?: number): void;
+ getEnvironmentVariable(name: string): string;
+ }
+}
+declare namespace FourSlash {
+ import ArrayOrSingle = FourSlashInterface.ArrayOrSingle;
+ const enum FourSlashTestType {
+ Native = 0,
+ Shims = 1,
+ ShimsWithPreprocess = 2,
+ Server = 3
+ }
+ interface FourSlashFile {
+ content: string;
+ fileName: string;
+ symlinks?: string[];
+ version: number;
+ fileOptions: Harness.TestCaseParser.CompilerSettings;
+ }
+ interface FourSlashData {
+ globalOptions: Harness.TestCaseParser.CompilerSettings;
+ files: FourSlashFile[];
+ markerPositions: ts.Map;
+ markers: Marker[];
+ /**
+ * Inserted in source files by surrounding desired text
+ * in a range with `[|` and `|]`. For example,
+ *
+ * [|text in range|]
+ *
+ * is a range with `text in range` "selected".
+ */
+ ranges: Range[];
+ }
+ interface Marker {
+ fileName: string;
+ position: number;
+ data?: {};
+ }
+ interface Range {
+ fileName: string;
+ pos: number;
+ end: number;
+ marker?: Marker;
+ }
+ interface TextSpan {
+ start: number;
+ end: number;
+ }
+ class TestCancellationToken implements ts.HostCancellationToken {
+ private static readonly notCanceled;
+ private numberOfCallsBeforeCancellation;
+ isCancellationRequested(): boolean;
+ setCancelled(numberOfCalls?: number): void;
+ resetCancelled(): void;
+ }
+ function verifyOperationIsCancelled(f: () => void): void;
+ class TestState {
+ private basePath;
+ private testType;
+ testData: FourSlashData;
+ private languageServiceAdapterHost;
+ private languageService;
+ private cancellationToken;
+ currentCaretPosition: number;
+ selectionEnd: number;
+ lastKnownMarker: string;
+ activeFile: FourSlashFile;
+ enableFormatting: boolean;
+ formatCodeSettings: ts.FormatCodeSettings;
+ private inputFiles;
+ private static getDisplayPartsJson;
+ private addMatchedInputFile;
+ private getLanguageServiceAdapter;
+ constructor(basePath: string, testType: FourSlashTestType, testData: FourSlashData);
+ private getFileContent;
+ goToMarker(name?: string | Marker): void;
+ goToEachMarker(markers: ReadonlyArray, action: (marker: Marker, index: number) => void): void;
+ goToEachRange(action: () => void): void;
+ markerName(m: Marker): string;
+ goToPosition(pos: number): void;
+ select(startMarker: string, endMarker: string): void;
+ selectRange(range: Range): void;
+ moveCaretRight(count?: number): void;
+ openFile(indexOrName: number | string, content?: string, scriptKindName?: string): void;
+ verifyErrorExistsBetweenMarkers(startMarkerName: string, endMarkerName: string, shouldExist: boolean): void;
+ private raiseError;
+ private messageAtLastKnownMarker;
+ private assertionMessageAtLastKnownMarker;
+ private getDiagnostics;
+ private getAllDiagnostics;
+ verifyErrorExistsAfterMarker(markerName: string, shouldExist: boolean, after: boolean): void;
+ private anyErrorInRange;
+ private printErrorLog;
+ private formatRange;
+ private formatLineAndCharacterOfPosition;
+ private formatPosition;
+ verifyNoErrors(): void;
+ verifyNumberOfErrorsInCurrentFile(expected: number): void;
+ verifyEval(expr: string, value: any): void;
+ verifyGoToDefinitionIs(endMarker: ArrayOrSingle): void;
+ verifyGoToDefinition(arg0: any, endMarkerNames?: ArrayOrSingle): void;
+ private getGoToDefinition;
+ private getGoToDefinitionAndBoundSpan;
+ verifyGoToType(arg0: any, endMarkerNames?: ArrayOrSingle): void;
+ private verifyGoToX;
+ private verifyGoToXPlain;
+ verifyGoToDefinitionForMarkers(markerNames: string[]): void;
+ private verifyGoToXSingle;
+ private verifyGoToXWorker;
+ private verifyDefinitionTextSpan;
+ verifyGetEmitOutputForCurrentFile(expected: string): void;
+ verifyGetEmitOutputContentsForCurrentFile(expected: ts.OutputFile[]): void;
+ verifyCompletionListCount(expectedCount: number, negative: boolean): void;
+ verifyCompletionListItemsCountIsGreaterThan(count: number, negative: boolean): void;
+ verifyCompletionListStartsWithItemsInOrder(items: string[]): void;
+ noItemsWithSameNameButDifferentKind(): void;
+ verifyCompletionListIsEmpty(negative: boolean): void;
+ verifyCompletionListAllowsNewIdentifier(negative: boolean): void;
+ verifyCompletionListIsGlobal(expected: boolean): void;
+ verifyCompletions(options: FourSlashInterface.VerifyCompletionsOptions): void;
+ private verifyCompletionsWorker;
+ private verifyCompletionEntry;
+ private verifyCompletionsAreExactly;
+ verifyCompletionsAt(markerName: string | ReadonlyArray, expected: ReadonlyArray, options?: FourSlashInterface.CompletionsAtOptions): void;
+ verifyCompletionListContains(entryId: ts.Completions.CompletionEntryIdentifier, text?: string, documentation?: string, kind?: string | {
+ kind?: string;
+ kindModifiers?: string;
+ }, spanIndex?: number, hasAction?: boolean, options?: FourSlashInterface.VerifyCompletionListContainsOptions): void;
+ /**
+ * Verify that the completion list does NOT contain the given symbol.
+ * The symbol is considered matched with the symbol in the list if and only if all given parameters must matched.
+ * When any parameter is omitted, the parameter is ignored during comparison and assumed that the parameter with
+ * that property of the symbol in the list.
+ * @param symbol the name of symbol
+ * @param expectedText the text associated with the symbol
+ * @param expectedDocumentation the documentation text associated with the symbol
+ * @param expectedKind the kind of symbol (see ScriptElementKind)
+ * @param spanIndex the index of the range that the completion item's replacement text span should match
+ */
+ verifyCompletionListDoesNotContain(entryId: ts.Completions.CompletionEntryIdentifier, expectedText?: string, expectedDocumentation?: string, expectedKind?: string | {
+ kind?: string;
+ kindModifiers?: string;
+ }, spanIndex?: number, options?: FourSlashInterface.CompletionsAtOptions): void;
+ verifyCompletionEntryDetails(entryName: string, expectedText: string, expectedDocumentation?: string, kind?: string, tags?: ts.JSDocTagInfo[]): void;
+ /** Use `getProgram` instead of accessing this directly. */
+ private _program;
+ /** Use `getChecker` instead of accessing this directly. */
+ private _checker;
+ private getProgram;
+ private getChecker;
+ private getSourceFile;
+ private getNode;
+ private goToAndGetNode;
+ private verifyRange;
+ private verifySymbol;
+ verifySymbolAtLocation(startRange: Range, declarationRanges: Range[]): void;
+ symbolsInScope(range: Range): ts.Symbol[];
+ setTypesRegistry(map: ts.MapLike): void;
+ verifyTypeOfSymbolAtLocation(range: Range, symbol: ts.Symbol, expected: string): void;
+ private verifyDocumentHighlightsRespectFilesList;
+ verifyReferenceGroups(starts: ArrayOrSingle | ArrayOrSingle, parts: ReadonlyArray): void;
+ verifyNoReferences(markerNameOrRange?: string | Range): void;
+ verifyGetReferencesForServerTest(expected: ReadonlyArray): void;
+ verifySingleReferenceGroup(definition: FourSlashInterface.ReferenceGroupDefinition, ranges?: Range[]): void;
+ private assertObjectsEqual;
+ verifyDisplayPartsOfReferencedSymbol(expected: ts.SymbolDisplayPart[]): void;
+ private getCompletionListAtCaret;
+ private getCompletionEntryDetails;
+ private getReferencesAtCaret;
+ private findReferencesAtCaret;
+ getSyntacticDiagnostics(expected: ReadonlyArray): void;
+ getSemanticDiagnostics(expected: ReadonlyArray): void;
+ getSuggestionDiagnostics(expected: ReadonlyArray): void;
+ private testDiagnostics;
+ verifyQuickInfoAt(markerName: string, expectedText: string, expectedDocumentation?: string): void;
+ verifyQuickInfos(namesAndTexts: {
+ [name: string]: string | [string, string];
+ }): void;
+ verifyQuickInfoString(expectedText: string, expectedDocumentation?: string): void;
+ verifyQuickInfoDisplayParts(kind: string, kindModifiers: string, textSpan: TextSpan, displayParts: ts.SymbolDisplayPart[], documentation: ts.SymbolDisplayPart[], tags: ts.JSDocTagInfo[]): void;
+ verifyRangesAreRenameLocations(options?: Range[] | {
+ findInStrings?: boolean;
+ findInComments?: boolean;
+ ranges?: Range[];
+ }): void;
+ verifyRenameLocations(startRanges: ArrayOrSingle, options: Range[] | {
+ findInStrings?: boolean;
+ findInComments?: boolean;
+ ranges: Range[];
+ }): void;
+ verifyQuickInfoExists(negative: boolean): void;
+ verifyNoSignatureHelp(markers: ReadonlyArray): void;
+ verifySignatureHelp(optionses: ReadonlyArray): void;
+ private verifySignatureHelpWorker;
+ private validate;
+ verifyRenameInfoSucceeded(displayName?: string, fullDisplayName?: string, kind?: string, kindModifiers?: string): void;
+ verifyRenameInfoFailed(message?: string): void;
+ private alignmentForExtraInfo;
+ private spanInfoToString;
+ private baselineCurrentFileLocations;
+ getBreakpointStatementLocation(pos: number): ts.TextSpan | undefined;
+ baselineCurrentFileBreakpointLocations(): void;
+ baselineGetEmitOutput(insertResultsIntoVfs?: boolean): void;
+ baselineQuickInfo(): void;
+ printBreakpointLocation(pos: number): void;
+ printBreakpointAtCurrentLocation(): void;
+ printCurrentParameterHelp(): void;
+ printCurrentQuickInfo(): void;
+ printErrorList(): void;
+ printCurrentFileState(showWhitespace: boolean, makeCaretVisible: boolean): void;
+ printCurrentSignatureHelp(): void;
+ private getSignatureHelp;
+ printCompletionListMembers(preferences: ts.UserPreferences | undefined): void;
+ private printMembersOrCompletions;
+ printContext(): void;
+ deleteChar(count?: number): void;
+ replace(start: number, length: number, text: string): void;
+ deleteCharBehindMarker(count?: number): void;
+ type(text: string, highFidelity?: boolean): void;
+ paste(text: string): void;
+ private checkPostEditInvariants;
+ /**
+ * @returns The number of characters added to the file as a result of the edits.
+ * May be negative.
+ */
+ private applyEdits;
+ copyFormatOptions(): ts.FormatCodeSettings;
+ setFormatOptions(formatCodeOptions: ts.FormatCodeOptions | ts.FormatCodeSettings): ts.FormatCodeSettings;
+ formatDocument(): void;
+ formatSelection(start: number, end: number): void;
+ formatOnType(pos: number, key: string): void;
+ private editScriptAndUpdateMarkers;
+ private removeWhitespace;
+ goToBOF(): void;
+ goToEOF(): void;
+ goToRangeStart({ fileName, pos }: Range): void;
+ goToTypeDefinition(definitionIndex: number): void;
+ verifyTypeDefinitionsCount(negative: boolean, expectedCount: number): void;
+ verifyImplementationListIsEmpty(negative: boolean): void;
+ verifyGoToDefinitionName(expectedName: string, expectedContainerName: string): void;
+ goToImplementation(): void;
+ verifyRangesInImplementationList(markerName: string): void;
+ getMarkers(): Marker[];
+ getMarkerNames(): string[];
+ getRanges(): Range[];
+ rangesByText(): ts.Map;
+ private rangeText;
+ verifyCaretAtMarker(markerName?: string): void;
+ private getIndentation;
+ verifyIndentationAtCurrentPosition(numberOfSpaces: number, indentStyle?: ts.IndentStyle, baseIndentSize?: number): void;
+ verifyIndentationAtPosition(fileName: string, position: number, numberOfSpaces: number, indentStyle?: ts.IndentStyle, baseIndentSize?: number): void;
+ verifyCurrentLineContent(text: string): void;
+ verifyCurrentFileContent(text: string): void;
+ private verifyFileContent;
+ verifyTextAtCaretIs(text: string): void;
+ verifyCurrentNameOrDottedNameSpanText(text: string): undefined;
+ private getNameOrDottedNameSpan;
+ baselineCurrentFileNameOrDottedNameSpans(): void;
+ printNameOrDottedNameSpans(pos: number): void;
+ private verifyClassifications;
+ verifyProjectInfo(expected: string[]): void;
+ verifySemanticClassifications(expected: {
+ classificationType: string;
+ text: string;
+ }[]): void;
+ verifySyntacticClassifications(expected: {
+ classificationType: string;
+ text: string;
+ }[]): void;
+ printOutliningSpans(): void;
+ verifyOutliningSpans(spans: Range[], kind?: "comment" | "region" | "code" | "imports"): void;
+ verifyTodoComments(descriptors: string[], spans: Range[]): void;
+ /**
+ * Finds and applies a code action corresponding to the supplied parameters.
+ * If index is undefined, applies the unique code action available.
+ * @param errorCode The error code that generated the code action.
+ * @param index The nth (0-index-based) codeaction available generated by errorCode.
+ */
+ getAndApplyCodeActions(errorCode?: number, index?: number): void;
+ applyCodeActionFromCompletion(markerName: string, options: FourSlashInterface.VerifyCompletionActionOptions): void;
+ verifyRangeIs(expectedText: string, includeWhiteSpace?: boolean): void;
+ /**
+ * Compares expected text to the text that would be in the sole range
+ * (ie: [|...|]) in the file after applying the codefix sole codefix
+ * in the source file.
+ */
+ verifyRangeAfterCodeFix(expectedText: string, includeWhiteSpace?: boolean, errorCode?: number, index?: number): void;
+ verifyCodeFixAll({ fixId, fixAllDescription, newFileContent, commands: expectedCommands }: FourSlashInterface.VerifyCodeFixAllOptions): void;
+ /**
+ * Applies fixes for the errors in fileName and compares the results to
+ * expectedContents after all fixes have been applied.
+ *
+ * Note: applying one codefix may generate another (eg: remove duplicate implements
+ * may generate an extends -> interface conversion fix).
+ * @param expectedContents The contents of the file after the fixes are applied.
+ * @param fileName The file to check. If not supplied, the current open file is used.
+ */
+ verifyFileAfterCodeFix(expectedContents: string, fileName?: string): void;
+ verifyCodeFix(options: FourSlashInterface.VerifyCodeFixOptions): void;
+ private verifyNewContent;
+ /**
+ * Rerieves a codefix satisfying the parameters, or undefined if no such codefix is found.
+ * @param fileName Path to file where error should be retrieved from.
+ */
+ private getCodeFixes;
+ private applyCodeActions;
+ private applyChanges;
+ verifyImportFixAtPosition(expectedTextArray: string[], errorCode: number | undefined, preferences: ts.UserPreferences | undefined): void;
+ verifyDocCommentTemplate(expected: ts.TextInsertion | undefined): void;
+ verifyBraceCompletionAtPosition(negative: boolean, openingBrace: string): void;
+ verifyJsxClosingTag(map: {
+ [markerName: string]: ts.JsxClosingTagInfo | undefined;
+ }): void;
+ verifyMatchingBracePosition(bracePosition: number, expectedMatchPosition: number): void;
+ verifyNoMatchingBracePosition(bracePosition: number): void;
+ verifySpanOfEnclosingComment(negative: boolean, onlyMultiLineDiverges?: boolean): void;
+ verifyNavigationItemsCount(expected: number, searchValue: string, matchKind?: string, fileName?: string): void;
+ verifyNavigationItemsListContains(name: string, kind: string, searchValue: string, matchKind: string, fileName?: string, parentName?: string): void;
+ verifyNavigationBar(json: any, options: {
+ checkSpans?: boolean;
+ } | undefined): void;
+ verifyNavigationTree(json: any, options: {
+ checkSpans?: boolean;
+ } | undefined): void;
+ private verifyNavigationTreeOrBar;
+ printNavigationItems(searchValue: string): void;
+ printNavigationBar(): void;
+ private getOccurrencesAtCurrentPosition;
+ verifyOccurrencesAtPositionListContains(fileName: string, start: number, end: number, isWriteAccess?: boolean): undefined;
+ verifyOccurrencesAtPositionListCount(expectedCount: number): void;
+ private getDocumentHighlightsAtCurrentPosition;
+ verifyRangesAreOccurrences(isWriteAccess?: boolean): void;
+ verifyRangesWithSameTextAreRenameLocations(): void;
+ verifyRangesWithSameTextAreDocumentHighlights(): void;
+ verifyDocumentHighlightsOf(startRange: Range, ranges: Range[], options: FourSlashInterface.VerifyDocumentHighlightsOptions | undefined): void;
+ verifyRangesAreDocumentHighlights(ranges: Range[] | undefined, options: FourSlashInterface.VerifyDocumentHighlightsOptions | undefined): void;
+ verifyNoDocumentHighlights(startRange: Range): void;
+ private verifyDocumentHighlights;
+ verifyCodeFixAvailable(negative: boolean, expected: FourSlashInterface.VerifyCodeFixAvailableOptions[] | undefined): void;
+ verifyApplicableRefactorAvailableAtMarker(negative: boolean, markerName: string): void;
+ private getSelection;
+ verifyRefactorAvailable(negative: boolean, name: string, actionName?: string): void;
+ verifyRefactor({ name, actionName, refactors }: FourSlashInterface.VerifyRefactorOptions): void;
+ verifyApplicableRefactorAvailableForRange(negative: boolean): void;
+ applyRefactor({ refactorName, actionName, actionDescription, newContent: newContentWithRenameMarker }: FourSlashInterface.ApplyRefactorOptions): void;
+ noMoveToNewFile(): void;
+ moveToNewFile(options: FourSlashInterface.MoveToNewFileOptions): void;
+ private testNewFileContents;
+ verifyFileAfterApplyingRefactorAtMarker(markerName: string, expectedContent: string, refactorNameToApply: string, actionName: string, formattingOptions?: ts.FormatCodeSettings): void;
+ printAvailableCodeFixes(): void;
+ private getCurrentLineContent;
+ private assertItemInCompletionList;
+ private findFile;
+ private getLineColStringAtPosition;
+ private getTextSpanForRangeAtIndex;
+ getMarkerByName(markerName: string): Marker;
+ setCancelled(numberOfCalls: number): void;
+ resetCancelled(): void;
+ private static textSpansEqual;
+ getEditsForFileRename(options: FourSlashInterface.GetEditsForFileRenameOptions): void;
+ private getApplicableRefactors;
+ }
+ function runFourSlashTest(basePath: string, testType: FourSlashTestType, fileName: string): void;
+ function runFourSlashTestContent(basePath: string, testType: FourSlashTestType, content: string, fileName: string): void;
+}
+declare namespace FourSlashInterface {
+ class Test {
+ private state;
+ constructor(state: FourSlash.TestState);
+ markers(): FourSlash.Marker[];
+ markerNames(): string[];
+ marker(name: string): FourSlash.Marker;
+ markerName(m: FourSlash.Marker): string;
+ ranges(): FourSlash.Range[];
+ spans(): ts.TextSpan[];
+ rangesByText(): ts.Map;
+ markerByName(s: string): FourSlash.Marker;
+ symbolsInScope(range: FourSlash.Range): ts.Symbol[];
+ setTypesRegistry(map: ts.MapLike): void;
+ }
+ class GoTo {
+ private state;
+ constructor(state: FourSlash.TestState);
+ marker(name?: string | FourSlash.Marker): void;
+ eachMarker(markers: ReadonlyArray, action: (marker: FourSlash.Marker, index: number) => void): void;
+ eachMarker(action: (marker: FourSlash.Marker, index: number) => void): void;
+ rangeStart(range: FourSlash.Range): void;
+ eachRange(action: () => void): void;
+ bof(): void;
+ eof(): void;
+ implementation(): void;
+ position(position: number, fileNameOrIndex?: string | number): void;
+ file(indexOrName: number | string, content?: string, scriptKindName?: string): void;
+ select(startMarker: string, endMarker: string): void;
+ selectRange(range: FourSlash.Range): void;
+ }
+ class VerifyNegatable {
+ protected state: FourSlash.TestState;
+ private negative;
+ not: VerifyNegatable;
+ allowedClassElementKeywords: string[];
+ allowedConstructorParameterKeywords: string[];
+ constructor(state: FourSlash.TestState, negative?: boolean);
+ completionListCount(expectedCount: number): void;
+ completionListContains(entryId: string | ts.Completions.CompletionEntryIdentifier, text?: string, documentation?: string, kind?: string | {
+ kind?: string;
+ kindModifiers?: string;
+ }, spanIndex?: number, hasAction?: boolean, options?: VerifyCompletionListContainsOptions): void;
+ completionListItemsCountIsGreaterThan(count: number): void;
+ assertHasRanges(ranges: FourSlash.Range[]): void;
+ completionListIsEmpty(): void;
+ completionListContainsClassElementKeywords(): void;
+ completionListContainsConstructorParameterKeywords(): void;
+ completionListIsGlobal(expected: boolean): void;
+ completionListAllowsNewIdentifier(): void;
+ noSignatureHelp(...markers: string[]): void;
+ signatureHelp(...options: VerifySignatureHelpOptions[]): void;
+ errorExistsBetweenMarkers(startMarker: string, endMarker: string): void;
+ errorExistsAfterMarker(markerName?: string): void;
+ errorExistsBeforeMarker(markerName?: string): void;
+ quickInfoExists(): void;
+ typeDefinitionCountIs(expectedCount: number): void;
+ implementationListIsEmpty(): void;
+ isValidBraceCompletionAtPosition(openingBrace: string): void;
+ jsxClosingTag(map: {
+ [markerName: string]: ts.JsxClosingTagInfo | undefined;
+ }): void;
+ isInCommentAtPosition(onlyMultiLineDiverges?: boolean): void;
+ codeFix(options: VerifyCodeFixOptions): void;
+ codeFixAvailable(options?: VerifyCodeFixAvailableOptions[]): void;
+ applicableRefactorAvailableAtMarker(markerName: string): void;
+ applicableRefactorAvailableForRange(): void;
+ refactor(options: VerifyRefactorOptions): void;
+ refactorAvailable(name: string, actionName?: string): void;
+ }
+ class Verify extends VerifyNegatable {
+ constructor(state: FourSlash.TestState);
+ completionsAt(markerName: ArrayOrSingle, completions: ReadonlyArray, options?: CompletionsAtOptions): void;
+ completions(...optionsArray: VerifyCompletionsOptions[]): void;
+ quickInfoIs(expectedText: string, expectedDocumentation?: string): void;
+ quickInfoAt(markerName: string, expectedText: string, expectedDocumentation?: string): void;
+ quickInfos(namesAndTexts: {
+ [name: string]: string;
+ }): void;
+ caretAtMarker(markerName?: string): void;
+ indentationIs(numberOfSpaces: number): void;
+ indentationAtPositionIs(fileName: string, position: number, numberOfSpaces: number, indentStyle?: ts.IndentStyle, baseIndentSize?: number): void;
+ textAtCaretIs(text: string): void;
+ /**
+ * Compiles the current file and evaluates 'expr' in a context containing
+ * the emitted output, then compares (using ===) the result of that expression
+ * to 'value'. Do not use this function with external modules as it is not supported.
+ */
+ eval(expr: string, value: any): void;
+ currentLineContentIs(text: string): void;
+ currentFileContentIs(text: string): void;
+ goToDefinitionIs(endMarkers: ArrayOrSingle): void;
+ goToDefinition(startMarkerName: ArrayOrSingle, endMarkerName: ArrayOrSingle, range?: FourSlash.Range): void;
+ goToDefinition(startsAndEnds: [ArrayOrSingle, ArrayOrSingle][] | {
+ [startMarkerName: string]: ArrayOrSingle;
+ }): void;
+ goToType(startMarkerName: ArrayOrSingle, endMarkerName: ArrayOrSingle): void;
+ goToType(startsAndEnds: [ArrayOrSingle, ArrayOrSingle][] | {
+ [startMarkerName: string]: ArrayOrSingle;
+ }): void;
+ goToDefinitionForMarkers(...markerNames: string[]): void;
+ goToDefinitionName(name: string, containerName: string): void;
+ verifyGetEmitOutputForCurrentFile(expected: string): void;
+ verifyGetEmitOutputContentsForCurrentFile(expected: ts.OutputFile[]): void;
+ symbolAtLocation(startRange: FourSlash.Range, ...declarationRanges: FourSlash.Range[]): void;
+ typeOfSymbolAtLocation(range: FourSlash.Range, symbol: ts.Symbol, expected: string): void;
+ referenceGroups(starts: ArrayOrSingle | ArrayOrSingle, parts: ReferenceGroup[]): void;
+ noReferences(markerNameOrRange?: string | FourSlash.Range): void;
+ getReferencesForServerTest(expected: ReadonlyArray): void;
+ singleReferenceGroup(definition: ReferenceGroupDefinition, ranges?: FourSlash.Range[]): void;
+ findReferencesDefinitionDisplayPartsAtCaretAre(expected: ts.SymbolDisplayPart[]): void;
+ noErrors(): void;
+ numberOfErrorsInCurrentFile(expected: number): void;
+ baselineCurrentFileBreakpointLocations(): void;
+ baselineCurrentFileNameOrDottedNameSpans(): void;
+ baselineGetEmitOutput(insertResultsIntoVfs?: boolean): void;
+ baselineQuickInfo(): void;
+ nameOrDottedNameSpanTextIs(text: string): void;
+ outliningSpansInCurrentFile(spans: FourSlash.Range[], kind?: "comment" | "region" | "code" | "imports"): void;
+ todoCommentsInCurrentFile(descriptors: string[]): void;
+ matchingBracePositionInCurrentFile(bracePosition: number, expectedMatchPosition: number): void;
+ noMatchingBracePositionInCurrentFile(bracePosition: number): void;
+ docCommentTemplateAt(marker: string | FourSlash.Marker, expectedOffset: number, expectedText: string): void;
+ noDocCommentTemplateAt(marker: string | FourSlash.Marker): void;
+ rangeAfterCodeFix(expectedText: string, includeWhiteSpace?: boolean, errorCode?: number, index?: number): void;
+ codeFixAll(options: VerifyCodeFixAllOptions): void;
+ fileAfterApplyingRefactorAtMarker(markerName: string, expectedContent: string, refactorNameToApply: string, actionName: string, formattingOptions?: ts.FormatCodeSettings): void;
+ rangeIs(expectedText: string, includeWhiteSpace?: boolean): void;
+ getAndApplyCodeFix(errorCode?: number, index?: number): void;
+ applyCodeActionFromCompletion(markerName: string, options: VerifyCompletionActionOptions): void;
+ importFixAtPosition(expectedTextArray: string[], errorCode?: number, preferences?: ts.UserPreferences): void;
+ navigationBar(json: any, options?: {
+ checkSpans?: boolean;
+ }): void;
+ navigationTree(json: any, options?: {
+ checkSpans?: boolean;
+ }): void;
+ navigationItemsListCount(count: number, searchValue: string, matchKind?: string, fileName?: string): void;
+ navigationItemsListContains(name: string, kind: string, searchValue: string, matchKind: string, fileName?: string, parentName?: string): void;
+ occurrencesAtPositionContains(range: FourSlash.Range, isWriteAccess?: boolean): void;
+ occurrencesAtPositionCount(expectedCount: number): void;
+ rangesAreOccurrences(isWriteAccess?: boolean): void;
+ rangesWithSameTextAreRenameLocations(): void;
+ rangesAreRenameLocations(options?: FourSlash.Range[] | {
+ findInStrings?: boolean;
+ findInComments?: boolean;
+ ranges?: FourSlash.Range[];
+ }): void;
+ rangesAreDocumentHighlights(ranges?: FourSlash.Range[], options?: VerifyDocumentHighlightsOptions): void;
+ rangesWithSameTextAreDocumentHighlights(): void;
+ documentHighlightsOf(startRange: FourSlash.Range, ranges: FourSlash.Range[], options?: VerifyDocumentHighlightsOptions): void;
+ noDocumentHighlights(startRange: FourSlash.Range): void;
+ completionEntryDetailIs(entryName: string, text: string, documentation?: string, kind?: string, tags?: ts.JSDocTagInfo[]): void;
+ /**
+ * This method *requires* a contiguous, complete, and ordered stream of classifications for a file.
+ */
+ syntacticClassificationsAre(...classifications: {
+ classificationType: string;
+ text: string;
+ }[]): void;
+ /**
+ * This method *requires* an ordered stream of classifications for a file, and spans are highly recommended.
+ */
+ semanticClassificationsAre(...classifications: Classification[]): void;
+ renameInfoSucceeded(displayName?: string, fullDisplayName?: string, kind?: string, kindModifiers?: string): void;
+ renameInfoFailed(message?: string): void;
+ renameLocations(startRanges: ArrayOrSingle, options: FourSlash.Range[] | {
+ findInStrings?: boolean;
+ findInComments?: boolean;
+ ranges: FourSlash.Range[];
+ }): void;
+ verifyQuickInfoDisplayParts(kind: string, kindModifiers: string, textSpan: FourSlash.TextSpan, displayParts: ts.SymbolDisplayPart[], documentation: ts.SymbolDisplayPart[], tags: ts.JSDocTagInfo[]): void;
+ getSyntacticDiagnostics(expected: ReadonlyArray): void;
+ getSemanticDiagnostics(expected: ReadonlyArray): void;
+ getSuggestionDiagnostics(expected: ReadonlyArray): void;
+ ProjectInfo(expected: string[]): void;
+ allRangesAppearInImplementationList(markerName: string): void;
+ getEditsForFileRename(options: GetEditsForFileRenameOptions): void;
+ moveToNewFile(options: MoveToNewFileOptions): void;
+ noMoveToNewFile(): void;
+ }
+ class Edit {
+ private state;
+ constructor(state: FourSlash.TestState);
+ backspace(count?: number): void;
+ deleteAtCaret(times?: number): void;
+ replace(start: number, length: number, text: string): void;
+ paste(text: string): void;
+ insert(text: string): void;
+ insertLine(text: string): void;
+ insertLines(...lines: string[]): void;
+ moveRight(count?: number): void;
+ moveLeft(count?: number): void;
+ enableFormatting(): void;
+ disableFormatting(): void;
+ applyRefactor(options: ApplyRefactorOptions): void;
+ }
+ class Debug {
+ private state;
+ constructor(state: FourSlash.TestState);
+ printCurrentParameterHelp(): void;
+ printCurrentFileState(): void;
+ printCurrentFileStateWithWhitespace(): void;
+ printCurrentFileStateWithoutCaret(): void;
+ printCurrentQuickInfo(): void;
+ printCurrentSignatureHelp(): void;
+ printCompletionListMembers(options: ts.UserPreferences | undefined): void;
+ printAvailableCodeFixes(): void;
+ printBreakpointLocation(pos: number): void;
+ printBreakpointAtCurrentLocation(): void;
+ printNameOrDottedNameSpans(pos: number): void;
+ printErrorList(): void;
+ printNavigationItems(searchValue?: string): void;
+ printNavigationBar(): void;
+ printContext(): void;
+ printOutliningSpans(): void;
+ }
+ class Format {
+ private state;
+ constructor(state: FourSlash.TestState);
+ document(): void;
+ copyFormatOptions(): ts.FormatCodeSettings;
+ setFormatOptions(options: ts.FormatCodeOptions): ts.FormatCodeSettings;
+ selection(startMarker: string, endMarker: string): void;
+ onType(posMarker: string, key: string): void;
+ setOption(name: keyof ts.FormatCodeSettings, value: number | string | boolean): void;
+ }
+ class Cancellation {
+ private state;
+ constructor(state: FourSlash.TestState);
+ resetCancelled(): void;
+ setCancelled(numberOfCalls?: number): void;
+ }
+ interface Classification {
+ classificationType: ts.ClassificationTypeNames;
+ text: string;
+ textSpan?: FourSlash.TextSpan;
+ }
+ namespace Classification {
+ function comment(text: string, position?: number): Classification;
+ function identifier(text: string, position?: number): Classification;
+ function keyword(text: string, position?: number): Classification;
+ function numericLiteral(text: string, position?: number): Classification;
+ function operator(text: string, position?: number): Classification;
+ function stringLiteral(text: string, position?: number): Classification;
+ function whiteSpace(text: string, position?: number): Classification;
+ function text(text: string, position?: number): Classification;
+ function punctuation(text: string, position?: number): Classification;
+ function docCommentTagName(text: string, position?: number): Classification;
+ function className(text: string, position?: number): Classification;
+ function enumName(text: string, position?: number): Classification;
+ function interfaceName(text: string, position?: number): Classification;
+ function moduleName(text: string, position?: number): Classification;
+ function typeParameterName(text: string, position?: number): Classification;
+ function parameterName(text: string, position?: number): Classification;
+ function typeAliasName(text: string, position?: number): Classification;
+ function jsxOpenTagName(text: string, position?: number): Classification;
+ function jsxCloseTagName(text: string, position?: number): Classification;
+ function jsxSelfClosingTagName(text: string, position?: number): Classification;
+ function jsxAttribute(text: string, position?: number): Classification;
+ function jsxText(text: string, position?: number): Classification;
+ function jsxAttributeStringLiteralValue(text: string, position?: number): Classification;
+ }
+ interface ReferenceGroup {
+ definition: ReferenceGroupDefinition;
+ ranges: FourSlash.Range[];
+ }
+ type ReferenceGroupDefinition = string | {
+ text: string;
+ range: FourSlash.Range;
+ };
+ interface ApplyRefactorOptions {
+ refactorName: string;
+ actionName: string;
+ actionDescription: string;
+ newContent: string;
+ }
+ type ExpectedCompletionEntry = string | {
+ readonly name: string;
+ readonly insertText?: string;
+ readonly replacementSpan?: FourSlash.Range;
+ readonly hasAction?: boolean;
+ readonly isRecommended?: boolean;
+ readonly kind?: string;
+ readonly text: string;
+ readonly documentation: string;
+ readonly sourceDisplay?: string;
+ };
+ interface CompletionsAtOptions extends Partial {
+ triggerCharacter?: ts.CompletionsTriggerCharacter;
+ isNewIdentifierLocation?: boolean;
+ }
+ interface VerifyCompletionsOptions {
+ readonly marker?: ArrayOrSingle;
+ readonly isNewIdentifierLocation?: boolean;
+ readonly exact?: ArrayOrSingle;
+ readonly includes?: ArrayOrSingle;
+ readonly excludes?: ArrayOrSingle;
+ readonly preferences?: ts.UserPreferences;
+ readonly triggerCharacter?: ts.CompletionsTriggerCharacter;
+ }
+ interface VerifySignatureHelpOptions {
+ readonly marker?: ArrayOrSingle;
+ /** @default 1 */
+ readonly overloadsCount?: number;
+ /** @default undefined */
+ readonly docComment?: string;
+ readonly text?: string;
+ readonly parameterName?: string;
+ readonly parameterSpan?: string;
+ /** @default undefined */
+ readonly parameterDocComment?: string;
+ readonly parameterCount?: number;
+ readonly argumentCount?: number;
+ /** @default false */
+ readonly isVariadic?: boolean;
+ /** @default ts.emptyArray */
+ readonly tags?: ReadonlyArray;
+ }
+ type ArrayOrSingle = T | ReadonlyArray;
+ interface VerifyCompletionListContainsOptions extends ts.UserPreferences {
+ triggerCharacter?: ts.CompletionsTriggerCharacter;
+ sourceDisplay: string;
+ isRecommended?: true;
+ insertText?: string;
+ replacementSpan?: FourSlash.Range;
+ }
+ interface VerifyDocumentHighlightsOptions {
+ filesToSearch?: ReadonlyArray;
+ }
+ interface NewContentOptions {
+ newFileContent?: string | {
+ readonly [filename: string]: string;
+ };
+ newRangeContent?: string;
+ }
+ interface VerifyCodeFixOptions extends NewContentOptions {
+ description: string;
+ errorCode?: number;
+ index?: number;
+ preferences?: ts.UserPreferences;
+ }
+ interface VerifyCodeFixAvailableOptions {
+ description: string;
+ commands?: ts.CodeActionCommand[];
+ }
+ interface VerifyCodeFixAllOptions {
+ fixId: string;
+ fixAllDescription: string;
+ newFileContent: string;
+ commands: ReadonlyArray<{}>;
+ }
+ interface VerifyRefactorOptions {
+ name: string;
+ actionName: string;
+ refactors: ts.ApplicableRefactorInfo[];
+ }
+ interface VerifyCompletionActionOptions extends NewContentOptions {
+ name: string;
+ source?: string;
+ description: string;
+ preferences?: ts.UserPreferences;
+ }
+ interface Diagnostic {
+ message: string;
+ range?: FourSlash.Range;
+ code: number;
+ reportsUnnecessary?: true;
+ }
+ interface GetEditsForFileRenameOptions {
+ readonly oldPath: string;
+ readonly newPath: string;
+ readonly newFileContents: {
+ readonly [fileName: string]: string;
+ };
+ }
+ interface MoveToNewFileOptions {
+ readonly newFileContents: {
+ readonly [fileName: string]: string;
+ };
+ readonly preferences?: ts.UserPreferences;
+ }
+}
+interface TypeWriterTypeResult {
+ line: number;
+ syntaxKind: number;
+ sourceText: string;
+ type: string;
+}
+interface TypeWriterSymbolResult {
+ line: number;
+ syntaxKind: number;
+ sourceText: string;
+ symbol: string;
+}
+interface TypeWriterResult {
+ line: number;
+ syntaxKind: number;
+ sourceText: string;
+ symbol?: string;
+ type?: string;
+}
+declare class TypeWriterWalker {
+ private program;
+ currentSourceFile: ts.SourceFile;
+ private checker;
+ constructor(program: ts.Program, fullTypeCheck: boolean);
+ getSymbols(fileName: string): IterableIterator;
+ getTypes(fileName: string): IterableIterator;
+ private visitNode;
+ private writeTypeOrSymbol;
+}
+interface FileInformation {
+ contents?: string;
+ contentsPath?: string;
+ codepage: number;
+ bom?: string;
+}
+interface FindFileResult {
+}
+interface IoLogFile {
+ path: string;
+ codepage: number;
+ result?: FileInformation;
+}
+interface IoLog {
+ timestamp: string;
+ arguments: string[];
+ executingPath: string;
+ currentDirectory: string;
+ useCustomLibraryFile?: boolean;
+ filesRead: IoLogFile[];
+ filesWritten: {
+ path: string;
+ contents?: string;
+ contentsPath?: string;
+ bom: boolean;
+ }[];
+ filesDeleted: string[];
+ filesAppended: {
+ path: string;
+ contents?: string;
+ contentsPath?: string;
+ }[];
+ fileExists: {
+ path: string;
+ result?: boolean;
+ }[];
+ filesFound: {
+ path: string;
+ pattern: string;
+ result?: FindFileResult;
+ }[];
+ dirs: {
+ path: string;
+ re: string;
+ re_m: boolean;
+ re_g: boolean;
+ re_i: boolean;
+ opts: {
+ recursive?: boolean;
+ };
+ result?: string[];
+ }[];
+ dirExists: {
+ path: string;
+ result?: boolean;
+ }[];
+ dirsCreated: string[];
+ pathsResolved: {
+ path: string;
+ result?: string;
+ }[];
+ directoriesRead: {
+ path: string;
+ extensions: ReadonlyArray | undefined;
+ exclude: ReadonlyArray | undefined;
+ include: ReadonlyArray | undefined;
+ depth: number | undefined;
+ result: ReadonlyArray;
+ }[];
+ useCaseSensitiveFileNames?: boolean;
+}
+interface PlaybackControl {
+ startReplayFromFile(logFileName: string): void;
+ startReplayFromString(logContents: string): void;
+ startReplayFromData(log: IoLog): void;
+ endReplay(): void;
+ startRecord(logFileName: string): void;
+ endRecord(): void;
+}
+declare namespace Playback {
+ interface PlaybackIO extends Harness.IO, PlaybackControl {
+ }
+ interface PlaybackSystem extends ts.System, PlaybackControl {
+ }
+ function newStyleLogIntoOldStyleLog(log: IoLog, host: ts.System | Harness.IO, baseName: string): IoLog;
+ function oldStyleLogIntoNewStyleLog(log: IoLog, writeFile: typeof Harness.IO.writeFile, baseTestName: string): IoLog;
+ function wrapIO(underlying: Harness.IO): PlaybackIO;
+ function wrapSystem(underlying: ts.System): PlaybackSystem;
+}
diff --git a/src/built/local/harness.js b/src/built/local/harness.js
new file mode 100644
index 00000000000..d1db38a129e
--- /dev/null
+++ b/src/built/local/harness.js
@@ -0,0 +1,11641 @@
+"use strict";
+var __generator = (this && this.__generator) || function (thisArg, body) {
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
+ function verb(n) { return function (v) { return step([n, v]); }; }
+ function step(op) {
+ if (f) throw new TypeError("Generator is already executing.");
+ while (_) try {
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
+ if (y = 0, t) op = [op[0] & 2, t.value];
+ switch (op[0]) {
+ case 0: case 1: t = op; break;
+ case 4: _.label++; return { value: op[1], done: false };
+ case 5: _.label++; y = op[1]; op = [0]; continue;
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
+ default:
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
+ if (t[2]) _.ops.pop();
+ _.trys.pop(); continue;
+ }
+ op = body.call(thisArg, _);
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
+ }
+};
+var __values = (this && this.__values) || function (o) {
+ var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0;
+ if (m) return m.call(o);
+ return {
+ next: function () {
+ if (o && i >= o.length) o = void 0;
+ return { value: o && o[i++], done: !o };
+ }
+ };
+};
+var __assign = (this && this.__assign) || Object.assign || function(t) {
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
+ s = arguments[i];
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
+ t[p] = s[p];
+ }
+ return t;
+};
+var __extends = (this && this.__extends) || (function () {
+ var extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
+ return function (d, b) {
+ extendStatics(d, b);
+ function __() { this.constructor = d; }
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+ };
+})();
+var collections;
+(function (collections) {
+ var SortedMap = /** @class */ (function () {
+ function SortedMap(comparer, iterable) {
+ this._keys = [];
+ this._values = [];
+ this._version = 0;
+ this._copyOnWrite = false;
+ this._comparer = typeof comparer === "object" ? comparer.comparer : comparer;
+ this._order = typeof comparer === "object" && comparer.sort === "insertion" ? [] : undefined;
+ if (iterable) {
+ var iterator = getIterator(iterable);
+ try {
+ for (var i = nextResult(iterator); i; i = nextResult(iterator)) {
+ var _a = i.value, key = _a[0], value = _a[1];
+ this.set(key, value);
+ }
+ }
+ finally {
+ closeIterator(iterator);
+ }
+ }
+ }
+ Object.defineProperty(SortedMap.prototype, "size", {
+ get: function () {
+ return this._keys.length;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ Object.defineProperty(SortedMap.prototype, "comparer", {
+ get: function () {
+ return this._comparer;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ Object.defineProperty(SortedMap.prototype, Symbol.toStringTag, {
+ get: function () {
+ return "SortedMap";
+ },
+ enumerable: true,
+ configurable: true
+ });
+ SortedMap.prototype.has = function (key) {
+ return ts.binarySearch(this._keys, key, ts.identity, this._comparer) >= 0;
+ };
+ SortedMap.prototype.get = function (key) {
+ var index = ts.binarySearch(this._keys, key, ts.identity, this._comparer);
+ return index >= 0 ? this._values[index] : undefined;
+ };
+ SortedMap.prototype.set = function (key, value) {
+ var index = ts.binarySearch(this._keys, key, ts.identity, this._comparer);
+ if (index >= 0) {
+ this._values[index] = value;
+ }
+ else {
+ this.writePreamble();
+ insertAt(this._keys, ~index, key);
+ insertAt(this._values, ~index, value);
+ if (this._order)
+ insertAt(this._order, ~index, this._version);
+ this.writePostScript();
+ }
+ return this;
+ };
+ SortedMap.prototype.delete = function (key) {
+ var index = ts.binarySearch(this._keys, key, ts.identity, this._comparer);
+ if (index >= 0) {
+ this.writePreamble();
+ ts.orderedRemoveItemAt(this._keys, index);
+ ts.orderedRemoveItemAt(this._values, index);
+ if (this._order)
+ ts.orderedRemoveItemAt(this._order, index);
+ this.writePostScript();
+ return true;
+ }
+ return false;
+ };
+ SortedMap.prototype.clear = function () {
+ if (this.size > 0) {
+ this.writePreamble();
+ this._keys.length = 0;
+ this._values.length = 0;
+ if (this._order)
+ this._order.length = 0;
+ this.writePostScript();
+ }
+ };
+ SortedMap.prototype.forEach = function (callback, thisArg) {
+ var keys = this._keys;
+ var values = this._values;
+ var indices = this.getIterationOrder();
+ var version = this._version;
+ this._copyOnWrite = true;
+ try {
+ if (indices) {
+ for (var _i = 0, indices_1 = indices; _i < indices_1.length; _i++) {
+ var i = indices_1[_i];
+ callback.call(thisArg, values[i], keys[i], this);
+ }
+ }
+ else {
+ for (var i = 0; i < keys.length; i++) {
+ callback.call(thisArg, values[i], keys[i], this);
+ }
+ }
+ }
+ finally {
+ if (version === this._version) {
+ this._copyOnWrite = false;
+ }
+ }
+ };
+ SortedMap.prototype.keys = function () {
+ var keys, indices, version, _i, indices_2, i;
+ return __generator(this, function (_a) {
+ switch (_a.label) {
+ case 0:
+ keys = this._keys;
+ indices = this.getIterationOrder();
+ version = this._version;
+ this._copyOnWrite = true;
+ _a.label = 1;
+ case 1:
+ _a.trys.push([1, , 9, 10]);
+ if (!indices) return [3 /*break*/, 6];
+ _i = 0, indices_2 = indices;
+ _a.label = 2;
+ case 2:
+ if (!(_i < indices_2.length)) return [3 /*break*/, 5];
+ i = indices_2[_i];
+ return [4 /*yield*/, keys[i]];
+ case 3:
+ _a.sent();
+ _a.label = 4;
+ case 4:
+ _i++;
+ return [3 /*break*/, 2];
+ case 5: return [3 /*break*/, 8];
+ case 6: return [5 /*yield**/, __values(keys)];
+ case 7:
+ _a.sent();
+ _a.label = 8;
+ case 8: return [3 /*break*/, 10];
+ case 9:
+ if (version === this._version) {
+ this._copyOnWrite = false;
+ }
+ return [7 /*endfinally*/];
+ case 10: return [2 /*return*/];
+ }
+ });
+ };
+ SortedMap.prototype.values = function () {
+ var values, indices, version, _i, indices_3, i;
+ return __generator(this, function (_a) {
+ switch (_a.label) {
+ case 0:
+ values = this._values;
+ indices = this.getIterationOrder();
+ version = this._version;
+ this._copyOnWrite = true;
+ _a.label = 1;
+ case 1:
+ _a.trys.push([1, , 9, 10]);
+ if (!indices) return [3 /*break*/, 6];
+ _i = 0, indices_3 = indices;
+ _a.label = 2;
+ case 2:
+ if (!(_i < indices_3.length)) return [3 /*break*/, 5];
+ i = indices_3[_i];
+ return [4 /*yield*/, values[i]];
+ case 3:
+ _a.sent();
+ _a.label = 4;
+ case 4:
+ _i++;
+ return [3 /*break*/, 2];
+ case 5: return [3 /*break*/, 8];
+ case 6: return [5 /*yield**/, __values(values)];
+ case 7:
+ _a.sent();
+ _a.label = 8;
+ case 8: return [3 /*break*/, 10];
+ case 9:
+ if (version === this._version) {
+ this._copyOnWrite = false;
+ }
+ return [7 /*endfinally*/];
+ case 10: return [2 /*return*/];
+ }
+ });
+ };
+ SortedMap.prototype.entries = function () {
+ var keys, values, indices, version, _i, indices_4, i, i;
+ return __generator(this, function (_a) {
+ switch (_a.label) {
+ case 0:
+ keys = this._keys;
+ values = this._values;
+ indices = this.getIterationOrder();
+ version = this._version;
+ this._copyOnWrite = true;
+ _a.label = 1;
+ case 1:
+ _a.trys.push([1, , 11, 12]);
+ if (!indices) return [3 /*break*/, 6];
+ _i = 0, indices_4 = indices;
+ _a.label = 2;
+ case 2:
+ if (!(_i < indices_4.length)) return [3 /*break*/, 5];
+ i = indices_4[_i];
+ return [4 /*yield*/, [keys[i], values[i]]];
+ case 3:
+ _a.sent();
+ _a.label = 4;
+ case 4:
+ _i++;
+ return [3 /*break*/, 2];
+ case 5: return [3 /*break*/, 10];
+ case 6:
+ i = 0;
+ _a.label = 7;
+ case 7:
+ if (!(i < keys.length)) return [3 /*break*/, 10];
+ return [4 /*yield*/, [keys[i], values[i]]];
+ case 8:
+ _a.sent();
+ _a.label = 9;
+ case 9:
+ i++;
+ return [3 /*break*/, 7];
+ case 10: return [3 /*break*/, 12];
+ case 11:
+ if (version === this._version) {
+ this._copyOnWrite = false;
+ }
+ return [7 /*endfinally*/];
+ case 12: return [2 /*return*/];
+ }
+ });
+ };
+ SortedMap.prototype[Symbol.iterator] = function () {
+ return this.entries();
+ };
+ SortedMap.prototype.writePreamble = function () {
+ if (this._copyOnWrite) {
+ this._keys = this._keys.slice();
+ this._values = this._values.slice();
+ if (this._order)
+ this._order = this._order.slice();
+ this._copyOnWrite = false;
+ }
+ };
+ SortedMap.prototype.writePostScript = function () {
+ this._version++;
+ };
+ SortedMap.prototype.getIterationOrder = function () {
+ if (this._order) {
+ var order_1 = this._order;
+ return this._order
+ .map(function (_, i) { return i; })
+ .sort(function (x, y) { return order_1[x] - order_1[y]; });
+ }
+ return undefined;
+ };
+ return SortedMap;
+ }());
+ collections.SortedMap = SortedMap;
+ function insertAt(array, index, value) {
+ if (index === 0) {
+ array.unshift(value);
+ }
+ else if (index === array.length) {
+ array.push(value);
+ }
+ else {
+ for (var i = array.length; i > index; i--) {
+ array[i] = array[i - 1];
+ }
+ array[index] = value;
+ }
+ }
+ collections.insertAt = insertAt;
+ function getIterator(iterable) {
+ return iterable[Symbol.iterator]();
+ }
+ collections.getIterator = getIterator;
+ function nextResult(iterator) {
+ var result = iterator.next();
+ return result.done ? undefined : result;
+ }
+ collections.nextResult = nextResult;
+ function closeIterator(iterator) {
+ var fn = iterator.return;
+ if (typeof fn === "function")
+ fn.call(iterator);
+ }
+ collections.closeIterator = closeIterator;
+ /**
+ * A collection of metadata that supports inheritance.
+ */
+ var Metadata = /** @class */ (function () {
+ function Metadata(parent) {
+ this._version = 0;
+ this._size = -1;
+ this._parent = parent;
+ this._map = Object.create(parent ? parent._map : null); // tslint:disable-line:no-null-keyword
+ }
+ Object.defineProperty(Metadata.prototype, "size", {
+ get: function () {
+ if (this._size === -1 || (this._parent && this._parent._version !== this._parentVersion)) {
+ var size = 0;
+ for (var _ in this._map)
+ size++;
+ this._size = size;
+ if (this._parent) {
+ this._parentVersion = this._parent._version;
+ }
+ }
+ return this._size;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ Object.defineProperty(Metadata.prototype, "parent", {
+ get: function () {
+ return this._parent;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ Metadata.prototype.has = function (key) {
+ return this._map[Metadata._escapeKey(key)] !== undefined;
+ };
+ Metadata.prototype.get = function (key) {
+ var value = this._map[Metadata._escapeKey(key)];
+ return value === Metadata._undefinedValue ? undefined : value;
+ };
+ Metadata.prototype.set = function (key, value) {
+ this._map[Metadata._escapeKey(key)] = value === undefined ? Metadata._undefinedValue : value;
+ this._size = -1;
+ this._version++;
+ return this;
+ };
+ Metadata.prototype.delete = function (key) {
+ var escapedKey = Metadata._escapeKey(key);
+ if (this._map[escapedKey] !== undefined) {
+ delete this._map[escapedKey];
+ this._size = -1;
+ this._version++;
+ return true;
+ }
+ return false;
+ };
+ Metadata.prototype.clear = function () {
+ this._map = Object.create(this._parent ? this._parent._map : null); // tslint:disable-line:no-null-keyword
+ this._size = -1;
+ this._version++;
+ };
+ Metadata.prototype.forEach = function (callback) {
+ for (var key in this._map) {
+ callback(this._map[key], Metadata._unescapeKey(key), this);
+ }
+ };
+ Metadata._escapeKey = function (text) {
+ return (text.length >= 2 && text.charAt(0) === "_" && text.charAt(1) === "_" ? "_" + text : text);
+ };
+ Metadata._unescapeKey = function (text) {
+ return (text.length >= 3 && text.charAt(0) === "_" && text.charAt(1) === "_" && text.charAt(2) === "_" ? text.slice(1) : text);
+ };
+ Metadata._undefinedValue = {};
+ return Metadata;
+ }());
+ collections.Metadata = Metadata;
+})(collections || (collections = {}));
+/**
+ * Common utilities
+ */
+var utils;
+(function (utils) {
+ var testPathPrefixRegExp = /(?:(file:\/{3})|\/)\.(ts|lib|src)\//g;
+ function removeTestPathPrefixes(text, retainTrailingDirectorySeparator) {
+ return text !== undefined ? text.replace(testPathPrefixRegExp, function (_, scheme) { return scheme || (retainTrailingDirectorySeparator ? "/" : ""); }) : undefined; // TODO: GH#18217
+ }
+ utils.removeTestPathPrefixes = removeTestPathPrefixes;
+ /**
+ * Removes leading indentation from a template literal string.
+ */
+ function dedent(array) {
+ var args = [];
+ for (var _i = 1; _i < arguments.length; _i++) {
+ args[_i - 1] = arguments[_i];
+ }
+ var text = array[0];
+ for (var i = 0; i < args.length; i++) {
+ text += args[i];
+ text += array[i + 1];
+ }
+ var lineTerminatorRegExp = /\r\n?|\n/g;
+ var lines = [];
+ var lineTerminators = [];
+ var match;
+ var lineStart = 0;
+ while (match = lineTerminatorRegExp.exec(text)) {
+ if (lineStart !== match.index || lines.length > 0) {
+ lines.push(text.slice(lineStart, match.index));
+ lineTerminators.push(match[0]);
+ }
+ lineStart = match.index + match[0].length;
+ }
+ if (lineStart < text.length) {
+ lines.push(text.slice(lineStart));
+ }
+ var indentation = guessIndentation(lines);
+ var result = "";
+ for (var i = 0; i < lines.length; i++) {
+ var lineText = lines[i];
+ var line = indentation ? lineText.slice(indentation) : lineText;
+ result += line;
+ if (i < lineTerminators.length) {
+ result += lineTerminators[i];
+ }
+ }
+ return result;
+ }
+ utils.dedent = dedent;
+ function guessIndentation(lines) {
+ var indentation;
+ for (var _i = 0, lines_1 = lines; _i < lines_1.length; _i++) {
+ var line = lines_1[_i];
+ for (var i = 0; i < line.length && (indentation === undefined || i < indentation); i++) {
+ if (!ts.isWhiteSpaceLike(line.charCodeAt(i))) {
+ if (indentation === undefined || i < indentation) {
+ indentation = i;
+ break;
+ }
+ }
+ }
+ }
+ return indentation;
+ }
+ function toUtf8(text) {
+ return new Buffer(text).toString("utf8");
+ }
+ utils.toUtf8 = toUtf8;
+ function getByteOrderMarkLength(text) {
+ if (text.length >= 1) {
+ var ch0 = text.charCodeAt(0);
+ if (ch0 === 0xfeff)
+ return 1;
+ if (ch0 === 0xfe)
+ return text.length >= 2 && text.charCodeAt(1) === 0xff ? 2 : 0;
+ if (ch0 === 0xff)
+ return text.length >= 2 && text.charCodeAt(1) === 0xfe ? 2 : 0;
+ if (ch0 === 0xef)
+ return text.length >= 3 && text.charCodeAt(1) === 0xbb && text.charCodeAt(2) === 0xbf ? 3 : 0;
+ }
+ return 0;
+ }
+ utils.getByteOrderMarkLength = getByteOrderMarkLength;
+ function removeByteOrderMark(text) {
+ var length = getByteOrderMarkLength(text);
+ return length ? text.slice(length) : text;
+ }
+ utils.removeByteOrderMark = removeByteOrderMark;
+ function addUTF8ByteOrderMark(text) {
+ return getByteOrderMarkLength(text) === 0 ? "\u00EF\u00BB\u00BF" + text : text;
+ }
+ utils.addUTF8ByteOrderMark = addUTF8ByteOrderMark;
+})(utils || (utils = {}));
+// NOTE: The contents of this file are all exported from the namespace 'documents'. This is to
+// support the eventual conversion of harness into a modular system.
+var documents;
+(function (documents) {
+ var TextDocument = /** @class */ (function () {
+ function TextDocument(file, text, meta) {
+ this.file = file;
+ this.text = text;
+ this.meta = meta || new Map();
+ }
+ Object.defineProperty(TextDocument.prototype, "lineStarts", {
+ get: function () {
+ return this._lineStarts || (this._lineStarts = ts.computeLineStarts(this.text));
+ },
+ enumerable: true,
+ configurable: true
+ });
+ TextDocument.fromTestFile = function (file) {
+ return new TextDocument(file.unitName, file.content, file.fileOptions && Object.keys(file.fileOptions)
+ .reduce(function (meta, key) { return meta.set(key, file.fileOptions[key]); }, new Map()));
+ };
+ TextDocument.prototype.asTestFile = function () {
+ return this._testFile || (this._testFile = {
+ unitName: this.file,
+ content: this.text,
+ fileOptions: Array.from(this.meta)
+ .reduce(function (obj, _a) {
+ var key = _a[0], value = _a[1];
+ return (obj[key] = value, obj);
+ }, {})
+ });
+ };
+ return TextDocument;
+ }());
+ documents.TextDocument = TextDocument;
+ var SourceMap = /** @class */ (function () {
+ function SourceMap(mapFile, data) {
+ this.sources = [];
+ this.mappings = [];
+ this._emittedLineMappings = [];
+ this._sourceLineMappings = [];
+ this.raw = typeof data === "string" ? JSON.parse(data) : data;
+ this.mapFile = mapFile;
+ this.version = this.raw.version;
+ this.file = this.raw.file;
+ this.sourceRoot = this.raw.sourceRoot;
+ this.sources = this.raw.sources;
+ this.sourcesContent = this.raw.sourcesContent;
+ this.names = this.raw.names;
+ // populate mappings
+ var mappings = [];
+ var emittedLine = 0;
+ var emittedColumn = 0;
+ var sourceIndex = 0;
+ var sourceLine = 0;
+ var sourceColumn = 0;
+ var nameIndex = 0;
+ var match;
+ while (match = SourceMap._mappingRegExp.exec(this.raw.mappings)) {
+ if (match[1]) {
+ var segment = SourceMap._decodeVLQ(match[1]);
+ if (segment.length !== 1 && segment.length !== 4 && segment.length !== 5) {
+ throw new Error("Invalid VLQ");
+ }
+ emittedColumn += segment[0];
+ if (segment.length >= 4) {
+ sourceIndex += segment[1];
+ sourceLine += segment[2];
+ sourceColumn += segment[3];
+ }
+ var mapping = { mappingIndex: mappings.length, emittedLine: emittedLine, emittedColumn: emittedColumn, sourceIndex: sourceIndex, sourceLine: sourceLine, sourceColumn: sourceColumn };
+ if (segment.length === 5) {
+ nameIndex += segment[4];
+ mapping.nameIndex = nameIndex;
+ }
+ mappings.push(mapping);
+ var mappingsForEmittedLine = this._emittedLineMappings[mapping.emittedLine] || (this._emittedLineMappings[mapping.emittedLine] = []);
+ mappingsForEmittedLine.push(mapping);
+ var mappingsForSource = this._sourceLineMappings[mapping.sourceIndex] || (this._sourceLineMappings[mapping.sourceIndex] = []);
+ var mappingsForSourceLine = mappingsForSource[mapping.sourceLine] || (mappingsForSource[mapping.sourceLine] = []);
+ mappingsForSourceLine.push(mapping);
+ }
+ else if (match[2]) {
+ emittedLine++;
+ emittedColumn = 0;
+ }
+ else {
+ throw new Error("Unrecognized character '" + match[0] + "'.");
+ }
+ }
+ this.mappings = mappings;
+ }
+ SourceMap.getUrl = function (text) {
+ var match;
+ var lastMatch;
+ while (match = SourceMap._sourceMappingURLRegExp.exec(text)) {
+ lastMatch = match;
+ }
+ return lastMatch ? lastMatch[1] : undefined;
+ };
+ SourceMap.fromUrl = function (url) {
+ var match = SourceMap._dataURLRegExp.exec(url);
+ return match ? new SourceMap(/*mapFile*/ undefined, new Buffer(match[1], "base64").toString("utf8")) : undefined;
+ };
+ SourceMap.fromSource = function (text) {
+ var url = this.getUrl(text);
+ return url === undefined ? undefined : this.fromUrl(url);
+ };
+ SourceMap.prototype.getMappingsForEmittedLine = function (emittedLine) {
+ return this._emittedLineMappings[emittedLine];
+ };
+ SourceMap.prototype.getMappingsForSourceLine = function (sourceIndex, sourceLine) {
+ var mappingsForSource = this._sourceLineMappings[sourceIndex];
+ return mappingsForSource && mappingsForSource[sourceLine];
+ };
+ SourceMap._decodeVLQ = function (text) {
+ var vlq = [];
+ var shift = 0;
+ var value = 0;
+ for (var i = 0; i < text.length; i++) {
+ var currentByte = SourceMap._base64Chars.indexOf(text.charAt(i));
+ value += (currentByte & 31) << shift;
+ if ((currentByte & 32) === 0) {
+ vlq.push(value & 1 ? -(value >>> 1) : value >>> 1);
+ shift = 0;
+ value = 0;
+ }
+ else {
+ shift += 5;
+ }
+ }
+ return vlq;
+ };
+ SourceMap._mappingRegExp = /([A-Za-z0-9+/]+),?|(;)|./g;
+ SourceMap._sourceMappingURLRegExp = /^\/\/[#@]\s*sourceMappingURL\s*=\s*(.*?)\s*$/mig;
+ SourceMap._dataURLRegExp = /^data:application\/json;base64,([a-z0-9+/=]+)$/i;
+ SourceMap._base64Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+ return SourceMap;
+ }());
+ documents.SourceMap = SourceMap;
+})(documents || (documents = {}));
+var vpath;
+(function (vpath) {
+ vpath.sep = ts.directorySeparator;
+ vpath.normalizeSeparators = ts.normalizeSlashes;
+ vpath.isAbsolute = ts.isRootedDiskPath;
+ vpath.isRoot = ts.isDiskPathRoot;
+ vpath.hasTrailingSeparator = ts.hasTrailingDirectorySeparator;
+ vpath.addTrailingSeparator = ts.ensureTrailingDirectorySeparator;
+ vpath.removeTrailingSeparator = ts.removeTrailingDirectorySeparator;
+ vpath.normalize = ts.normalizePath;
+ vpath.combine = ts.combinePaths;
+ vpath.parse = ts.getPathComponents;
+ vpath.reduce = ts.reducePathComponents;
+ vpath.format = ts.getPathFromPathComponents;
+ vpath.resolve = ts.resolvePath;
+ vpath.compare = ts.comparePaths;
+ vpath.compareCaseSensitive = ts.comparePathsCaseSensitive;
+ vpath.compareCaseInsensitive = ts.comparePathsCaseInsensitive;
+ vpath.dirname = ts.getDirectoryPath;
+ vpath.basename = ts.getBaseFileName;
+ vpath.extname = ts.getAnyExtensionFromPath;
+ vpath.relative = ts.getRelativePathFromDirectory;
+ vpath.beneath = ts.containsPath;
+ vpath.changeExtension = ts.changeAnyExtension;
+ vpath.isTypeScript = ts.hasTypeScriptFileExtension;
+ vpath.isJavaScript = ts.hasJavaScriptFileExtension;
+ var invalidRootComponentRegExp = /^(?!(\/|\/\/\w+\/|[a-zA-Z]:\/?|)$)/;
+ var invalidNavigableComponentRegExp = /[:*?"<>|]/;
+ var invalidNavigableComponentWithWildcardsRegExp = /[:"<>|]/;
+ var invalidNonNavigableComponentRegExp = /^\.{1,2}$|[:*?"<>|]/;
+ var invalidNonNavigableComponentWithWildcardsRegExp = /^\.{1,2}$|[:"<>|]/;
+ var extRegExp = /\.\w+$/;
+ var ValidationFlags;
+ (function (ValidationFlags) {
+ ValidationFlags[ValidationFlags["None"] = 0] = "None";
+ ValidationFlags[ValidationFlags["RequireRoot"] = 1] = "RequireRoot";
+ ValidationFlags[ValidationFlags["RequireDirname"] = 2] = "RequireDirname";
+ ValidationFlags[ValidationFlags["RequireBasename"] = 4] = "RequireBasename";
+ ValidationFlags[ValidationFlags["RequireExtname"] = 8] = "RequireExtname";
+ ValidationFlags[ValidationFlags["RequireTrailingSeparator"] = 16] = "RequireTrailingSeparator";
+ ValidationFlags[ValidationFlags["AllowRoot"] = 32] = "AllowRoot";
+ ValidationFlags[ValidationFlags["AllowDirname"] = 64] = "AllowDirname";
+ ValidationFlags[ValidationFlags["AllowBasename"] = 128] = "AllowBasename";
+ ValidationFlags[ValidationFlags["AllowExtname"] = 256] = "AllowExtname";
+ ValidationFlags[ValidationFlags["AllowTrailingSeparator"] = 512] = "AllowTrailingSeparator";
+ ValidationFlags[ValidationFlags["AllowNavigation"] = 1024] = "AllowNavigation";
+ ValidationFlags[ValidationFlags["AllowWildcard"] = 2048] = "AllowWildcard";
+ /** Path must be a valid directory root */
+ ValidationFlags[ValidationFlags["Root"] = 545] = "Root";
+ /** Path must be a absolute */
+ ValidationFlags[ValidationFlags["Absolute"] = 2017] = "Absolute";
+ /** Path may be relative or absolute */
+ ValidationFlags[ValidationFlags["RelativeOrAbsolute"] = 2016] = "RelativeOrAbsolute";
+ /** Path may only be a filename */
+ ValidationFlags[ValidationFlags["Basename"] = 260] = "Basename";
+ })(ValidationFlags = vpath.ValidationFlags || (vpath.ValidationFlags = {}));
+ function validateComponents(components, flags, hasTrailingSeparator) {
+ var hasRoot = !!components[0];
+ var hasDirname = components.length > 2;
+ var hasBasename = components.length > 1;
+ var hasExtname = hasBasename && extRegExp.test(components[components.length - 1]);
+ var invalidComponentRegExp = flags & 1024 /* AllowNavigation */
+ ? flags & 2048 /* AllowWildcard */ ? invalidNavigableComponentWithWildcardsRegExp : invalidNavigableComponentRegExp
+ : flags & 2048 /* AllowWildcard */ ? invalidNonNavigableComponentWithWildcardsRegExp : invalidNonNavigableComponentRegExp;
+ // Validate required components
+ if (flags & 1 /* RequireRoot */ && !hasRoot)
+ return false;
+ if (flags & 2 /* RequireDirname */ && !hasDirname)
+ return false;
+ if (flags & 4 /* RequireBasename */ && !hasBasename)
+ return false;
+ if (flags & 8 /* RequireExtname */ && !hasExtname)
+ return false;
+ if (flags & 16 /* RequireTrailingSeparator */ && !hasTrailingSeparator)
+ return false;
+ // Required components indicate allowed components
+ if (flags & 1 /* RequireRoot */)
+ flags |= 32 /* AllowRoot */;
+ if (flags & 2 /* RequireDirname */)
+ flags |= 64 /* AllowDirname */;
+ if (flags & 4 /* RequireBasename */)
+ flags |= 128 /* AllowBasename */;
+ if (flags & 8 /* RequireExtname */)
+ flags |= 256 /* AllowExtname */;
+ if (flags & 16 /* RequireTrailingSeparator */)
+ flags |= 512 /* AllowTrailingSeparator */;
+ // Validate disallowed components
+ if (~flags & 32 /* AllowRoot */ && hasRoot)
+ return false;
+ if (~flags & 64 /* AllowDirname */ && hasDirname)
+ return false;
+ if (~flags & 128 /* AllowBasename */ && hasBasename)
+ return false;
+ if (~flags & 256 /* AllowExtname */ && hasExtname)
+ return false;
+ if (~flags & 512 /* AllowTrailingSeparator */ && hasTrailingSeparator)
+ return false;
+ // Validate component strings
+ if (invalidRootComponentRegExp.test(components[0]))
+ return false;
+ for (var i = 1; i < components.length; i++) {
+ if (invalidComponentRegExp.test(components[i]))
+ return false;
+ }
+ return true;
+ }
+ function validate(path, flags) {
+ if (flags === void 0) { flags = 2016 /* RelativeOrAbsolute */; }
+ var components = vpath.parse(path);
+ var trailing = vpath.hasTrailingSeparator(path);
+ if (!validateComponents(components, flags, trailing))
+ throw vfs.createIOError("ENOENT");
+ return components.length > 1 && trailing ? vpath.format(vpath.reduce(components)) + vpath.sep : vpath.format(vpath.reduce(components));
+ }
+ vpath.validate = validate;
+ function isDeclaration(path) {
+ return vpath.extname(path, ".d.ts", /*ignoreCase*/ false).length > 0;
+ }
+ vpath.isDeclaration = isDeclaration;
+ function isSourceMap(path) {
+ return vpath.extname(path, ".map", /*ignoreCase*/ false).length > 0;
+ }
+ vpath.isSourceMap = isSourceMap;
+ var javaScriptSourceMapExtensions = [".js.map", ".jsx.map"];
+ function isJavaScriptSourceMap(path) {
+ return vpath.extname(path, javaScriptSourceMapExtensions, /*ignoreCase*/ false).length > 0;
+ }
+ vpath.isJavaScriptSourceMap = isJavaScriptSourceMap;
+ function isJson(path) {
+ return vpath.extname(path, ".json", /*ignoreCase*/ false).length > 0;
+ }
+ vpath.isJson = isJson;
+ function isDefaultLibrary(path) {
+ return isDeclaration(path)
+ && vpath.basename(path).startsWith("lib.");
+ }
+ vpath.isDefaultLibrary = isDefaultLibrary;
+ function isTsConfigFile(path) {
+ return path.indexOf("tsconfig") !== -1 && path.indexOf("json") !== -1;
+ }
+ vpath.isTsConfigFile = isTsConfigFile;
+})(vpath || (vpath = {}));
+// tslint:disable:no-null-keyword
+var vfs;
+(function (vfs) {
+ /**
+ * Posix-style path to the TypeScript compiler build outputs (including tsc.js, lib.d.ts, etc.)
+ */
+ vfs.builtFolder = "/.ts";
+ /**
+ * Posix-style path to additional mountable folders (./tests/projects in this repo)
+ */
+ vfs.projectsFolder = "/.projects";
+ /**
+ * Posix-style path to additional test libraries
+ */
+ vfs.testLibFolder = "/.lib";
+ /**
+ * Posix-style path to sources under test
+ */
+ vfs.srcFolder = "/.src";
+ // file type
+ var S_IFMT = 61440; // file type
+ var S_IFSOCK = 49152; // socket
+ var S_IFLNK = 40960; // symbolic link
+ var S_IFREG = 32768; // regular file
+ var S_IFBLK = 24576; // block device
+ var S_IFDIR = 16384; // directory
+ var S_IFCHR = 8192; // character device
+ var S_IFIFO = 4096; // FIFO
+ var devCount = 0; // A monotonically increasing count of device ids
+ var inoCount = 0; // A monotonically increasing count of inodes
+ /**
+ * Represents a virtual POSIX-like file system.
+ */
+ var FileSystem = /** @class */ (function () {
+ function FileSystem(ignoreCase, options) {
+ if (options === void 0) { options = {}; }
+ // lazy-initialized state that should be mutable even if the FileSystem is frozen.
+ this._lazy = {};
+ var _a = options.time, time = _a === void 0 ? -1 : _a, files = options.files, meta = options.meta;
+ this.ignoreCase = ignoreCase;
+ this.stringComparer = this.ignoreCase ? vpath.compareCaseInsensitive : vpath.compareCaseSensitive;
+ this._time = time;
+ if (meta) {
+ for (var _i = 0, _b = Object.keys(meta); _i < _b.length; _i++) {
+ var key = _b[_i];
+ this.meta.set(key, meta[key]);
+ }
+ }
+ if (files) {
+ this._applyFiles(files, /*dirname*/ "");
+ }
+ var cwd = options.cwd;
+ if ((!cwd || !vpath.isRoot(cwd)) && this._lazy.links) {
+ var iterator = collections.getIterator(this._lazy.links.keys());
+ try {
+ for (var i = collections.nextResult(iterator); i; i = collections.nextResult(iterator)) {
+ var name = i.value;
+ cwd = cwd ? vpath.resolve(name, cwd) : name;
+ break;
+ }
+ }
+ finally {
+ collections.closeIterator(iterator);
+ }
+ }
+ if (cwd) {
+ vpath.validate(cwd, 2017 /* Absolute */);
+ this.mkdirpSync(cwd);
+ }
+ this._cwd = cwd || "";
+ }
+ Object.defineProperty(FileSystem.prototype, "meta", {
+ /**
+ * Gets metadata for this `FileSystem`.
+ */
+ get: function () {
+ if (!this._lazy.meta) {
+ this._lazy.meta = new collections.Metadata(this._shadowRoot ? this._shadowRoot.meta : undefined);
+ }
+ return this._lazy.meta;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ Object.defineProperty(FileSystem.prototype, "isReadonly", {
+ /**
+ * Gets a value indicating whether the file system is read-only.
+ */
+ get: function () {
+ return Object.isFrozen(this);
+ },
+ enumerable: true,
+ configurable: true
+ });
+ /**
+ * Makes the file system read-only.
+ */
+ FileSystem.prototype.makeReadonly = function () {
+ Object.freeze(this);
+ return this;
+ };
+ Object.defineProperty(FileSystem.prototype, "shadowRoot", {
+ /**
+ * Gets the file system shadowed by this file system.
+ */
+ get: function () {
+ return this._shadowRoot;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ /**
+ * Gets a shadow copy of this file system. Changes to the shadow copy do not affect the
+ * original, allowing multiple copies of the same core file system without multiple copies
+ * of the same data.
+ */
+ FileSystem.prototype.shadow = function (ignoreCase) {
+ if (ignoreCase === void 0) { ignoreCase = this.ignoreCase; }
+ if (!this.isReadonly)
+ throw new Error("Cannot shadow a mutable file system.");
+ if (ignoreCase && !this.ignoreCase)
+ throw new Error("Cannot create a case-insensitive file system from a case-sensitive one.");
+ var fs = new FileSystem(ignoreCase, { time: this._time });
+ fs._shadowRoot = this;
+ fs._cwd = this._cwd;
+ return fs;
+ };
+ /**
+ * Gets or sets the timestamp (in milliseconds) used for file status, returning the previous timestamp.
+ *
+ * @link http://pubs.opengroup.org/onlinepubs/9699919799/functions/time.html
+ */
+ FileSystem.prototype.time = function (value) {
+ if (value !== undefined && this.isReadonly)
+ throw createIOError("EPERM");
+ var result = this._time;
+ if (typeof result === "function")
+ result = result();
+ if (typeof result === "object")
+ result = result.getTime();
+ if (result === -1)
+ result = Date.now();
+ if (value !== undefined) {
+ this._time = value;
+ }
+ return result;
+ };
+ /**
+ * Gets the metadata object for a path.
+ * @param path
+ */
+ FileSystem.prototype.filemeta = function (path) {
+ var node = this._walk(this._resolve(path)).node;
+ if (!node)
+ throw createIOError("ENOENT");
+ return this._filemeta(node);
+ };
+ FileSystem.prototype._filemeta = function (node) {
+ if (!node.meta) {
+ var parentMeta = node.shadowRoot && this._shadowRoot && this._shadowRoot._filemeta(node.shadowRoot);
+ node.meta = new collections.Metadata(parentMeta);
+ }
+ return node.meta;
+ };
+ /**
+ * Get the pathname of the current working directory.
+ *
+ * @link - http://pubs.opengroup.org/onlinepubs/9699919799/functions/getcwd.html
+ */
+ FileSystem.prototype.cwd = function () {
+ if (!this._cwd)
+ throw new Error("The current working directory has not been set.");
+ var node = this._walk(this._cwd).node;
+ if (!node)
+ throw createIOError("ENOENT");
+ if (!isDirectory(node))
+ throw createIOError("ENOTDIR");
+ return this._cwd;
+ };
+ /**
+ * Changes the current working directory.
+ *
+ * @link http://pubs.opengroup.org/onlinepubs/9699919799/functions/chdir.html
+ */
+ FileSystem.prototype.chdir = function (path) {
+ if (this.isReadonly)
+ throw createIOError("EPERM");
+ path = this._resolve(path);
+ var node = this._walk(path).node;
+ if (!node)
+ throw createIOError("ENOENT");
+ if (!isDirectory(node))
+ throw createIOError("ENOTDIR");
+ this._cwd = path;
+ };
+ /**
+ * Pushes the current directory onto the directory stack and changes the current working directory to the supplied path.
+ */
+ FileSystem.prototype.pushd = function (path) {
+ if (this.isReadonly)
+ throw createIOError("EPERM");
+ if (path)
+ path = this._resolve(path);
+ if (this._cwd) {
+ if (!this._dirStack)
+ this._dirStack = [];
+ this._dirStack.push(this._cwd);
+ }
+ if (path && path !== this._cwd) {
+ this.chdir(path);
+ }
+ };
+ /**
+ * Pops the previous directory from the location stack and changes the current directory to that directory.
+ */
+ FileSystem.prototype.popd = function () {
+ if (this.isReadonly)
+ throw createIOError("EPERM");
+ var path = this._dirStack && this._dirStack.pop();
+ if (path) {
+ this.chdir(path);
+ }
+ };
+ /**
+ * Update the file system with a set of files.
+ */
+ FileSystem.prototype.apply = function (files) {
+ this._applyFiles(files, this._cwd);
+ };
+ /**
+ * Scan file system entries along a path. If `path` is a symbolic link, it is dereferenced.
+ * @param path The path at which to start the scan.
+ * @param axis The axis along which to traverse.
+ * @param traversal The traversal scheme to use.
+ */
+ FileSystem.prototype.scanSync = function (path, axis, traversal) {
+ path = this._resolve(path);
+ var results = [];
+ this._scan(path, this._stat(this._walk(path)), axis, traversal, /*noFollow*/ false, results);
+ return results;
+ };
+ /**
+ * Scan file system entries along a path.
+ * @param path The path at which to start the scan.
+ * @param axis The axis along which to traverse.
+ * @param traversal The traversal scheme to use.
+ */
+ FileSystem.prototype.lscanSync = function (path, axis, traversal) {
+ path = this._resolve(path);
+ var results = [];
+ this._scan(path, this._stat(this._walk(path, /*noFollow*/ true)), axis, traversal, /*noFollow*/ true, results);
+ return results;
+ };
+ FileSystem.prototype._scan = function (path, stats, axis, traversal, noFollow, results) {
+ if (axis === "ancestors-or-self" || axis === "self" || axis === "descendants-or-self") {
+ if (!traversal.accept || traversal.accept(path, stats)) {
+ results.push(path);
+ }
+ }
+ if (axis === "ancestors-or-self" || axis === "ancestors") {
+ var dirname = vpath.dirname(path);
+ if (dirname !== path) {
+ try {
+ var stats_1 = this._stat(this._walk(dirname, noFollow));
+ if (!traversal.traverse || traversal.traverse(dirname, stats_1)) {
+ this._scan(dirname, stats_1, "ancestors-or-self", traversal, noFollow, results);
+ }
+ }
+ catch ( /*ignored*/_a) { /*ignored*/ }
+ }
+ }
+ if (axis === "descendants-or-self" || axis === "descendants") {
+ if (stats.isDirectory() && (!traversal.traverse || traversal.traverse(path, stats))) {
+ for (var _i = 0, _b = this.readdirSync(path); _i < _b.length; _i++) {
+ var file = _b[_i];
+ try {
+ var childpath = vpath.combine(path, file);
+ var stats_2 = this._stat(this._walk(childpath, noFollow));
+ this._scan(childpath, stats_2, "descendants-or-self", traversal, noFollow, results);
+ }
+ catch ( /*ignored*/_c) { /*ignored*/ }
+ }
+ }
+ }
+ };
+ /**
+ * Mounts a physical or virtual file system at a location in this virtual file system.
+ *
+ * @param source The path in the physical (or other virtual) file system.
+ * @param target The path in this virtual file system.
+ * @param resolver An object used to resolve files in `source`.
+ */
+ FileSystem.prototype.mountSync = function (source, target, resolver) {
+ if (this.isReadonly)
+ throw createIOError("EROFS");
+ source = vpath.validate(source, 2017 /* Absolute */);
+ var _a = this._walk(this._resolve(target), /*noFollow*/ true), parent = _a.parent, links = _a.links, existingNode = _a.node, basename = _a.basename;
+ if (existingNode)
+ throw createIOError("EEXIST");
+ var time = this.time();
+ var node = this._mknod(parent ? parent.dev : ++devCount, S_IFDIR, /*mode*/ 511, time);
+ node.source = source;
+ node.resolver = resolver;
+ this._addLink(parent, links, basename, node, time);
+ };
+ /**
+ * Recursively remove all files and directories underneath the provided path.
+ */
+ FileSystem.prototype.rimrafSync = function (path) {
+ try {
+ var stats = this.lstatSync(path);
+ if (stats.isFile() || stats.isSymbolicLink()) {
+ this.unlinkSync(path);
+ }
+ else if (stats.isDirectory()) {
+ for (var _i = 0, _a = this.readdirSync(path); _i < _a.length; _i++) {
+ var file = _a[_i];
+ this.rimrafSync(vpath.combine(path, file));
+ }
+ this.rmdirSync(path);
+ }
+ }
+ catch (e) {
+ if (e.code === "ENOENT")
+ return;
+ throw e;
+ }
+ };
+ /**
+ * Make a directory and all of its parent paths (if they don't exist).
+ */
+ FileSystem.prototype.mkdirpSync = function (path) {
+ var _this = this;
+ path = this._resolve(path);
+ var result = this._walk(path, /*noFollow*/ true, function (error, result) {
+ if (error.code === "ENOENT") {
+ _this._mkdir(result);
+ return "retry";
+ }
+ return "throw";
+ });
+ if (!result.node)
+ this._mkdir(result);
+ };
+ FileSystem.prototype.getFileListing = function () {
+ var _this = this;
+ var result = "";
+ var printLinks = function (dirname, links) {
+ var iterator = collections.getIterator(links);
+ try {
+ for (var i = collections.nextResult(iterator); i; i = collections.nextResult(iterator)) {
+ var _a = i.value, name = _a[0], node = _a[1];
+ var path = dirname ? vpath.combine(dirname, name) : name;
+ var marker = vpath.compare(_this._cwd, path, _this.ignoreCase) === 0 ? "*" : " ";
+ if (result)
+ result += "\n";
+ result += marker;
+ if (isDirectory(node)) {
+ result += vpath.addTrailingSeparator(path);
+ printLinks(path, _this._getLinks(node));
+ }
+ else if (isFile(node)) {
+ result += path;
+ }
+ else if (isSymlink(node)) {
+ result += path + " -> " + node.symlink;
+ }
+ }
+ }
+ finally {
+ collections.closeIterator(iterator);
+ }
+ };
+ printLinks(/*dirname*/ undefined, this._getRootLinks());
+ return result;
+ };
+ /**
+ * Print diagnostic information about the structure of the file system to the console.
+ */
+ FileSystem.prototype.debugPrint = function () {
+ console.log(this.getFileListing());
+ };
+ // POSIX API (aligns with NodeJS "fs" module API)
+ /**
+ * Determines whether a path exists.
+ */
+ FileSystem.prototype.existsSync = function (path) {
+ var result = this._walk(this._resolve(path), /*noFollow*/ true, function () { return "stop"; });
+ return result !== undefined && result.node !== undefined;
+ };
+ /**
+ * Get file status. If `path` is a symbolic link, it is dereferenced.
+ *
+ * @link http://pubs.opengroup.org/onlinepubs/9699919799/functions/stat.html
+ *
+ * NOTE: do not rename this method as it is intended to align with the same named export of the "fs" module.
+ */
+ FileSystem.prototype.statSync = function (path) {
+ return this._stat(this._walk(this._resolve(path)));
+ };
+ /**
+ * Change file access times
+ *
+ * NOTE: do not rename this method as it is intended to align with the same named export of the "fs" module.
+ */
+ FileSystem.prototype.utimesSync = function (path, atime, mtime) {
+ if (this.isReadonly)
+ throw createIOError("EROFS");
+ if (!isFinite(+atime) || !isFinite(+mtime))
+ throw createIOError("EINVAL");
+ var entry = this._walk(this._resolve(path));
+ if (!entry || !entry.node) {
+ throw createIOError("ENOENT");
+ }
+ entry.node.atimeMs = +atime;
+ entry.node.mtimeMs = +mtime;
+ entry.node.ctimeMs = this.time();
+ };
+ /**
+ * Get file status. If `path` is a symbolic link, it is dereferenced.
+ *
+ * @link http://pubs.opengroup.org/onlinepubs/9699919799/functions/lstat.html
+ *
+ * NOTE: do not rename this method as it is intended to align with the same named export of the "fs" module.
+ */
+ FileSystem.prototype.lstatSync = function (path) {
+ return this._stat(this._walk(this._resolve(path), /*noFollow*/ true));
+ };
+ FileSystem.prototype._stat = function (entry) {
+ var node = entry.node;
+ if (!node)
+ throw createIOError("ENOENT", entry.realpath);
+ return new Stats(node.dev, node.ino, node.mode, node.nlink,
+ /*rdev*/ 0,
+ /*size*/ isFile(node) ? this._getSize(node) : isSymlink(node) ? node.symlink.length : 0,
+ /*blksize*/ 4096,
+ /*blocks*/ 0, node.atimeMs, node.mtimeMs, node.ctimeMs, node.birthtimeMs);
+ };
+ /**
+ * Read a directory. If `path` is a symbolic link, it is dereferenced.
+ *
+ * @link http://pubs.opengroup.org/onlinepubs/9699919799/functions/readdir.html
+ *
+ * NOTE: do not rename this method as it is intended to align with the same named export of the "fs" module.
+ */
+ FileSystem.prototype.readdirSync = function (path) {
+ var node = this._walk(this._resolve(path)).node;
+ if (!node)
+ throw createIOError("ENOENT");
+ if (!isDirectory(node))
+ throw createIOError("ENOTDIR");
+ return Array.from(this._getLinks(node).keys());
+ };
+ /**
+ * Make a directory.
+ *
+ * @link http://pubs.opengroup.org/onlinepubs/9699919799/functions/mkdir.html
+ *
+ * NOTE: do not rename this method as it is intended to align with the same named export of the "fs" module.
+ */
+ FileSystem.prototype.mkdirSync = function (path) {
+ if (this.isReadonly)
+ throw createIOError("EROFS");
+ this._mkdir(this._walk(this._resolve(path), /*noFollow*/ true));
+ };
+ FileSystem.prototype._mkdir = function (_a) {
+ var parent = _a.parent, links = _a.links, existingNode = _a.node, basename = _a.basename;
+ if (existingNode)
+ throw createIOError("EEXIST");
+ var time = this.time();
+ var node = this._mknod(parent ? parent.dev : ++devCount, S_IFDIR, /*mode*/ 511, time);
+ this._addLink(parent, links, basename, node, time);
+ };
+ /**
+ * Remove a directory.
+ *
+ * @link http://pubs.opengroup.org/onlinepubs/9699919799/functions/rmdir.html
+ *
+ * NOTE: do not rename this method as it is intended to align with the same named export of the "fs" module.
+ */
+ FileSystem.prototype.rmdirSync = function (path) {
+ if (this.isReadonly)
+ throw createIOError("EROFS");
+ path = this._resolve(path);
+ var _a = this._walk(path, /*noFollow*/ true), parent = _a.parent, links = _a.links, node = _a.node, basename = _a.basename;
+ if (!parent)
+ throw createIOError("EPERM");
+ if (!isDirectory(node))
+ throw createIOError("ENOTDIR");
+ if (this._getLinks(node).size !== 0)
+ throw createIOError("ENOTEMPTY");
+ this._removeLink(parent, links, basename, node);
+ };
+ /**
+ * Link one file to another file (also known as a "hard link").
+ *
+ * @link http://pubs.opengroup.org/onlinepubs/9699919799/functions/link.html
+ *
+ * NOTE: do not rename this method as it is intended to align with the same named export of the "fs" module.
+ */
+ FileSystem.prototype.linkSync = function (oldpath, newpath) {
+ if (this.isReadonly)
+ throw createIOError("EROFS");
+ var node = this._walk(this._resolve(oldpath)).node;
+ if (!node)
+ throw createIOError("ENOENT");
+ if (isDirectory(node))
+ throw createIOError("EPERM");
+ var _a = this._walk(this._resolve(newpath), /*noFollow*/ true), parent = _a.parent, links = _a.links, basename = _a.basename, existingNode = _a.node;
+ if (!parent)
+ throw createIOError("EPERM");
+ if (existingNode)
+ throw createIOError("EEXIST");
+ this._addLink(parent, links, basename, node);
+ };
+ /**
+ * Remove a directory entry.
+ *
+ * @link http://pubs.opengroup.org/onlinepubs/9699919799/functions/unlink.html
+ *
+ * NOTE: do not rename this method as it is intended to align with the same named export of the "fs" module.
+ */
+ FileSystem.prototype.unlinkSync = function (path) {
+ if (this.isReadonly)
+ throw createIOError("EROFS");
+ var _a = this._walk(this._resolve(path), /*noFollow*/ true), parent = _a.parent, links = _a.links, node = _a.node, basename = _a.basename;
+ if (!parent)
+ throw createIOError("EPERM");
+ if (!node)
+ throw createIOError("ENOENT");
+ if (isDirectory(node))
+ throw createIOError("EISDIR");
+ this._removeLink(parent, links, basename, node);
+ };
+ /**
+ * Rename a file.
+ *
+ * @link http://pubs.opengroup.org/onlinepubs/9699919799/functions/rename.html
+ *
+ * NOTE: do not rename this method as it is intended to align with the same named export of the "fs" module.
+ */
+ FileSystem.prototype.renameSync = function (oldpath, newpath) {
+ if (this.isReadonly)
+ throw createIOError("EROFS");
+ var _a = this._walk(this._resolve(oldpath), /*noFollow*/ true), oldParent = _a.parent, oldParentLinks = _a.links, node = _a.node, oldBasename = _a.basename;
+ if (!oldParent)
+ throw createIOError("EPERM");
+ if (!node)
+ throw createIOError("ENOENT");
+ var _b = this._walk(this._resolve(newpath), /*noFollow*/ true), newParent = _b.parent, newParentLinks = _b.links, existingNode = _b.node, newBasename = _b.basename;
+ if (!newParent)
+ throw createIOError("EPERM");
+ var time = this.time();
+ if (existingNode) {
+ if (isDirectory(node)) {
+ if (!isDirectory(existingNode))
+ throw createIOError("ENOTDIR");
+ if (this._getLinks(existingNode).size > 0)
+ throw createIOError("ENOTEMPTY");
+ }
+ else {
+ if (isDirectory(existingNode))
+ throw createIOError("EISDIR");
+ }
+ this._removeLink(newParent, newParentLinks, newBasename, existingNode, time);
+ }
+ this._replaceLink(oldParent, oldParentLinks, oldBasename, newParent, newParentLinks, newBasename, node, time);
+ };
+ /**
+ * Make a symbolic link.
+ *
+ * @link http://pubs.opengroup.org/onlinepubs/9699919799/functions/symlink.html
+ *
+ * NOTE: do not rename this method as it is intended to align with the same named export of the "fs" module.
+ */
+ FileSystem.prototype.symlinkSync = function (target, linkpath) {
+ if (this.isReadonly)
+ throw createIOError("EROFS");
+ var _a = this._walk(this._resolve(linkpath), /*noFollow*/ true), parent = _a.parent, links = _a.links, existingNode = _a.node, basename = _a.basename;
+ if (!parent)
+ throw createIOError("EPERM");
+ if (existingNode)
+ throw createIOError("EEXIST");
+ var time = this.time();
+ var node = this._mknod(parent.dev, S_IFLNK, /*mode*/ 438, time);
+ node.symlink = vpath.validate(target, 2016 /* RelativeOrAbsolute */);
+ this._addLink(parent, links, basename, node, time);
+ };
+ /**
+ * Resolve a pathname.
+ *
+ * @link http://pubs.opengroup.org/onlinepubs/9699919799/functions/realpath.html
+ *
+ * NOTE: do not rename this method as it is intended to align with the same named export of the "fs" module.
+ */
+ FileSystem.prototype.realpathSync = function (path) {
+ var realpath = this._walk(this._resolve(path)).realpath;
+ return realpath;
+ };
+ FileSystem.prototype.readFileSync = function (path, encoding) {
+ if (encoding === void 0) { encoding = null; }
+ var node = this._walk(this._resolve(path)).node;
+ if (!node)
+ throw createIOError("ENOENT");
+ if (isDirectory(node))
+ throw createIOError("EISDIR");
+ if (!isFile(node))
+ throw createIOError("EBADF");
+ var buffer = this._getBuffer(node).slice();
+ return encoding ? buffer.toString(encoding) : buffer;
+ };
+ /**
+ * Write to a file.
+ *
+ * NOTE: do not rename this method as it is intended to align with the same named export of the "fs" module.
+ */
+ FileSystem.prototype.writeFileSync = function (path, data, encoding) {
+ if (encoding === void 0) { encoding = null; }
+ if (this.isReadonly)
+ throw createIOError("EROFS");
+ var _a = this._walk(this._resolve(path), /*noFollow*/ false), parent = _a.parent, links = _a.links, existingNode = _a.node, basename = _a.basename;
+ if (!parent)
+ throw createIOError("EPERM");
+ var time = this.time();
+ var node = existingNode;
+ if (!node) {
+ node = this._mknod(parent.dev, S_IFREG, 438, time);
+ this._addLink(parent, links, basename, node, time);
+ }
+ if (isDirectory(node))
+ throw createIOError("EISDIR");
+ if (!isFile(node))
+ throw createIOError("EBADF");
+ node.buffer = Buffer.isBuffer(data) ? data.slice() : Buffer.from("" + data, encoding || "utf8");
+ node.size = node.buffer.byteLength;
+ node.mtimeMs = time;
+ node.ctimeMs = time;
+ };
+ FileSystem.prototype._mknod = function (dev, type, mode, time) {
+ if (time === void 0) { time = this.time(); }
+ return {
+ dev: dev,
+ ino: ++inoCount,
+ mode: (mode & ~S_IFMT & ~18 & 4095) | (type & S_IFMT),
+ atimeMs: time,
+ mtimeMs: time,
+ ctimeMs: time,
+ birthtimeMs: time,
+ nlink: 0
+ };
+ };
+ FileSystem.prototype._addLink = function (parent, links, name, node, time) {
+ if (time === void 0) { time = this.time(); }
+ links.set(name, node);
+ node.nlink++;
+ node.ctimeMs = time;
+ if (parent)
+ parent.mtimeMs = time;
+ if (!parent && !this._cwd)
+ this._cwd = name;
+ };
+ FileSystem.prototype._removeLink = function (parent, links, name, node, time) {
+ if (time === void 0) { time = this.time(); }
+ links.delete(name);
+ node.nlink--;
+ node.ctimeMs = time;
+ if (parent)
+ parent.mtimeMs = time;
+ };
+ FileSystem.prototype._replaceLink = function (oldParent, oldLinks, oldName, newParent, newLinks, newName, node, time) {
+ if (oldParent !== newParent) {
+ this._removeLink(oldParent, oldLinks, oldName, node, time);
+ this._addLink(newParent, newLinks, newName, node, time);
+ }
+ else {
+ oldLinks.delete(oldName);
+ oldLinks.set(newName, node);
+ oldParent.mtimeMs = time;
+ newParent.mtimeMs = time;
+ }
+ };
+ FileSystem.prototype._getRootLinks = function () {
+ if (!this._lazy.links) {
+ this._lazy.links = new collections.SortedMap(this.stringComparer);
+ if (this._shadowRoot) {
+ this._copyShadowLinks(this._shadowRoot._getRootLinks(), this._lazy.links);
+ }
+ this._lazy.links = this._lazy.links;
+ }
+ return this._lazy.links;
+ };
+ FileSystem.prototype._getLinks = function (node) {
+ if (!node.links) {
+ var links = new collections.SortedMap(this.stringComparer);
+ var source = node.source, resolver = node.resolver;
+ if (source && resolver) {
+ node.source = undefined;
+ node.resolver = undefined;
+ for (var _i = 0, _a = resolver.readdirSync(source); _i < _a.length; _i++) {
+ var name = _a[_i];
+ var path = vpath.combine(source, name);
+ var stats = resolver.statSync(path);
+ switch (stats.mode & S_IFMT) {
+ case S_IFDIR:
+ var dir = this._mknod(node.dev, S_IFDIR, 511);
+ dir.source = vpath.combine(source, name);
+ dir.resolver = resolver;
+ this._addLink(node, links, name, dir);
+ break;
+ case S_IFREG:
+ var file = this._mknod(node.dev, S_IFREG, 438);
+ file.source = vpath.combine(source, name);
+ file.resolver = resolver;
+ file.size = stats.size;
+ this._addLink(node, links, name, file);
+ break;
+ }
+ }
+ }
+ else if (this._shadowRoot && node.shadowRoot) {
+ this._copyShadowLinks(this._shadowRoot._getLinks(node.shadowRoot), links);
+ }
+ node.links = links;
+ }
+ return node.links;
+ };
+ FileSystem.prototype._getShadow = function (root) {
+ var shadows = this._lazy.shadows || (this._lazy.shadows = new Map());
+ var shadow = shadows.get(root.ino);
+ if (!shadow) {
+ shadow = {
+ dev: root.dev,
+ ino: root.ino,
+ mode: root.mode,
+ atimeMs: root.atimeMs,
+ mtimeMs: root.mtimeMs,
+ ctimeMs: root.ctimeMs,
+ birthtimeMs: root.birthtimeMs,
+ nlink: root.nlink,
+ shadowRoot: root
+ };
+ if (isSymlink(root))
+ shadow.symlink = root.symlink;
+ shadows.set(shadow.ino, shadow);
+ }
+ return shadow;
+ };
+ FileSystem.prototype._copyShadowLinks = function (source, target) {
+ var iterator = collections.getIterator(source);
+ try {
+ for (var i = collections.nextResult(iterator); i; i = collections.nextResult(iterator)) {
+ var _a = i.value, name = _a[0], root = _a[1];
+ target.set(name, this._getShadow(root));
+ }
+ }
+ finally {
+ collections.closeIterator(iterator);
+ }
+ };
+ FileSystem.prototype._getSize = function (node) {
+ if (node.buffer)
+ return node.buffer.byteLength;
+ if (node.size !== undefined)
+ return node.size;
+ if (node.source && node.resolver)
+ return node.size = node.resolver.statSync(node.source).size;
+ if (this._shadowRoot && node.shadowRoot)
+ return node.size = this._shadowRoot._getSize(node.shadowRoot);
+ return 0;
+ };
+ FileSystem.prototype._getBuffer = function (node) {
+ if (!node.buffer) {
+ var source = node.source, resolver = node.resolver;
+ if (source && resolver) {
+ node.source = undefined;
+ node.resolver = undefined;
+ node.size = undefined;
+ node.buffer = resolver.readFileSync(source);
+ }
+ else if (this._shadowRoot && node.shadowRoot) {
+ node.buffer = this._shadowRoot._getBuffer(node.shadowRoot);
+ }
+ else {
+ node.buffer = Buffer.allocUnsafe(0);
+ }
+ }
+ return node.buffer;
+ };
+ FileSystem.prototype._walk = function (path, noFollow, onError) {
+ var links = this._getRootLinks();
+ var parent;
+ var components = vpath.parse(path);
+ var step = 0;
+ var depth = 0;
+ var retry = false;
+ while (true) {
+ if (depth >= 40)
+ throw createIOError("ELOOP");
+ var lastStep = step === components.length - 1;
+ var basename = components[step];
+ var node = links.get(basename);
+ if (lastStep && (noFollow || !isSymlink(node))) {
+ return { realpath: vpath.format(components), basename: basename, parent: parent, links: links, node: node };
+ }
+ if (node === undefined) {
+ if (trapError(createIOError("ENOENT"), node))
+ continue;
+ return undefined;
+ }
+ if (isSymlink(node)) {
+ var dirname = vpath.format(components.slice(0, step));
+ var symlink = vpath.resolve(dirname, node.symlink);
+ links = this._getRootLinks();
+ parent = undefined;
+ components = vpath.parse(symlink).concat(components.slice(step + 1));
+ step = 0;
+ depth++;
+ retry = false;
+ continue;
+ }
+ if (isDirectory(node)) {
+ links = this._getLinks(node);
+ parent = node;
+ step++;
+ retry = false;
+ continue;
+ }
+ if (trapError(createIOError("ENOTDIR"), node))
+ continue;
+ return undefined;
+ }
+ function trapError(error, node) {
+ var realpath = vpath.format(components.slice(0, step + 1));
+ var basename = components[step];
+ var result = !retry && onError ? onError(error, { realpath: realpath, basename: basename, parent: parent, links: links, node: node }) : "throw";
+ if (result === "stop")
+ return false;
+ if (result === "retry") {
+ retry = true;
+ return true;
+ }
+ throw error;
+ }
+ };
+ /**
+ * Resolve a path relative to the current working directory.
+ */
+ FileSystem.prototype._resolve = function (path) {
+ return this._cwd
+ ? vpath.resolve(this._cwd, vpath.validate(path, 2016 /* RelativeOrAbsolute */ | 2048 /* AllowWildcard */))
+ : vpath.validate(path, 2017 /* Absolute */ | 2048 /* AllowWildcard */);
+ };
+ FileSystem.prototype._applyFiles = function (files, dirname) {
+ var deferred = [];
+ this._applyFilesWorker(files, dirname, deferred);
+ for (var _i = 0, deferred_1 = deferred; _i < deferred_1.length; _i++) {
+ var _a = deferred_1[_i], entry = _a[0], path = _a[1];
+ this.mkdirpSync(vpath.dirname(path));
+ this.pushd(vpath.dirname(path));
+ if (entry instanceof Symlink) {
+ if (this.stringComparer(vpath.dirname(path), path) === 0) {
+ throw new TypeError("Roots cannot be symbolic links.");
+ }
+ this.symlinkSync(entry.symlink, path);
+ this._applyFileExtendedOptions(path, entry);
+ }
+ else if (entry instanceof Link) {
+ if (this.stringComparer(vpath.dirname(path), path) === 0) {
+ throw new TypeError("Roots cannot be hard links.");
+ }
+ this.linkSync(entry.path, path);
+ }
+ else {
+ this.mountSync(entry.source, path, entry.resolver);
+ this._applyFileExtendedOptions(path, entry);
+ }
+ this.popd();
+ }
+ };
+ FileSystem.prototype._applyFileExtendedOptions = function (path, entry) {
+ var meta = entry.meta;
+ if (meta !== undefined) {
+ var filemeta = this.filemeta(path);
+ for (var _i = 0, _a = Object.keys(meta); _i < _a.length; _i++) {
+ var key = _a[_i];
+ filemeta.set(key, meta[key]);
+ }
+ }
+ };
+ FileSystem.prototype._applyFilesWorker = function (files, dirname, deferred) {
+ for (var _i = 0, _a = Object.keys(files); _i < _a.length; _i++) {
+ var key = _a[_i];
+ var value = this._normalizeFileSetEntry(files[key]);
+ var path = dirname ? vpath.resolve(dirname, key) : key;
+ vpath.validate(path, 2017 /* Absolute */);
+ if (value === null || value === undefined) {
+ if (this.stringComparer(vpath.dirname(path), path) === 0) {
+ throw new TypeError("Roots cannot be deleted.");
+ }
+ this.rimrafSync(path);
+ }
+ else if (value instanceof File) {
+ if (this.stringComparer(vpath.dirname(path), path) === 0) {
+ throw new TypeError("Roots cannot be files.");
+ }
+ this.mkdirpSync(vpath.dirname(path));
+ this.writeFileSync(path, value.data, value.encoding);
+ this._applyFileExtendedOptions(path, value);
+ }
+ else if (value instanceof Directory) {
+ this.mkdirpSync(path);
+ this._applyFileExtendedOptions(path, value);
+ this._applyFilesWorker(value.files, path, deferred);
+ }
+ else {
+ deferred.push([value, path]);
+ }
+ }
+ };
+ FileSystem.prototype._normalizeFileSetEntry = function (value) {
+ if (value === undefined ||
+ value === null ||
+ value instanceof Directory ||
+ value instanceof File ||
+ value instanceof Link ||
+ value instanceof Symlink ||
+ value instanceof Mount) {
+ return value;
+ }
+ return typeof value === "string" || Buffer.isBuffer(value) ? new File(value) : new Directory(value);
+ };
+ return FileSystem;
+ }());
+ vfs.FileSystem = FileSystem;
+ function createResolver(host) {
+ return {
+ readdirSync: function (path) {
+ var _a = host.getAccessibleFileSystemEntries(path), files = _a.files, directories = _a.directories;
+ return directories.concat(files);
+ },
+ statSync: function (path) {
+ if (host.directoryExists(path)) {
+ return { mode: S_IFDIR | 511, size: 0 };
+ }
+ else if (host.fileExists(path)) {
+ return { mode: S_IFREG | 438, size: host.getFileSize(path) };
+ }
+ else {
+ throw new Error("ENOENT: path does not exist");
+ }
+ },
+ readFileSync: function (path) {
+ return Buffer.from(host.readFile(path), "utf8"); // TODO: GH#18217
+ }
+ };
+ }
+ vfs.createResolver = createResolver;
+ /**
+ * Create a virtual file system from a physical file system using the following path mappings:
+ *
+ * - `/.ts` is a directory mapped to `${workspaceRoot}/built/local`
+ * - `/.lib` is a directory mapped to `${workspaceRoot}/tests/lib`
+ * - `/.src` is a virtual directory to be used for tests.
+ *
+ * Unless overridden, `/.src` will be the current working directory for the virtual file system.
+ */
+ function createFromFileSystem(host, ignoreCase, _a) {
+ var _b = _a === void 0 ? {} : _a, documents = _b.documents, cwd = _b.cwd;
+ var fs = getBuiltLocal(host, ignoreCase).shadow();
+ if (cwd) {
+ fs.mkdirpSync(cwd);
+ fs.chdir(cwd);
+ }
+ if (documents) {
+ for (var _i = 0, documents_1 = documents; _i < documents_1.length; _i++) {
+ var document = documents_1[_i];
+ fs.mkdirpSync(vpath.dirname(document.file));
+ fs.writeFileSync(document.file, document.text, "utf8");
+ fs.filemeta(document.file).set("document", document);
+ // Add symlinks
+ var symlink = document.meta.get("symlink");
+ if (symlink) {
+ for (var _c = 0, _d = symlink.split(",").map(function (link) { return link.trim(); }); _c < _d.length; _c++) {
+ var link = _d[_c];
+ fs.mkdirpSync(vpath.dirname(link));
+ fs.symlinkSync(document.file, link);
+ fs.filemeta(link).set("document", document);
+ }
+ }
+ }
+ }
+ return fs;
+ }
+ vfs.createFromFileSystem = createFromFileSystem;
+ var Stats = /** @class */ (function () {
+ function Stats(dev, ino, mode, nlink, rdev, size, blksize, blocks, atimeMs, mtimeMs, ctimeMs, birthtimeMs) {
+ if (dev === void 0) { dev = 0; }
+ if (ino === void 0) { ino = 0; }
+ if (mode === void 0) { mode = 0; }
+ if (nlink === void 0) { nlink = 0; }
+ if (rdev === void 0) { rdev = 0; }
+ if (size === void 0) { size = 0; }
+ if (blksize === void 0) { blksize = 0; }
+ if (blocks === void 0) { blocks = 0; }
+ if (atimeMs === void 0) { atimeMs = 0; }
+ if (mtimeMs === void 0) { mtimeMs = 0; }
+ if (ctimeMs === void 0) { ctimeMs = 0; }
+ if (birthtimeMs === void 0) { birthtimeMs = 0; }
+ this.dev = dev;
+ this.ino = ino;
+ this.mode = mode;
+ this.nlink = nlink;
+ this.uid = 0;
+ this.gid = 0;
+ this.rdev = rdev;
+ this.size = size;
+ this.blksize = blksize;
+ this.blocks = blocks;
+ this.atimeMs = atimeMs;
+ this.mtimeMs = mtimeMs;
+ this.ctimeMs = ctimeMs;
+ this.birthtimeMs = birthtimeMs;
+ this.atime = new Date(this.atimeMs);
+ this.mtime = new Date(this.mtimeMs);
+ this.ctime = new Date(this.ctimeMs);
+ this.birthtime = new Date(this.birthtimeMs);
+ }
+ Stats.prototype.isFile = function () { return (this.mode & S_IFMT) === S_IFREG; };
+ Stats.prototype.isDirectory = function () { return (this.mode & S_IFMT) === S_IFDIR; };
+ Stats.prototype.isSymbolicLink = function () { return (this.mode & S_IFMT) === S_IFLNK; };
+ Stats.prototype.isBlockDevice = function () { return (this.mode & S_IFMT) === S_IFBLK; };
+ Stats.prototype.isCharacterDevice = function () { return (this.mode & S_IFMT) === S_IFCHR; };
+ Stats.prototype.isFIFO = function () { return (this.mode & S_IFMT) === S_IFIFO; };
+ Stats.prototype.isSocket = function () { return (this.mode & S_IFMT) === S_IFSOCK; };
+ return Stats;
+ }());
+ vfs.Stats = Stats;
+ // tslint:disable-next-line:variable-name
+ vfs.IOErrorMessages = Object.freeze({
+ EACCES: "access denied",
+ EIO: "an I/O error occurred",
+ ENOENT: "no such file or directory",
+ EEXIST: "file already exists",
+ ELOOP: "too many symbolic links encountered",
+ ENOTDIR: "no such directory",
+ EISDIR: "path is a directory",
+ EBADF: "invalid file descriptor",
+ EINVAL: "invalid value",
+ ENOTEMPTY: "directory not empty",
+ EPERM: "operation not permitted",
+ EROFS: "file system is read-only"
+ });
+ function createIOError(code, details) {
+ if (details === void 0) { details = ""; }
+ var err = new Error(code + ": " + vfs.IOErrorMessages[code] + " " + details);
+ err.code = code;
+ if (Error.captureStackTrace)
+ Error.captureStackTrace(err, createIOError);
+ return err;
+ }
+ vfs.createIOError = createIOError;
+ /** Extended options for a directory in a `FileSet` */
+ var Directory = /** @class */ (function () {
+ function Directory(files, _a) {
+ var meta = (_a === void 0 ? {} : _a).meta;
+ this.files = files;
+ this.meta = meta;
+ }
+ return Directory;
+ }());
+ vfs.Directory = Directory;
+ /** Extended options for a file in a `FileSet` */
+ var File = /** @class */ (function () {
+ function File(data, _a) {
+ var _b = _a === void 0 ? {} : _a, meta = _b.meta, encoding = _b.encoding;
+ this.data = data;
+ this.encoding = encoding;
+ this.meta = meta;
+ }
+ return File;
+ }());
+ vfs.File = File;
+ /** Extended options for a hard link in a `FileSet` */
+ var Link = /** @class */ (function () {
+ function Link(path) {
+ this.path = path;
+ }
+ return Link;
+ }());
+ vfs.Link = Link;
+ /** Extended options for a symbolic link in a `FileSet` */
+ var Symlink = /** @class */ (function () {
+ function Symlink(symlink, _a) {
+ var meta = (_a === void 0 ? {} : _a).meta;
+ this.symlink = symlink;
+ this.meta = meta;
+ }
+ return Symlink;
+ }());
+ vfs.Symlink = Symlink;
+ /** Extended options for mounting a virtual copy of an external file system via a `FileSet` */
+ var Mount = /** @class */ (function () {
+ function Mount(source, resolver, _a) {
+ var meta = (_a === void 0 ? {} : _a).meta;
+ this.source = source;
+ this.resolver = resolver;
+ this.meta = meta;
+ }
+ return Mount;
+ }());
+ vfs.Mount = Mount;
+ function isFile(node) {
+ return node !== undefined && (node.mode & S_IFMT) === S_IFREG;
+ }
+ function isDirectory(node) {
+ return node !== undefined && (node.mode & S_IFMT) === S_IFDIR;
+ }
+ function isSymlink(node) {
+ return node !== undefined && (node.mode & S_IFMT) === S_IFLNK;
+ }
+ var builtLocalHost;
+ var builtLocalCI;
+ var builtLocalCS;
+ function getBuiltLocal(host, ignoreCase) {
+ var _a;
+ if (builtLocalHost !== host) {
+ builtLocalCI = undefined;
+ builtLocalCS = undefined;
+ builtLocalHost = host;
+ }
+ if (!builtLocalCI) {
+ var resolver = createResolver(host);
+ builtLocalCI = new FileSystem(/*ignoreCase*/ true, {
+ files: (_a = {},
+ _a[vfs.builtFolder] = new Mount(vpath.resolve(host.getWorkspaceRoot(), "built/local"), resolver),
+ _a[vfs.testLibFolder] = new Mount(vpath.resolve(host.getWorkspaceRoot(), "tests/lib"), resolver),
+ _a[vfs.projectsFolder] = new Mount(vpath.resolve(host.getWorkspaceRoot(), "tests/projects"), resolver),
+ _a[vfs.srcFolder] = {},
+ _a),
+ cwd: vfs.srcFolder,
+ meta: { defaultLibLocation: vfs.builtFolder }
+ });
+ builtLocalCI.makeReadonly();
+ }
+ if (ignoreCase)
+ return builtLocalCI;
+ if (!builtLocalCS) {
+ builtLocalCS = builtLocalCI.shadow(/*ignoreCase*/ false);
+ builtLocalCS.makeReadonly();
+ }
+ return builtLocalCS;
+ }
+})(vfs || (vfs = {}));
+// tslint:enable:no-null-keyword
+/**
+ * Test harness compiler functionality.
+ */
+var compiler;
+(function (compiler) {
+ function readProject(host, project, existingOptions) {
+ if (project) {
+ project = vpath.isTsConfigFile(project) ? project : vpath.combine(project, "tsconfig.json");
+ }
+ else {
+ project = host.vfs.scanSync(".", "ancestors-or-self", {
+ accept: function (path, stats) { return stats.isFile() && host.vfs.stringComparer(vpath.basename(path), "tsconfig.json") === 0; }
+ })[0];
+ }
+ if (project) {
+ // TODO(rbuckton): Do we need to resolve this? Resolving breaks projects tests.
+ // project = vpath.resolve(host.vfs.currentDirectory, project);
+ // read the config file
+ var readResult = ts.readConfigFile(project, function (path) { return host.readFile(path); });
+ if (readResult.error) {
+ return { file: project, errors: [readResult.error] };
+ }
+ // parse the config file
+ var config = ts.parseJsonConfigFileContent(readResult.config, host, vpath.dirname(project), existingOptions);
+ return { file: project, errors: config.errors, config: config };
+ }
+ }
+ compiler.readProject = readProject;
+ var CompilationResult = /** @class */ (function () {
+ function CompilationResult(host, options, program, result, diagnostics) {
+ this._inputs = [];
+ this.host = host;
+ this.program = program;
+ this.result = result;
+ this.diagnostics = diagnostics;
+ this.options = program ? program.getCompilerOptions() : options;
+ // collect outputs
+ var js = this.js = new collections.SortedMap({ comparer: this.vfs.stringComparer, sort: "insertion" });
+ var dts = this.dts = new collections.SortedMap({ comparer: this.vfs.stringComparer, sort: "insertion" });
+ var maps = this.maps = new collections.SortedMap({ comparer: this.vfs.stringComparer, sort: "insertion" });
+ for (var _i = 0, _a = this.host.outputs; _i < _a.length; _i++) {
+ var document = _a[_i];
+ if (vpath.isJavaScript(document.file) || ts.fileExtensionIs(document.file, ".json" /* Json */)) {
+ js.set(document.file, document);
+ }
+ else if (vpath.isDeclaration(document.file)) {
+ dts.set(document.file, document);
+ }
+ else if (vpath.isSourceMap(document.file)) {
+ maps.set(document.file, document);
+ }
+ }
+ // correlate inputs and outputs
+ this._inputsAndOutputs = new collections.SortedMap({ comparer: this.vfs.stringComparer, sort: "insertion" });
+ if (program) {
+ if (this.options.out || this.options.outFile) {
+ var outFile = vpath.resolve(this.vfs.cwd(), this.options.outFile || this.options.out);
+ var inputs = [];
+ for (var _b = 0, _c = program.getSourceFiles(); _b < _c.length; _b++) {
+ var sourceFile = _c[_b];
+ if (sourceFile) {
+ var input = new documents.TextDocument(sourceFile.fileName, sourceFile.text);
+ this._inputs.push(input);
+ if (!vpath.isDeclaration(sourceFile.fileName)) {
+ inputs.push(input);
+ }
+ }
+ }
+ var outputs = {
+ inputs: inputs,
+ js: js.get(outFile),
+ dts: dts.get(vpath.changeExtension(outFile, ".d.ts")),
+ map: maps.get(outFile + ".map")
+ };
+ if (outputs.js)
+ this._inputsAndOutputs.set(outputs.js.file, outputs);
+ if (outputs.dts)
+ this._inputsAndOutputs.set(outputs.dts.file, outputs);
+ if (outputs.map)
+ this._inputsAndOutputs.set(outputs.map.file, outputs);
+ for (var _d = 0, inputs_1 = inputs; _d < inputs_1.length; _d++) {
+ var input = inputs_1[_d];
+ this._inputsAndOutputs.set(input.file, outputs);
+ }
+ }
+ else {
+ for (var _e = 0, _f = program.getSourceFiles(); _e < _f.length; _e++) {
+ var sourceFile = _f[_e];
+ if (sourceFile) {
+ var input = new documents.TextDocument(sourceFile.fileName, sourceFile.text);
+ this._inputs.push(input);
+ if (!vpath.isDeclaration(sourceFile.fileName)) {
+ var extname = ts.getOutputExtension(sourceFile, this.options);
+ var outputs = {
+ inputs: [input],
+ js: js.get(this.getOutputPath(sourceFile.fileName, extname)),
+ dts: dts.get(this.getOutputPath(sourceFile.fileName, ".d.ts")),
+ map: maps.get(this.getOutputPath(sourceFile.fileName, extname + ".map"))
+ };
+ this._inputsAndOutputs.set(sourceFile.fileName, outputs);
+ if (outputs.js)
+ this._inputsAndOutputs.set(outputs.js.file, outputs);
+ if (outputs.dts)
+ this._inputsAndOutputs.set(outputs.dts.file, outputs);
+ if (outputs.map)
+ this._inputsAndOutputs.set(outputs.map.file, outputs);
+ }
+ }
+ }
+ }
+ }
+ this.diagnostics = diagnostics;
+ }
+ Object.defineProperty(CompilationResult.prototype, "vfs", {
+ get: function () {
+ return this.host.vfs;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ Object.defineProperty(CompilationResult.prototype, "inputs", {
+ get: function () {
+ return this._inputs;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ Object.defineProperty(CompilationResult.prototype, "outputs", {
+ get: function () {
+ return this.host.outputs;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ Object.defineProperty(CompilationResult.prototype, "traces", {
+ get: function () {
+ return this.host.traces;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ Object.defineProperty(CompilationResult.prototype, "emitSkipped", {
+ get: function () {
+ return this.result && this.result.emitSkipped || false;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ Object.defineProperty(CompilationResult.prototype, "singleFile", {
+ get: function () {
+ return !!this.options.outFile || !!this.options.out;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ Object.defineProperty(CompilationResult.prototype, "commonSourceDirectory", {
+ get: function () {
+ var common = this.program && this.program.getCommonSourceDirectory() || "";
+ return common && vpath.combine(this.vfs.cwd(), common);
+ },
+ enumerable: true,
+ configurable: true
+ });
+ CompilationResult.prototype.getInputsAndOutputs = function (path) {
+ return this._inputsAndOutputs.get(vpath.resolve(this.vfs.cwd(), path));
+ };
+ CompilationResult.prototype.getInputs = function (path) {
+ var outputs = this.getInputsAndOutputs(path);
+ return outputs && outputs.inputs;
+ };
+ CompilationResult.prototype.getOutput = function (path, kind) {
+ var outputs = this.getInputsAndOutputs(path);
+ return outputs && outputs[kind];
+ };
+ CompilationResult.prototype.getSourceMapRecord = function () {
+ if (this.result.sourceMaps && this.result.sourceMaps.length > 0) {
+ return Harness.SourceMapRecorder.getSourceMapRecord(this.result.sourceMaps, this.program, Array.from(this.js.values()).filter(function (d) { return !ts.fileExtensionIs(d.file, ".json" /* Json */); }), Array.from(this.dts.values()));
+ }
+ };
+ CompilationResult.prototype.getSourceMap = function (path) {
+ if (this.options.noEmit || vpath.isDeclaration(path))
+ return undefined;
+ if (this.options.inlineSourceMap) {
+ var document = this.getOutput(path, "js");
+ return document && documents.SourceMap.fromSource(document.text);
+ }
+ if (this.options.sourceMap) {
+ var document = this.getOutput(path, "map");
+ return document && new documents.SourceMap(document.file, document.text);
+ }
+ };
+ CompilationResult.prototype.getOutputPath = function (path, ext) {
+ if (this.options.outFile || this.options.out) {
+ path = vpath.resolve(this.vfs.cwd(), this.options.outFile || this.options.out);
+ }
+ else {
+ path = vpath.resolve(this.vfs.cwd(), path);
+ var outDir = ext === ".d.ts" ? this.options.declarationDir || this.options.outDir : this.options.outDir;
+ if (outDir) {
+ var common = this.commonSourceDirectory;
+ if (common) {
+ path = vpath.relative(common, path, this.vfs.ignoreCase);
+ path = vpath.combine(vpath.resolve(this.vfs.cwd(), this.options.outDir), path);
+ }
+ }
+ }
+ return vpath.changeExtension(path, ext);
+ };
+ CompilationResult.prototype.getNumberOfJsFiles = function () {
+ var count = this.js.size;
+ this.js.forEach(function (document) {
+ if (ts.fileExtensionIs(document.file, ".json" /* Json */)) {
+ count--;
+ }
+ });
+ return count;
+ };
+ return CompilationResult;
+ }());
+ compiler.CompilationResult = CompilationResult;
+ function compileFiles(host, rootFiles, compilerOptions) {
+ if (compilerOptions.project || !rootFiles || rootFiles.length === 0) {
+ var project = readProject(host.parseConfigHost, compilerOptions.project, compilerOptions);
+ if (project) {
+ if (project.errors && project.errors.length > 0) {
+ return new CompilationResult(host, compilerOptions, /*program*/ undefined, /*result*/ undefined, project.errors);
+ }
+ if (project.config) {
+ rootFiles = project.config.fileNames;
+ compilerOptions = project.config.options;
+ }
+ }
+ delete compilerOptions.project;
+ }
+ // establish defaults (aligns with old harness)
+ if (compilerOptions.target === undefined)
+ compilerOptions.target = 0 /* ES3 */;
+ if (compilerOptions.newLine === undefined)
+ compilerOptions.newLine = 0 /* CarriageReturnLineFeed */;
+ if (compilerOptions.skipDefaultLibCheck === undefined)
+ compilerOptions.skipDefaultLibCheck = true;
+ if (compilerOptions.noErrorTruncation === undefined)
+ compilerOptions.noErrorTruncation = true;
+ var program = ts.createProgram(rootFiles || [], compilerOptions, host);
+ var emitResult = program.emit();
+ var errors = ts.getPreEmitDiagnostics(program);
+ return new CompilationResult(host, compilerOptions, program, emitResult, errors);
+ }
+ compiler.compileFiles = compileFiles;
+})(compiler || (compiler = {}));
+var evaluator;
+(function (evaluator) {
+ var sourceFile = vpath.combine(vfs.srcFolder, "source.ts");
+ function compile(sourceText, options) {
+ var fs = vfs.createFromFileSystem(Harness.IO, /*ignoreCase*/ false);
+ fs.writeFileSync(sourceFile, sourceText);
+ var compilerOptions = __assign({ target: 1 /* ES5 */, module: ts.ModuleKind.CommonJS, lib: ["lib.esnext.d.ts", "lib.dom.d.ts"] }, options);
+ var host = new fakes.CompilerHost(fs, compilerOptions);
+ return compiler.compileFiles(host, [sourceFile], compilerOptions);
+ }
+ function noRequire(id) {
+ throw new Error("Module '" + id + "' could not be found.");
+ }
+ // Define a custom "Symbol" constructor to attach missing built-in symbols without
+ // modifying the global "Symbol" constructor
+ // tslint:disable-next-line:variable-name
+ var FakeSymbol = (function (description) { return Symbol(description); });
+ FakeSymbol.prototype = Symbol.prototype;
+ for (var _i = 0, _a = Object.getOwnPropertyNames(Symbol); _i < _a.length; _i++) {
+ var key = _a[_i];
+ Object.defineProperty(FakeSymbol, key, Object.getOwnPropertyDescriptor(Symbol, key));
+ }
+ // Add "asyncIterator" if missing
+ if (!ts.hasProperty(FakeSymbol, "asyncIterator"))
+ Object.defineProperty(FakeSymbol, "asyncIterator", { value: Symbol.for("Symbol.asyncIterator"), configurable: true });
+ function evaluate(result, globals) {
+ globals = __assign({ Symbol: FakeSymbol }, globals);
+ if (ts.some(result.diagnostics)) {
+ assert.ok(/*value*/ false, "Syntax error in evaluation source text:\n" + ts.formatDiagnostics(result.diagnostics, {
+ getCanonicalFileName: function (file) { return file; },
+ getCurrentDirectory: function () { return ""; },
+ getNewLine: function () { return "\n"; }
+ }));
+ }
+ var output = result.getOutput(sourceFile, "js");
+ assert.isDefined(output);
+ var globalNames = [];
+ var globalArgs = [];
+ for (var name in globals) {
+ if (ts.hasProperty(globals, name)) {
+ globalNames.push(name);
+ globalArgs.push(globals[name]);
+ }
+ }
+ var evaluateText = "(function (module, exports, require, __dirname, __filename, " + globalNames.join(", ") + ") { " + output.text + " })";
+ var evaluateThunk = eval(evaluateText);
+ var module = { exports: {} };
+ evaluateThunk.call.apply(evaluateThunk, [globals, module, module.exports, noRequire, vpath.dirname(output.file), output.file, FakeSymbol].concat(globalArgs));
+ return module.exports;
+ }
+ function evaluateTypeScript(sourceText, options, globals) {
+ return evaluate(compile(sourceText, options), globals);
+ }
+ evaluator.evaluateTypeScript = evaluateTypeScript;
+})(evaluator || (evaluator = {}));
+/**
+ * Fake implementations of various compiler dependencies.
+ */
+var fakes;
+(function (fakes) {
+ var processExitSentinel = new Error("System exit");
+ /**
+ * A fake `ts.System` that leverages a virtual file system.
+ */
+ var System = /** @class */ (function () {
+ function System(vfs, _a) {
+ var _b = _a === void 0 ? {} : _a, executingFilePath = _b.executingFilePath, _c = _b.newLine, newLine = _c === void 0 ? "\r\n" : _c, env = _b.env;
+ this.args = [];
+ this.output = [];
+ this.vfs = vfs.isReadonly ? vfs.shadow() : vfs;
+ this.useCaseSensitiveFileNames = !this.vfs.ignoreCase;
+ this.newLine = newLine;
+ this._executingFilePath = executingFilePath;
+ this._env = env;
+ }
+ System.prototype.write = function (message) {
+ this.output.push(message);
+ };
+ System.prototype.readFile = function (path) {
+ try {
+ var content = this.vfs.readFileSync(path, "utf8");
+ return content === undefined ? undefined : utils.removeByteOrderMark(content);
+ }
+ catch (_a) {
+ return undefined;
+ }
+ };
+ System.prototype.writeFile = function (path, data, writeByteOrderMark) {
+ this.vfs.mkdirpSync(vpath.dirname(path));
+ this.vfs.writeFileSync(path, writeByteOrderMark ? utils.addUTF8ByteOrderMark(data) : data);
+ };
+ System.prototype.deleteFile = function (path) {
+ this.vfs.unlinkSync(path);
+ };
+ System.prototype.fileExists = function (path) {
+ var stats = this._getStats(path);
+ return stats ? stats.isFile() : false;
+ };
+ System.prototype.directoryExists = function (path) {
+ var stats = this._getStats(path);
+ return stats ? stats.isDirectory() : false;
+ };
+ System.prototype.createDirectory = function (path) {
+ this.vfs.mkdirpSync(path);
+ };
+ System.prototype.getCurrentDirectory = function () {
+ return this.vfs.cwd();
+ };
+ System.prototype.getDirectories = function (path) {
+ var result = [];
+ try {
+ for (var _i = 0, _a = this.vfs.readdirSync(path); _i < _a.length; _i++) {
+ var file = _a[_i];
+ if (this.vfs.statSync(vpath.combine(path, file)).isDirectory()) {
+ result.push(file);
+ }
+ }
+ }
+ catch ( /*ignore*/_b) { /*ignore*/ }
+ return result;
+ };
+ System.prototype.readDirectory = function (path, extensions, exclude, include, depth) {
+ var _this = this;
+ return ts.matchFiles(path, extensions, exclude, include, this.useCaseSensitiveFileNames, this.getCurrentDirectory(), depth, function (path) { return _this.getAccessibleFileSystemEntries(path); });
+ };
+ System.prototype.getAccessibleFileSystemEntries = function (path) {
+ var files = [];
+ var directories = [];
+ try {
+ for (var _i = 0, _a = this.vfs.readdirSync(path); _i < _a.length; _i++) {
+ var file = _a[_i];
+ try {
+ var stats = this.vfs.statSync(vpath.combine(path, file));
+ if (stats.isFile()) {
+ files.push(file);
+ }
+ else if (stats.isDirectory()) {
+ directories.push(file);
+ }
+ }
+ catch ( /*ignored*/_b) { /*ignored*/ }
+ }
+ }
+ catch ( /*ignored*/_c) { /*ignored*/ }
+ return { files: files, directories: directories };
+ };
+ System.prototype.exit = function (exitCode) {
+ this.exitCode = exitCode;
+ throw processExitSentinel;
+ };
+ System.prototype.getFileSize = function (path) {
+ var stats = this._getStats(path);
+ return stats && stats.isFile() ? stats.size : 0;
+ };
+ System.prototype.resolvePath = function (path) {
+ return vpath.resolve(this.vfs.cwd(), path);
+ };
+ System.prototype.getExecutingFilePath = function () {
+ if (this._executingFilePath === undefined)
+ return ts.notImplemented();
+ return this._executingFilePath;
+ };
+ System.prototype.getModifiedTime = function (path) {
+ var stats = this._getStats(path);
+ return stats ? stats.mtime : undefined; // TODO: GH#18217
+ };
+ System.prototype.setModifiedTime = function (path, time) {
+ this.vfs.utimesSync(path, time, time);
+ };
+ System.prototype.createHash = function (data) {
+ return data;
+ };
+ System.prototype.realpath = function (path) {
+ try {
+ return this.vfs.realpathSync(path);
+ }
+ catch (_a) {
+ return path;
+ }
+ };
+ System.prototype.getEnvironmentVariable = function (name) {
+ return (this._env && this._env[name]); // TODO: GH#18217
+ };
+ System.prototype._getStats = function (path) {
+ try {
+ return this.vfs.existsSync(path) ? this.vfs.statSync(path) : undefined;
+ }
+ catch (_a) {
+ return undefined;
+ }
+ };
+ return System;
+ }());
+ fakes.System = System;
+ /**
+ * A fake `ts.ParseConfigHost` that leverages a virtual file system.
+ */
+ var ParseConfigHost = /** @class */ (function () {
+ function ParseConfigHost(sys) {
+ if (sys instanceof vfs.FileSystem)
+ sys = new System(sys);
+ this.sys = sys;
+ }
+ Object.defineProperty(ParseConfigHost.prototype, "vfs", {
+ get: function () {
+ return this.sys.vfs;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ Object.defineProperty(ParseConfigHost.prototype, "useCaseSensitiveFileNames", {
+ get: function () {
+ return this.sys.useCaseSensitiveFileNames;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ ParseConfigHost.prototype.fileExists = function (fileName) {
+ return this.sys.fileExists(fileName);
+ };
+ ParseConfigHost.prototype.directoryExists = function (directoryName) {
+ return this.sys.directoryExists(directoryName);
+ };
+ ParseConfigHost.prototype.readFile = function (path) {
+ return this.sys.readFile(path);
+ };
+ ParseConfigHost.prototype.readDirectory = function (path, extensions, excludes, includes, depth) {
+ return this.sys.readDirectory(path, extensions, excludes, includes, depth);
+ };
+ return ParseConfigHost;
+ }());
+ fakes.ParseConfigHost = ParseConfigHost;
+ /**
+ * A fake `ts.CompilerHost` that leverages a virtual file system.
+ */
+ var CompilerHost = /** @class */ (function () {
+ function CompilerHost(sys, options, setParentNodes) {
+ if (options === void 0) { options = ts.getDefaultCompilerOptions(); }
+ if (setParentNodes === void 0) { setParentNodes = false; }
+ var _this = this;
+ this.outputs = [];
+ this.traces = [];
+ this.shouldAssertInvariants = !Harness.lightMode;
+ if (sys instanceof vfs.FileSystem)
+ sys = new System(sys);
+ this.sys = sys;
+ this.defaultLibLocation = sys.vfs.meta.get("defaultLibLocation") || "";
+ this._newLine = ts.getNewLineCharacter(options, function () { return _this.sys.newLine; });
+ this._sourceFiles = new collections.SortedMap({ comparer: sys.vfs.stringComparer, sort: "insertion" });
+ this._setParentNodes = setParentNodes;
+ this._outputsMap = new collections.SortedMap(this.vfs.stringComparer);
+ }
+ Object.defineProperty(CompilerHost.prototype, "vfs", {
+ get: function () {
+ return this.sys.vfs;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ Object.defineProperty(CompilerHost.prototype, "parseConfigHost", {
+ get: function () {
+ return this._parseConfigHost || (this._parseConfigHost = new ParseConfigHost(this.sys));
+ },
+ enumerable: true,
+ configurable: true
+ });
+ CompilerHost.prototype.getCurrentDirectory = function () {
+ return this.sys.getCurrentDirectory();
+ };
+ CompilerHost.prototype.useCaseSensitiveFileNames = function () {
+ return this.sys.useCaseSensitiveFileNames;
+ };
+ CompilerHost.prototype.getNewLine = function () {
+ return this._newLine;
+ };
+ CompilerHost.prototype.getCanonicalFileName = function (fileName) {
+ return this.sys.useCaseSensitiveFileNames ? fileName : fileName.toLowerCase();
+ };
+ CompilerHost.prototype.deleteFile = function (fileName) {
+ this.sys.deleteFile(fileName);
+ };
+ CompilerHost.prototype.fileExists = function (fileName) {
+ return this.sys.fileExists(fileName);
+ };
+ CompilerHost.prototype.directoryExists = function (directoryName) {
+ return this.sys.directoryExists(directoryName);
+ };
+ CompilerHost.prototype.getModifiedTime = function (fileName) {
+ return this.sys.getModifiedTime(fileName);
+ };
+ CompilerHost.prototype.setModifiedTime = function (fileName, time) {
+ return this.sys.setModifiedTime(fileName, time);
+ };
+ CompilerHost.prototype.getDirectories = function (path) {
+ return this.sys.getDirectories(path);
+ };
+ CompilerHost.prototype.readDirectory = function (path, extensions, exclude, include, depth) {
+ return this.sys.readDirectory(path, extensions, exclude, include, depth);
+ };
+ CompilerHost.prototype.readFile = function (path) {
+ return this.sys.readFile(path);
+ };
+ CompilerHost.prototype.writeFile = function (fileName, content, writeByteOrderMark) {
+ if (writeByteOrderMark)
+ content = utils.addUTF8ByteOrderMark(content);
+ this.sys.writeFile(fileName, content);
+ var document = new documents.TextDocument(fileName, content);
+ document.meta.set("fileName", fileName);
+ this.vfs.filemeta(fileName).set("document", document);
+ if (!this._outputsMap.has(document.file)) {
+ this._outputsMap.set(document.file, this.outputs.length);
+ this.outputs.push(document);
+ }
+ this.outputs[this._outputsMap.get(document.file)] = document;
+ };
+ CompilerHost.prototype.trace = function (s) {
+ this.traces.push(s);
+ };
+ CompilerHost.prototype.realpath = function (path) {
+ return this.sys.realpath(path);
+ };
+ CompilerHost.prototype.getDefaultLibLocation = function () {
+ return vpath.resolve(this.getCurrentDirectory(), this.defaultLibLocation);
+ };
+ CompilerHost.prototype.getDefaultLibFileName = function (options) {
+ return vpath.resolve(this.getDefaultLibLocation(), ts.getDefaultLibFileName(options));
+ };
+ CompilerHost.prototype.getSourceFile = function (fileName, languageVersion) {
+ var canonicalFileName = this.getCanonicalFileName(vpath.resolve(this.getCurrentDirectory(), fileName));
+ var existing = this._sourceFiles.get(canonicalFileName);
+ if (existing)
+ return existing;
+ var content = this.readFile(canonicalFileName);
+ if (content === undefined)
+ return undefined;
+ // A virtual file system may shadow another existing virtual file system. This
+ // allows us to reuse a common virtual file system structure across multiple
+ // tests. If a virtual file is a shadow, it is likely that the file will be
+ // reused across multiple tests. In that case, we cache the SourceFile we parse
+ // so that it can be reused across multiple tests to avoid the cost of
+ // repeatedly parsing the same file over and over (such as lib.d.ts).
+ var cacheKey = this.vfs.shadowRoot && "SourceFile[languageVersion=" + languageVersion + ",setParentNodes=" + this._setParentNodes + "]";
+ if (cacheKey) {
+ var meta = this.vfs.filemeta(canonicalFileName);
+ var sourceFileFromMetadata = meta.get(cacheKey);
+ if (sourceFileFromMetadata && sourceFileFromMetadata.getFullText() === content) {
+ this._sourceFiles.set(canonicalFileName, sourceFileFromMetadata);
+ return sourceFileFromMetadata;
+ }
+ }
+ var parsed = ts.createSourceFile(fileName, content, languageVersion, this._setParentNodes || this.shouldAssertInvariants);
+ if (this.shouldAssertInvariants) {
+ Utils.assertInvariants(parsed, /*parent*/ undefined);
+ }
+ this._sourceFiles.set(canonicalFileName, parsed);
+ if (cacheKey) {
+ // store the cached source file on the unshadowed file with the same version.
+ var stats = this.vfs.statSync(canonicalFileName);
+ var fs = this.vfs;
+ while (fs.shadowRoot) {
+ try {
+ var shadowRootStats = fs.shadowRoot.existsSync(canonicalFileName) ? fs.shadowRoot.statSync(canonicalFileName) : undefined; // TODO: GH#18217
+ if (shadowRootStats.dev !== stats.dev ||
+ shadowRootStats.ino !== stats.ino ||
+ shadowRootStats.mtimeMs !== stats.mtimeMs) {
+ break;
+ }
+ fs = fs.shadowRoot;
+ }
+ catch (_a) {
+ break;
+ }
+ }
+ if (fs !== this.vfs) {
+ fs.filemeta(canonicalFileName).set(cacheKey, parsed);
+ }
+ }
+ return parsed;
+ };
+ return CompilerHost;
+ }());
+ fakes.CompilerHost = CompilerHost;
+})(fakes || (fakes = {}));
+var ts;
+(function (ts) {
+ var server;
+ (function (server) {
+ /* @internal */
+ function extractMessage(message) {
+ // Read the content length
+ var contentLengthPrefix = "Content-Length: ";
+ var lines = message.split(/\r?\n/);
+ ts.Debug.assert(lines.length >= 2, "Malformed response: Expected 3 lines in the response.");
+ var contentLengthText = lines[0];
+ ts.Debug.assert(contentLengthText.indexOf(contentLengthPrefix) === 0, "Malformed response: Response text did not contain content-length header.");
+ var contentLength = parseInt(contentLengthText.substring(contentLengthPrefix.length));
+ // Read the body
+ var responseBody = lines[2];
+ // Verify content length
+ ts.Debug.assert(responseBody.length + 1 === contentLength, "Malformed response: Content length did not match the response's body length.");
+ return responseBody;
+ }
+ server.extractMessage = extractMessage;
+ var SessionClient = /** @class */ (function () {
+ function SessionClient(host) {
+ this.host = host;
+ this.sequence = 0;
+ this.lineMaps = ts.createMap();
+ this.messages = [];
+ this.getCombinedCodeFix = ts.notImplemented;
+ this.applyCodeActionCommand = ts.notImplemented;
+ }
+ SessionClient.prototype.onMessage = function (message) {
+ this.messages.push(message);
+ };
+ SessionClient.prototype.writeMessage = function (message) {
+ this.host.writeMessage(message);
+ };
+ SessionClient.prototype.getLineMap = function (fileName) {
+ var lineMap = this.lineMaps.get(fileName);
+ if (!lineMap) {
+ lineMap = ts.computeLineStarts(ts.getSnapshotText(this.host.getScriptSnapshot(fileName)));
+ this.lineMaps.set(fileName, lineMap);
+ }
+ return lineMap;
+ };
+ SessionClient.prototype.lineOffsetToPosition = function (fileName, lineOffset, lineMap) {
+ lineMap = lineMap || this.getLineMap(fileName);
+ return ts.computePositionOfLineAndCharacter(lineMap, lineOffset.line - 1, lineOffset.offset - 1);
+ };
+ SessionClient.prototype.positionToOneBasedLineOffset = function (fileName, position) {
+ var lineOffset = ts.computeLineAndCharacterOfPosition(this.getLineMap(fileName), position);
+ return {
+ line: lineOffset.line + 1,
+ offset: lineOffset.character + 1
+ };
+ };
+ SessionClient.prototype.convertCodeEditsToTextChange = function (fileName, codeEdit) {
+ return { span: this.decodeSpan(codeEdit, fileName), newText: codeEdit.newText };
+ };
+ SessionClient.prototype.processRequest = function (command, args) {
+ var request = {
+ seq: this.sequence,
+ type: "request",
+ arguments: args,
+ command: command
+ };
+ this.sequence++;
+ this.writeMessage(JSON.stringify(request));
+ return request;
+ };
+ SessionClient.prototype.processResponse = function (request) {
+ var foundResponseMessage = false;
+ var response;
+ while (!foundResponseMessage) {
+ var lastMessage = this.messages.shift();
+ ts.Debug.assert(!!lastMessage, "Did not receive any responses.");
+ var responseBody = extractMessage(lastMessage);
+ try {
+ response = JSON.parse(responseBody);
+ // the server may emit events before emitting the response. We
+ // want to ignore these events for testing purpose.
+ if (response.type === "response") {
+ foundResponseMessage = true;
+ }
+ }
+ catch (e) {
+ throw new Error("Malformed response: Failed to parse server response: " + lastMessage + ". \r\n Error details: " + e.message);
+ }
+ }
+ // verify the sequence numbers
+ ts.Debug.assert(response.request_seq === request.seq, "Malformed response: response sequence number did not match request sequence number.");
+ // unmarshal errors
+ if (!response.success) {
+ throw new Error("Error " + response.message);
+ }
+ ts.Debug.assert(!!response.body, "Malformed response: Unexpected empty response body.");
+ return response;
+ };
+ SessionClient.prototype.openFile = function (file, fileContent, scriptKindName) {
+ var args = { file: file, fileContent: fileContent, scriptKindName: scriptKindName };
+ this.processRequest(server.CommandNames.Open, args);
+ };
+ SessionClient.prototype.closeFile = function (file) {
+ var args = { file: file };
+ this.processRequest(server.CommandNames.Close, args);
+ };
+ SessionClient.prototype.changeFile = function (fileName, start, end, insertString) {
+ // clear the line map after an edit
+ this.lineMaps.set(fileName, undefined); // TODO: GH#18217
+ var args = __assign({}, this.createFileLocationRequestArgsWithEndLineAndOffset(fileName, start, end), { insertString: insertString });
+ this.processRequest(server.CommandNames.Change, args);
+ };
+ SessionClient.prototype.toLineColumnOffset = function (fileName, position) {
+ var _a = this.positionToOneBasedLineOffset(fileName, position), line = _a.line, offset = _a.offset;
+ return { line: line, character: offset };
+ };
+ SessionClient.prototype.getQuickInfoAtPosition = function (fileName, position) {
+ var args = this.createFileLocationRequestArgs(fileName, position);
+ var request = this.processRequest(server.CommandNames.Quickinfo, args);
+ var response = this.processResponse(request);
+ var body = response.body; // TODO: GH#18217
+ return {
+ kind: body.kind,
+ kindModifiers: body.kindModifiers,
+ textSpan: this.decodeSpan(body, fileName),
+ displayParts: [{ kind: "text", text: body.displayString }],
+ documentation: [{ kind: "text", text: body.documentation }],
+ tags: body.tags
+ };
+ };
+ SessionClient.prototype.getProjectInfo = function (file, needFileNameList) {
+ var args = { file: file, needFileNameList: needFileNameList };
+ var request = this.processRequest(server.CommandNames.ProjectInfo, args);
+ var response = this.processResponse(request);
+ return {
+ configFileName: response.body.configFileName,
+ fileNames: response.body.fileNames
+ };
+ };
+ SessionClient.prototype.getCompletionsAtPosition = function (fileName, position, _preferences) {
+ var _this = this;
+ // Not passing along 'preferences' because server should already have those from the 'configure' command
+ var args = this.createFileLocationRequestArgs(fileName, position);
+ var request = this.processRequest(server.CommandNames.Completions, args);
+ var response = this.processResponse(request);
+ return {
+ isGlobalCompletion: false,
+ isMemberCompletion: false,
+ isNewIdentifierLocation: false,
+ entries: response.body.map(function (entry) {
+ if (entry.replacementSpan !== undefined) {
+ var name = entry.name, kind = entry.kind, kindModifiers = entry.kindModifiers, sortText = entry.sortText, replacementSpan = entry.replacementSpan, hasAction = entry.hasAction, source = entry.source, isRecommended = entry.isRecommended;
+ // TODO: GH#241
+ var res = { name: name, kind: kind, kindModifiers: kindModifiers, sortText: sortText, replacementSpan: _this.decodeSpan(replacementSpan, fileName), hasAction: hasAction, source: source, isRecommended: isRecommended };
+ return res;
+ }
+ return entry; // TODO: GH#18217
+ })
+ };
+ };
+ SessionClient.prototype.getCompletionEntryDetails = function (fileName, position, entryName, _options, source) {
+ var _this = this;
+ var args = __assign({}, this.createFileLocationRequestArgs(fileName, position), { entryNames: [{ name: entryName, source: source }] });
+ var request = this.processRequest(server.CommandNames.CompletionDetails, args);
+ var response = this.processResponse(request);
+ ts.Debug.assert(response.body.length === 1, "Unexpected length of completion details response body.");
+ var convertedCodeActions = ts.map(response.body[0].codeActions, function (_a) {
+ var description = _a.description, changes = _a.changes;
+ return ({ description: description, changes: _this.convertChanges(changes, fileName) });
+ });
+ return __assign({}, response.body[0], { codeActions: convertedCodeActions });
+ };
+ SessionClient.prototype.getCompletionEntrySymbol = function (_fileName, _position, _entryName) {
+ return ts.notImplemented();
+ };
+ SessionClient.prototype.getNavigateToItems = function (searchValue) {
+ var _this = this;
+ var args = {
+ searchValue: searchValue,
+ file: this.host.getScriptFileNames()[0]
+ };
+ var request = this.processRequest(server.CommandNames.Navto, args);
+ var response = this.processResponse(request);
+ return response.body.map(function (entry) { return ({
+ name: entry.name,
+ containerName: entry.containerName || "",
+ containerKind: entry.containerKind || "" /* unknown */,
+ kind: entry.kind,
+ kindModifiers: entry.kindModifiers,
+ matchKind: entry.matchKind,
+ isCaseSensitive: entry.isCaseSensitive,
+ fileName: entry.file,
+ textSpan: _this.decodeSpan(entry),
+ }); });
+ };
+ SessionClient.prototype.getFormattingEditsForRange = function (file, start, end, _options) {
+ var _this = this;
+ var args = this.createFileLocationRequestArgsWithEndLineAndOffset(file, start, end);
+ // TODO: handle FormatCodeOptions
+ var request = this.processRequest(server.CommandNames.Format, args);
+ var response = this.processResponse(request);
+ return response.body.map(function (entry) { return _this.convertCodeEditsToTextChange(file, entry); }); // TODO: GH#18217
+ };
+ SessionClient.prototype.getFormattingEditsForDocument = function (fileName, options) {
+ return this.getFormattingEditsForRange(fileName, 0, this.host.getScriptSnapshot(fileName).getLength(), options);
+ };
+ SessionClient.prototype.getFormattingEditsAfterKeystroke = function (fileName, position, key, _options) {
+ var _this = this;
+ var args = __assign({}, this.createFileLocationRequestArgs(fileName, position), { key: key });
+ // TODO: handle FormatCodeOptions
+ var request = this.processRequest(server.CommandNames.Formatonkey, args);
+ var response = this.processResponse(request);
+ return response.body.map(function (entry) { return _this.convertCodeEditsToTextChange(fileName, entry); }); // TODO: GH#18217
+ };
+ SessionClient.prototype.getDefinitionAtPosition = function (fileName, position) {
+ var _this = this;
+ var args = this.createFileLocationRequestArgs(fileName, position);
+ var request = this.processRequest(server.CommandNames.Definition, args);
+ var response = this.processResponse(request);
+ return response.body.map(function (entry) { return ({
+ containerKind: "" /* unknown */,
+ containerName: "",
+ fileName: entry.file,
+ textSpan: _this.decodeSpan(entry),
+ kind: "" /* unknown */,
+ name: ""
+ }); });
+ };
+ SessionClient.prototype.getDefinitionAndBoundSpan = function (fileName, position) {
+ var _this = this;
+ var args = this.createFileLocationRequestArgs(fileName, position);
+ var request = this.processRequest(server.CommandNames.DefinitionAndBoundSpan, args);
+ var response = this.processResponse(request);
+ return {
+ definitions: response.body.definitions.map(function (entry) { return ({
+ containerKind: "" /* unknown */,
+ containerName: "",
+ fileName: entry.file,
+ textSpan: _this.decodeSpan(entry),
+ kind: "" /* unknown */,
+ name: ""
+ }); }),
+ textSpan: this.decodeSpan(response.body.textSpan, request.arguments.file)
+ };
+ };
+ SessionClient.prototype.getTypeDefinitionAtPosition = function (fileName, position) {
+ var _this = this;
+ var args = this.createFileLocationRequestArgs(fileName, position);
+ var request = this.processRequest(server.CommandNames.TypeDefinition, args);
+ var response = this.processResponse(request);
+ return response.body.map(function (entry) { return ({
+ containerKind: "" /* unknown */,
+ containerName: "",
+ fileName: entry.file,
+ textSpan: _this.decodeSpan(entry),
+ kind: "" /* unknown */,
+ name: ""
+ }); });
+ };
+ SessionClient.prototype.getImplementationAtPosition = function (fileName, position) {
+ var _this = this;
+ var args = this.createFileLocationRequestArgs(fileName, position);
+ var request = this.processRequest(server.CommandNames.Implementation, args);
+ var response = this.processResponse(request);
+ return response.body.map(function (entry) { return ({
+ fileName: entry.file,
+ textSpan: _this.decodeSpan(entry),
+ kind: "" /* unknown */,
+ displayParts: []
+ }); });
+ };
+ SessionClient.prototype.findReferences = function (_fileName, _position) {
+ // Not yet implemented.
+ return [];
+ };
+ SessionClient.prototype.getReferencesAtPosition = function (fileName, position) {
+ var _this = this;
+ var args = this.createFileLocationRequestArgs(fileName, position);
+ var request = this.processRequest(server.CommandNames.References, args);
+ var response = this.processResponse(request);
+ return response.body.refs.map(function (entry) { return ({
+ fileName: entry.file,
+ textSpan: _this.decodeSpan(entry),
+ isWriteAccess: entry.isWriteAccess,
+ isDefinition: entry.isDefinition,
+ }); });
+ };
+ SessionClient.prototype.getEmitOutput = function (_fileName) {
+ return ts.notImplemented();
+ };
+ SessionClient.prototype.getSyntacticDiagnostics = function (file) {
+ return this.getDiagnostics(file, server.CommandNames.SyntacticDiagnosticsSync);
+ };
+ SessionClient.prototype.getSemanticDiagnostics = function (file) {
+ return this.getDiagnostics(file, server.CommandNames.SemanticDiagnosticsSync);
+ };
+ SessionClient.prototype.getSuggestionDiagnostics = function (file) {
+ return this.getDiagnostics(file, server.CommandNames.SuggestionDiagnosticsSync);
+ };
+ SessionClient.prototype.getDiagnostics = function (file, command) {
+ var request = this.processRequest(command, { file: file, includeLinePosition: true });
+ var response = this.processResponse(request);
+ return response.body.map(function (entry) {
+ var category = ts.firstDefined(Object.keys(ts.DiagnosticCategory), function (id) {
+ return ts.isString(id) && entry.category === id.toLowerCase() ? ts.DiagnosticCategory[id] : undefined;
+ });
+ return {
+ file: undefined,
+ start: entry.start,
+ length: entry.length,
+ messageText: entry.message,
+ category: ts.Debug.assertDefined(category, "convertDiagnostic: category should not be undefined"),
+ code: entry.code,
+ reportsUnnecessary: entry.reportsUnnecessary,
+ };
+ });
+ };
+ SessionClient.prototype.getCompilerOptionsDiagnostics = function () {
+ return ts.notImplemented();
+ };
+ SessionClient.prototype.getRenameInfo = function (fileName, position, findInStrings, findInComments) {
+ var args = __assign({}, this.createFileLocationRequestArgs(fileName, position), { findInStrings: findInStrings, findInComments: findInComments });
+ var request = this.processRequest(server.CommandNames.Rename, args);
+ var response = this.processResponse(request);
+ var body = response.body; // TODO: GH#18217
+ var locations = [];
+ for (var _i = 0, _a = body.locs; _i < _a.length; _i++) {
+ var entry = _a[_i];
+ var fileName_1 = entry.file;
+ for (var _b = 0, _c = entry.locs; _b < _c.length; _b++) {
+ var loc = _c[_b];
+ locations.push({ textSpan: this.decodeSpan(loc, fileName_1), fileName: fileName_1 });
+ }
+ }
+ return this.lastRenameEntry = {
+ canRename: body.info.canRename,
+ displayName: body.info.displayName,
+ fullDisplayName: body.info.fullDisplayName,
+ kind: body.info.kind,
+ kindModifiers: body.info.kindModifiers,
+ localizedErrorMessage: body.info.localizedErrorMessage,
+ triggerSpan: ts.createTextSpanFromBounds(position, position),
+ fileName: fileName,
+ position: position,
+ findInStrings: !!findInStrings,
+ findInComments: !!findInComments,
+ locations: locations,
+ };
+ };
+ SessionClient.prototype.findRenameLocations = function (fileName, position, findInStrings, findInComments) {
+ if (!this.lastRenameEntry ||
+ this.lastRenameEntry.fileName !== fileName ||
+ this.lastRenameEntry.position !== position ||
+ this.lastRenameEntry.findInStrings !== findInStrings ||
+ this.lastRenameEntry.findInComments !== findInComments) {
+ this.getRenameInfo(fileName, position, findInStrings, findInComments);
+ }
+ return this.lastRenameEntry.locations;
+ };
+ SessionClient.prototype.decodeNavigationBarItems = function (items, fileName, lineMap) {
+ var _this = this;
+ if (!items) {
+ return [];
+ }
+ return items.map(function (item) { return ({
+ text: item.text,
+ kind: item.kind,
+ kindModifiers: item.kindModifiers || "",
+ spans: item.spans.map(function (span) { return _this.decodeSpan(span, fileName, lineMap); }),
+ childItems: _this.decodeNavigationBarItems(item.childItems, fileName, lineMap),
+ indent: item.indent,
+ bolded: false,
+ grayed: false
+ }); });
+ };
+ SessionClient.prototype.getNavigationBarItems = function (file) {
+ var request = this.processRequest(server.CommandNames.NavBar, { file: file });
+ var response = this.processResponse(request);
+ var lineMap = this.getLineMap(file);
+ return this.decodeNavigationBarItems(response.body, file, lineMap);
+ };
+ SessionClient.prototype.decodeNavigationTree = function (tree, fileName, lineMap) {
+ var _this = this;
+ return {
+ text: tree.text,
+ kind: tree.kind,
+ kindModifiers: tree.kindModifiers,
+ spans: tree.spans.map(function (span) { return _this.decodeSpan(span, fileName, lineMap); }),
+ nameSpan: tree.nameSpan && this.decodeSpan(tree.nameSpan, fileName, lineMap),
+ childItems: ts.map(tree.childItems, function (item) { return _this.decodeNavigationTree(item, fileName, lineMap); })
+ };
+ };
+ SessionClient.prototype.getNavigationTree = function (file) {
+ var request = this.processRequest(server.CommandNames.NavTree, { file: file });
+ var response = this.processResponse(request);
+ var lineMap = this.getLineMap(file);
+ return this.decodeNavigationTree(response.body, file, lineMap); // TODO: GH#18217
+ };
+ SessionClient.prototype.decodeSpan = function (span, fileName, lineMap) {
+ fileName = fileName || span.file;
+ lineMap = lineMap || this.getLineMap(fileName);
+ return ts.createTextSpanFromBounds(this.lineOffsetToPosition(fileName, span.start, lineMap), this.lineOffsetToPosition(fileName, span.end, lineMap));
+ };
+ SessionClient.prototype.getNameOrDottedNameSpan = function (_fileName, _startPos, _endPos) {
+ return ts.notImplemented();
+ };
+ SessionClient.prototype.getBreakpointStatementAtPosition = function (_fileName, _position) {
+ return ts.notImplemented();
+ };
+ SessionClient.prototype.getSignatureHelpItems = function (fileName, position) {
+ var args = this.createFileLocationRequestArgs(fileName, position);
+ var request = this.processRequest(server.CommandNames.SignatureHelp, args);
+ var response = this.processResponse(request);
+ if (!response.body) {
+ return undefined; // TODO: GH#18217
+ }
+ var _a = response.body, items = _a.items, encodedApplicableSpan = _a.applicableSpan, selectedItemIndex = _a.selectedItemIndex, argumentIndex = _a.argumentIndex, argumentCount = _a.argumentCount;
+ var applicableSpan = this.decodeSpan(encodedApplicableSpan, fileName);
+ return { items: items, applicableSpan: applicableSpan, selectedItemIndex: selectedItemIndex, argumentIndex: argumentIndex, argumentCount: argumentCount };
+ };
+ SessionClient.prototype.getOccurrencesAtPosition = function (fileName, position) {
+ var _this = this;
+ var args = this.createFileLocationRequestArgs(fileName, position);
+ var request = this.processRequest(server.CommandNames.Occurrences, args);
+ var response = this.processResponse(request);
+ return response.body.map(function (entry) { return ({
+ fileName: entry.file,
+ textSpan: _this.decodeSpan(entry),
+ isWriteAccess: entry.isWriteAccess,
+ isDefinition: false
+ }); });
+ };
+ SessionClient.prototype.getDocumentHighlights = function (fileName, position, filesToSearch) {
+ var _this = this;
+ var args = __assign({}, this.createFileLocationRequestArgs(fileName, position), { filesToSearch: filesToSearch });
+ var request = this.processRequest(server.CommandNames.DocumentHighlights, args);
+ var response = this.processResponse(request);
+ return response.body.map(function (item) { return ({
+ fileName: item.file,
+ highlightSpans: item.highlightSpans.map(function (span) { return ({
+ textSpan: _this.decodeSpan(span, item.file),
+ kind: span.kind
+ }); }),
+ }); });
+ };
+ SessionClient.prototype.getOutliningSpans = function (file) {
+ var _this = this;
+ var request = this.processRequest(server.CommandNames.GetOutliningSpans, { file: file });
+ var response = this.processResponse(request);
+ return response.body.map(function (item) { return ({
+ textSpan: _this.decodeSpan(item.textSpan, file),
+ hintSpan: _this.decodeSpan(item.hintSpan, file),
+ bannerText: item.bannerText,
+ autoCollapse: item.autoCollapse,
+ kind: item.kind
+ }); });
+ };
+ SessionClient.prototype.getTodoComments = function (_fileName, _descriptors) {
+ return ts.notImplemented();
+ };
+ SessionClient.prototype.getDocCommentTemplateAtPosition = function (_fileName, _position) {
+ return ts.notImplemented();
+ };
+ SessionClient.prototype.isValidBraceCompletionAtPosition = function (_fileName, _position, _openingBrace) {
+ return ts.notImplemented();
+ };
+ SessionClient.prototype.getJsxClosingTagAtPosition = function (_fileName, _position) {
+ return ts.notImplemented();
+ };
+ SessionClient.prototype.getSpanOfEnclosingComment = function (_fileName, _position, _onlyMultiLine) {
+ return ts.notImplemented();
+ };
+ SessionClient.prototype.getCodeFixesAtPosition = function (file, start, end, errorCodes) {
+ var _this = this;
+ var args = __assign({}, this.createFileRangeRequestArgs(file, start, end), { errorCodes: errorCodes });
+ var request = this.processRequest(server.CommandNames.GetCodeFixes, args);
+ var response = this.processResponse(request);
+ return response.body.map(function (_a) {
+ var fixName = _a.fixName, description = _a.description, changes = _a.changes, commands = _a.commands, fixId = _a.fixId, fixAllDescription = _a.fixAllDescription;
+ return ({ fixName: fixName, description: description, changes: _this.convertChanges(changes, file), commands: commands, fixId: fixId, fixAllDescription: fixAllDescription });
+ });
+ };
+ SessionClient.prototype.createFileLocationOrRangeRequestArgs = function (positionOrRange, fileName) {
+ return typeof positionOrRange === "number"
+ ? this.createFileLocationRequestArgs(fileName, positionOrRange)
+ : this.createFileRangeRequestArgs(fileName, positionOrRange.pos, positionOrRange.end);
+ };
+ SessionClient.prototype.createFileLocationRequestArgs = function (file, position) {
+ var _a = this.positionToOneBasedLineOffset(file, position), line = _a.line, offset = _a.offset;
+ return { file: file, line: line, offset: offset };
+ };
+ SessionClient.prototype.createFileRangeRequestArgs = function (file, start, end) {
+ var _a = this.positionToOneBasedLineOffset(file, start), startLine = _a.line, startOffset = _a.offset;
+ var _b = this.positionToOneBasedLineOffset(file, end), endLine = _b.line, endOffset = _b.offset;
+ return { file: file, startLine: startLine, startOffset: startOffset, endLine: endLine, endOffset: endOffset };
+ };
+ SessionClient.prototype.createFileLocationRequestArgsWithEndLineAndOffset = function (file, start, end) {
+ var _a = this.positionToOneBasedLineOffset(file, start), line = _a.line, offset = _a.offset;
+ var _b = this.positionToOneBasedLineOffset(file, end), endLine = _b.line, endOffset = _b.offset;
+ return { file: file, line: line, offset: offset, endLine: endLine, endOffset: endOffset };
+ };
+ SessionClient.prototype.getApplicableRefactors = function (fileName, positionOrRange) {
+ var args = this.createFileLocationOrRangeRequestArgs(positionOrRange, fileName);
+ var request = this.processRequest(server.CommandNames.GetApplicableRefactors, args);
+ var response = this.processResponse(request);
+ return response.body; // TODO: GH#18217
+ };
+ SessionClient.prototype.getEditsForRefactor = function (fileName, _formatOptions, positionOrRange, refactorName, actionName) {
+ var args = this.createFileLocationOrRangeRequestArgs(positionOrRange, fileName);
+ args.refactor = refactorName;
+ args.action = actionName;
+ var request = this.processRequest(server.CommandNames.GetEditsForRefactor, args);
+ var response = this.processResponse(request);
+ if (!response.body) {
+ return { edits: [], renameFilename: undefined, renameLocation: undefined };
+ }
+ var edits = this.convertCodeEditsToTextChanges(response.body.edits);
+ var renameFilename = response.body.renameFilename;
+ var renameLocation;
+ if (renameFilename !== undefined) {
+ renameLocation = this.lineOffsetToPosition(renameFilename, response.body.renameLocation); // TODO: GH#18217
+ }
+ return {
+ edits: edits,
+ renameFilename: renameFilename,
+ renameLocation: renameLocation
+ };
+ };
+ SessionClient.prototype.organizeImports = function (_scope, _formatOptions) {
+ return ts.notImplemented();
+ };
+ SessionClient.prototype.getEditsForFileRename = function () {
+ return ts.notImplemented();
+ };
+ SessionClient.prototype.convertCodeEditsToTextChanges = function (edits) {
+ var _this = this;
+ return edits.map(function (edit) {
+ var fileName = edit.fileName;
+ return {
+ fileName: fileName,
+ textChanges: edit.textChanges.map(function (t) { return _this.convertTextChangeToCodeEdit(t, fileName); })
+ };
+ });
+ };
+ SessionClient.prototype.convertChanges = function (changes, fileName) {
+ var _this = this;
+ return changes.map(function (change) { return ({
+ fileName: change.fileName,
+ textChanges: change.textChanges.map(function (textChange) { return _this.convertTextChangeToCodeEdit(textChange, fileName); })
+ }); });
+ };
+ SessionClient.prototype.convertTextChangeToCodeEdit = function (change, fileName) {
+ return {
+ span: this.decodeSpan(change, fileName),
+ newText: change.newText ? change.newText : ""
+ };
+ };
+ SessionClient.prototype.getBraceMatchingAtPosition = function (fileName, position) {
+ var _this = this;
+ var args = this.createFileLocationRequestArgs(fileName, position);
+ var request = this.processRequest(server.CommandNames.Brace, args);
+ var response = this.processResponse(request);
+ return response.body.map(function (entry) { return _this.decodeSpan(entry, fileName); }); // TODO: GH#18217
+ };
+ SessionClient.prototype.getIndentationAtPosition = function (_fileName, _position, _options) {
+ return ts.notImplemented();
+ };
+ SessionClient.prototype.getSyntacticClassifications = function (_fileName, _span) {
+ return ts.notImplemented();
+ };
+ SessionClient.prototype.getSemanticClassifications = function (_fileName, _span) {
+ return ts.notImplemented();
+ };
+ SessionClient.prototype.getEncodedSyntacticClassifications = function (_fileName, _span) {
+ return ts.notImplemented();
+ };
+ SessionClient.prototype.getEncodedSemanticClassifications = function (_fileName, _span) {
+ return ts.notImplemented();
+ };
+ SessionClient.prototype.getProgram = function () {
+ throw new Error("SourceFile objects are not serializable through the server protocol.");
+ };
+ SessionClient.prototype.getNonBoundSourceFile = function (_fileName) {
+ throw new Error("SourceFile objects are not serializable through the server protocol.");
+ };
+ SessionClient.prototype.getSourceFile = function (_fileName) {
+ throw new Error("SourceFile objects are not serializable through the server protocol.");
+ };
+ SessionClient.prototype.cleanupSemanticCache = function () {
+ throw new Error("cleanupSemanticCache is not available through the server layer.");
+ };
+ SessionClient.prototype.dispose = function () {
+ throw new Error("dispose is not available through the server layer.");
+ };
+ return SessionClient;
+ }());
+ server.SessionClient = SessionClient;
+ })(server = ts.server || (ts.server = {}));
+})(ts || (ts = {}));
+var RunnerBase = /** @class */ (function () {
+ function RunnerBase() {
+ // contains the tests to run
+ this.tests = [];
+ /** The working directory where tests are found. Needed for batch testing where the input path will differ from the output path inside baselines */
+ this.workingDirectory = "";
+ }
+ /** Add a source file to the runner's list of tests that need to be initialized with initializeTests */
+ RunnerBase.prototype.addTest = function (fileName) {
+ this.tests.push(fileName);
+ };
+ RunnerBase.prototype.enumerateFiles = function (folder, regex, options) {
+ return ts.map(Harness.IO.listFiles(Harness.userSpecifiedRoot + folder, regex, { recursive: (options ? options.recursive : false) }), ts.normalizeSlashes);
+ };
+ /** Replaces instances of full paths with fileNames only */
+ RunnerBase.removeFullPaths = function (path) {
+ // If its a full path (starts with "C:" or "/") replace with just the filename
+ var fixedPath = /^(\w:|\/)/.test(path) ? ts.getBaseFileName(path) : path;
+ // when running in the browser the 'full path' is the host name, shows up in error baselines
+ var localHost = /http:\/localhost:\d+/g;
+ fixedPath = fixedPath.replace(localHost, "");
+ return fixedPath;
+ };
+ return RunnerBase;
+}());
+var Harness;
+(function (Harness) {
+ var SourceMapRecorder;
+ (function (SourceMapRecorder) {
+ var SourceMapDecoder;
+ (function (SourceMapDecoder) {
+ var sourceMapMappings;
+ var sourceMapNames;
+ var decodingIndex;
+ var prevNameIndex;
+ var decodeOfEncodedMapping;
+ var errorDecodeOfEncodedMapping;
+ function initializeSourceMapDecoding(sourceMapData) {
+ sourceMapMappings = sourceMapData.sourceMapMappings;
+ sourceMapNames = sourceMapData.sourceMapNames;
+ decodingIndex = 0;
+ prevNameIndex = 0;
+ decodeOfEncodedMapping = {
+ emittedLine: 1,
+ emittedColumn: 1,
+ sourceLine: 1,
+ sourceColumn: 1,
+ sourceIndex: 0,
+ };
+ errorDecodeOfEncodedMapping = undefined;
+ }
+ SourceMapDecoder.initializeSourceMapDecoding = initializeSourceMapDecoding;
+ function isSourceMappingSegmentEnd() {
+ if (decodingIndex === sourceMapMappings.length) {
+ return true;
+ }
+ if (sourceMapMappings.charAt(decodingIndex) === ",") {
+ return true;
+ }
+ if (sourceMapMappings.charAt(decodingIndex) === ";") {
+ return true;
+ }
+ return false;
+ }
+ function decodeNextEncodedSourceMapSpan() {
+ errorDecodeOfEncodedMapping = undefined;
+ function createErrorIfCondition(condition, errormsg) {
+ if (errorDecodeOfEncodedMapping) {
+ // there was existing error:
+ return true;
+ }
+ if (condition) {
+ errorDecodeOfEncodedMapping = errormsg;
+ }
+ return condition;
+ }
+ function base64VLQFormatDecode() {
+ function base64FormatDecode() {
+ return "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(sourceMapMappings.charAt(decodingIndex));
+ }
+ var moreDigits = true;
+ var shiftCount = 0;
+ var value = 0;
+ for (; moreDigits; decodingIndex++) {
+ if (createErrorIfCondition(decodingIndex >= sourceMapMappings.length, "Error in decoding base64VLQFormatDecode, past the mapping string")) {
+ return undefined; // TODO: GH#18217
+ }
+ // 6 digit number
+ var currentByte = base64FormatDecode();
+ // If msb is set, we still have more bits to continue
+ moreDigits = (currentByte & 32) !== 0;
+ // least significant 5 bits are the next msbs in the final value.
+ value = value | ((currentByte & 31) << shiftCount);
+ shiftCount += 5;
+ }
+ // Least significant bit if 1 represents negative and rest of the msb is actual absolute value
+ if ((value & 1) === 0) {
+ // + number
+ value = value >> 1;
+ }
+ else {
+ // - number
+ value = value >> 1;
+ value = -value;
+ }
+ return value;
+ }
+ while (decodingIndex < sourceMapMappings.length) {
+ if (sourceMapMappings.charAt(decodingIndex) === ";") {
+ // New line
+ decodeOfEncodedMapping.emittedLine++;
+ decodeOfEncodedMapping.emittedColumn = 1;
+ decodingIndex++;
+ continue;
+ }
+ if (sourceMapMappings.charAt(decodingIndex) === ",") {
+ // Next entry is on same line - no action needed
+ decodingIndex++;
+ continue;
+ }
+ // Read the current span
+ // 1. Column offset from prev read jsColumn
+ decodeOfEncodedMapping.emittedColumn += base64VLQFormatDecode();
+ // Incorrect emittedColumn dont support this map
+ if (createErrorIfCondition(decodeOfEncodedMapping.emittedColumn < 1, "Invalid emittedColumn found")) {
+ return { error: errorDecodeOfEncodedMapping, sourceMapSpan: decodeOfEncodedMapping };
+ }
+ // Dont support reading mappings that dont have information about original source and its line numbers
+ if (createErrorIfCondition(isSourceMappingSegmentEnd(), "Unsupported Error Format: No entries after emitted column")) {
+ return { error: errorDecodeOfEncodedMapping, sourceMapSpan: decodeOfEncodedMapping };
+ }
+ // 2. Relative sourceIndex
+ decodeOfEncodedMapping.sourceIndex += base64VLQFormatDecode();
+ // Incorrect sourceIndex dont support this map
+ if (createErrorIfCondition(decodeOfEncodedMapping.sourceIndex < 0, "Invalid sourceIndex found")) {
+ return { error: errorDecodeOfEncodedMapping, sourceMapSpan: decodeOfEncodedMapping };
+ }
+ // Dont support reading mappings that dont have information about original source span
+ if (createErrorIfCondition(isSourceMappingSegmentEnd(), "Unsupported Error Format: No entries after sourceIndex")) {
+ return { error: errorDecodeOfEncodedMapping, sourceMapSpan: decodeOfEncodedMapping };
+ }
+ // 3. Relative sourceLine 0 based
+ decodeOfEncodedMapping.sourceLine += base64VLQFormatDecode();
+ // Incorrect sourceLine dont support this map
+ if (createErrorIfCondition(decodeOfEncodedMapping.sourceLine < 1, "Invalid sourceLine found")) {
+ return { error: errorDecodeOfEncodedMapping, sourceMapSpan: decodeOfEncodedMapping };
+ }
+ // Dont support reading mappings that dont have information about original source and its line numbers
+ if (createErrorIfCondition(isSourceMappingSegmentEnd(), "Unsupported Error Format: No entries after emitted Line")) {
+ return { error: errorDecodeOfEncodedMapping, sourceMapSpan: decodeOfEncodedMapping };
+ }
+ // 4. Relative sourceColumn 0 based
+ decodeOfEncodedMapping.sourceColumn += base64VLQFormatDecode();
+ // Incorrect sourceColumn dont support this map
+ if (createErrorIfCondition(decodeOfEncodedMapping.sourceColumn < 1, "Invalid sourceLine found")) {
+ return { error: errorDecodeOfEncodedMapping, sourceMapSpan: decodeOfEncodedMapping };
+ }
+ // 5. Check if there is name:
+ if (!isSourceMappingSegmentEnd()) {
+ prevNameIndex += base64VLQFormatDecode();
+ decodeOfEncodedMapping.nameIndex = prevNameIndex;
+ // Incorrect nameIndex dont support this map
+ if (createErrorIfCondition(decodeOfEncodedMapping.nameIndex < 0 || decodeOfEncodedMapping.nameIndex >= sourceMapNames.length, "Invalid name index for the source map entry")) {
+ return { error: errorDecodeOfEncodedMapping, sourceMapSpan: decodeOfEncodedMapping };
+ }
+ }
+ // Dont support reading mappings that dont have information about original source and its line numbers
+ if (createErrorIfCondition(!isSourceMappingSegmentEnd(), "Unsupported Error Format: There are more entries after " + (decodeOfEncodedMapping.nameIndex === -1 ? "sourceColumn" : "nameIndex"))) {
+ return { error: errorDecodeOfEncodedMapping, sourceMapSpan: decodeOfEncodedMapping };
+ }
+ // Populated the entry
+ return { error: errorDecodeOfEncodedMapping, sourceMapSpan: decodeOfEncodedMapping };
+ }
+ createErrorIfCondition(/*condition*/ true, "No encoded entry found");
+ return undefined; // TODO: GH#18217
+ }
+ SourceMapDecoder.decodeNextEncodedSourceMapSpan = decodeNextEncodedSourceMapSpan;
+ function hasCompletedDecoding() {
+ return decodingIndex === sourceMapMappings.length;
+ }
+ SourceMapDecoder.hasCompletedDecoding = hasCompletedDecoding;
+ function getRemainingDecodeString() {
+ return sourceMapMappings.substr(decodingIndex);
+ }
+ SourceMapDecoder.getRemainingDecodeString = getRemainingDecodeString;
+ })(SourceMapDecoder || (SourceMapDecoder = {}));
+ var SourceMapSpanWriter;
+ (function (SourceMapSpanWriter) {
+ var sourceMapRecorder;
+ var sourceMapSources;
+ var sourceMapNames;
+ var jsFile;
+ var jsLineMap;
+ var tsCode;
+ var tsLineMap;
+ var spansOnSingleLine;
+ var prevWrittenSourcePos;
+ var prevWrittenJsLine;
+ var spanMarkerContinues;
+ function initializeSourceMapSpanWriter(sourceMapRecordWriter, sourceMapData, currentJsFile) {
+ sourceMapRecorder = sourceMapRecordWriter;
+ sourceMapSources = sourceMapData.sourceMapSources;
+ sourceMapNames = sourceMapData.sourceMapNames;
+ jsFile = currentJsFile;
+ jsLineMap = jsFile.lineStarts;
+ spansOnSingleLine = [];
+ prevWrittenSourcePos = 0;
+ prevWrittenJsLine = 0;
+ spanMarkerContinues = false;
+ SourceMapDecoder.initializeSourceMapDecoding(sourceMapData);
+ sourceMapRecorder.WriteLine("===================================================================");
+ sourceMapRecorder.WriteLine("JsFile: " + sourceMapData.sourceMapFile);
+ sourceMapRecorder.WriteLine("mapUrl: " + sourceMapData.jsSourceMappingURL);
+ sourceMapRecorder.WriteLine("sourceRoot: " + sourceMapData.sourceMapSourceRoot);
+ sourceMapRecorder.WriteLine("sources: " + sourceMapData.sourceMapSources);
+ if (sourceMapData.sourceMapSourcesContent) {
+ sourceMapRecorder.WriteLine("sourcesContent: " + JSON.stringify(sourceMapData.sourceMapSourcesContent));
+ }
+ sourceMapRecorder.WriteLine("===================================================================");
+ }
+ SourceMapSpanWriter.initializeSourceMapSpanWriter = initializeSourceMapSpanWriter;
+ function getSourceMapSpanString(mapEntry, getAbsentNameIndex) {
+ var mapString = "Emitted(" + mapEntry.emittedLine + ", " + mapEntry.emittedColumn + ") Source(" + mapEntry.sourceLine + ", " + mapEntry.sourceColumn + ") + SourceIndex(" + mapEntry.sourceIndex + ")";
+ if (mapEntry.nameIndex >= 0 && mapEntry.nameIndex < sourceMapNames.length) {
+ mapString += " name (" + sourceMapNames[mapEntry.nameIndex] + ")";
+ }
+ else {
+ if ((mapEntry.nameIndex && mapEntry.nameIndex !== -1) || getAbsentNameIndex) {
+ mapString += " nameIndex (" + mapEntry.nameIndex + ")";
+ }
+ }
+ return mapString;
+ }
+ function recordSourceMapSpan(sourceMapSpan) {
+ // verify the decoded span is same as the new span
+ var decodeResult = SourceMapDecoder.decodeNextEncodedSourceMapSpan();
+ var decodeErrors;
+ if (decodeResult.error
+ || decodeResult.sourceMapSpan.emittedLine !== sourceMapSpan.emittedLine
+ || decodeResult.sourceMapSpan.emittedColumn !== sourceMapSpan.emittedColumn
+ || decodeResult.sourceMapSpan.sourceLine !== sourceMapSpan.sourceLine
+ || decodeResult.sourceMapSpan.sourceColumn !== sourceMapSpan.sourceColumn
+ || decodeResult.sourceMapSpan.sourceIndex !== sourceMapSpan.sourceIndex
+ || decodeResult.sourceMapSpan.nameIndex !== sourceMapSpan.nameIndex) {
+ if (decodeResult.error) {
+ decodeErrors = ["!!^^ !!^^ There was decoding error in the sourcemap at this location: " + decodeResult.error];
+ }
+ else {
+ decodeErrors = ["!!^^ !!^^ The decoded span from sourcemap's mapping entry does not match what was encoded for this span:"];
+ }
+ decodeErrors.push("!!^^ !!^^ Decoded span from sourcemap's mappings entry: " + getSourceMapSpanString(decodeResult.sourceMapSpan, /*getAbsentNameIndex*/ true) + " Span encoded by the emitter:" + getSourceMapSpanString(sourceMapSpan, /*getAbsentNameIndex*/ true));
+ }
+ if (spansOnSingleLine.length && spansOnSingleLine[0].sourceMapSpan.emittedLine !== sourceMapSpan.emittedLine) {
+ // On different line from the one that we have been recording till now,
+ writeRecordedSpans();
+ spansOnSingleLine = [];
+ }
+ spansOnSingleLine.push({ sourceMapSpan: sourceMapSpan, decodeErrors: decodeErrors });
+ }
+ SourceMapSpanWriter.recordSourceMapSpan = recordSourceMapSpan;
+ function recordNewSourceFileSpan(sourceMapSpan, newSourceFileCode) {
+ assert.isTrue(spansOnSingleLine.length === 0 || spansOnSingleLine[0].sourceMapSpan.emittedLine !== sourceMapSpan.emittedLine, "new file source map span should be on new line. We currently handle only that scenario");
+ recordSourceMapSpan(sourceMapSpan);
+ assert.isTrue(spansOnSingleLine.length === 1);
+ sourceMapRecorder.WriteLine("-------------------------------------------------------------------");
+ sourceMapRecorder.WriteLine("emittedFile:" + jsFile.file);
+ sourceMapRecorder.WriteLine("sourceFile:" + sourceMapSources[spansOnSingleLine[0].sourceMapSpan.sourceIndex]);
+ sourceMapRecorder.WriteLine("-------------------------------------------------------------------");
+ tsLineMap = ts.computeLineStarts(newSourceFileCode);
+ tsCode = newSourceFileCode;
+ prevWrittenSourcePos = 0;
+ }
+ SourceMapSpanWriter.recordNewSourceFileSpan = recordNewSourceFileSpan;
+ function close() {
+ // Write the lines pending on the single line
+ writeRecordedSpans();
+ if (!SourceMapDecoder.hasCompletedDecoding()) {
+ sourceMapRecorder.WriteLine("!!!! **** There are more source map entries in the sourceMap's mapping than what was encoded");
+ sourceMapRecorder.WriteLine("!!!! **** Remaining decoded string: " + SourceMapDecoder.getRemainingDecodeString());
+ }
+ // write remaining js lines
+ writeJsFileLines(jsLineMap.length);
+ }
+ SourceMapSpanWriter.close = close;
+ function getTextOfLine(line, lineMap, code) {
+ var startPos = lineMap[line];
+ var endPos = lineMap[line + 1];
+ var text = code.substring(startPos, endPos);
+ return line === 0 ? utils.removeByteOrderMark(text) : text;
+ }
+ function writeJsFileLines(endJsLine) {
+ for (; prevWrittenJsLine < endJsLine; prevWrittenJsLine++) {
+ sourceMapRecorder.Write(">>>" + getTextOfLine(prevWrittenJsLine, jsLineMap, jsFile.text));
+ }
+ }
+ function writeRecordedSpans() {
+ var markerIds = [];
+ function getMarkerId(markerIndex) {
+ var markerId = "";
+ if (spanMarkerContinues) {
+ assert.isTrue(markerIndex === 0);
+ markerId = "1->";
+ }
+ else {
+ markerId = "" + (markerIndex + 1);
+ if (markerId.length < 2) {
+ markerId = markerId + " ";
+ }
+ markerId += ">";
+ }
+ return markerId;
+ }
+ var prevEmittedCol;
+ function iterateSpans(fn) {
+ prevEmittedCol = 1;
+ for (var i = 0; i < spansOnSingleLine.length; i++) {
+ fn(spansOnSingleLine[i], i);
+ prevEmittedCol = spansOnSingleLine[i].sourceMapSpan.emittedColumn;
+ }
+ }
+ function writeSourceMapIndent(indentLength, indentPrefix) {
+ sourceMapRecorder.Write(indentPrefix);
+ for (var i = 1; i < indentLength; i++) {
+ sourceMapRecorder.Write(" ");
+ }
+ }
+ function writeSourceMapMarker(currentSpan, index, endColumn, endContinues) {
+ if (endColumn === void 0) { endColumn = currentSpan.sourceMapSpan.emittedColumn; }
+ if (endContinues === void 0) { endContinues = false; }
+ var markerId = getMarkerId(index);
+ markerIds.push(markerId);
+ writeSourceMapIndent(prevEmittedCol, markerId);
+ for (var i = prevEmittedCol; i < endColumn; i++) {
+ sourceMapRecorder.Write("^");
+ }
+ if (endContinues) {
+ sourceMapRecorder.Write("->");
+ }
+ sourceMapRecorder.WriteLine("");
+ spanMarkerContinues = endContinues;
+ }
+ function writeSourceMapSourceText(currentSpan, index) {
+ var sourcePos = tsLineMap[currentSpan.sourceMapSpan.sourceLine - 1] + (currentSpan.sourceMapSpan.sourceColumn - 1);
+ var sourceText = "";
+ if (prevWrittenSourcePos < sourcePos) {
+ // Position that goes forward, get text
+ sourceText = tsCode.substring(prevWrittenSourcePos, sourcePos);
+ }
+ if (currentSpan.decodeErrors) {
+ // If there are decode errors, write
+ for (var _i = 0, _a = currentSpan.decodeErrors; _i < _a.length; _i++) {
+ var decodeError = _a[_i];
+ writeSourceMapIndent(prevEmittedCol, markerIds[index]);
+ sourceMapRecorder.WriteLine(decodeError);
+ }
+ }
+ var tsCodeLineMap = ts.computeLineStarts(sourceText);
+ for (var i = 0; i < tsCodeLineMap.length; i++) {
+ writeSourceMapIndent(prevEmittedCol, i === 0 ? markerIds[index] : " >");
+ sourceMapRecorder.Write(getTextOfLine(i, tsCodeLineMap, sourceText));
+ if (i === tsCodeLineMap.length - 1) {
+ sourceMapRecorder.WriteLine("");
+ }
+ }
+ prevWrittenSourcePos = sourcePos;
+ }
+ function writeSpanDetails(currentSpan, index) {
+ sourceMapRecorder.WriteLine(markerIds[index] + getSourceMapSpanString(currentSpan.sourceMapSpan));
+ }
+ if (spansOnSingleLine.length) {
+ var currentJsLine = spansOnSingleLine[0].sourceMapSpan.emittedLine;
+ // Write js line
+ writeJsFileLines(currentJsLine);
+ // Emit markers
+ iterateSpans(writeSourceMapMarker);
+ var jsFileText = getTextOfLine(currentJsLine, jsLineMap, jsFile.text);
+ if (prevEmittedCol < jsFileText.length) {
+ // There is remaining text on this line that will be part of next source span so write marker that continues
+ writeSourceMapMarker(/*currentSpan*/ undefined, spansOnSingleLine.length, /*endColumn*/ jsFileText.length, /*endContinues*/ true); // TODO: GH#18217
+ }
+ // Emit Source text
+ iterateSpans(writeSourceMapSourceText);
+ // Emit column number etc
+ iterateSpans(writeSpanDetails);
+ sourceMapRecorder.WriteLine("---");
+ }
+ }
+ })(SourceMapSpanWriter || (SourceMapSpanWriter = {}));
+ function getSourceMapRecord(sourceMapDataList, program, jsFiles, declarationFiles) {
+ var sourceMapRecorder = new Harness.Compiler.WriterAggregator();
+ for (var i = 0; i < sourceMapDataList.length; i++) {
+ var sourceMapData = sourceMapDataList[i];
+ var prevSourceFile = void 0;
+ var currentFile = void 0;
+ if (ts.endsWith(sourceMapData.sourceMapFile, ".d.ts" /* Dts */)) {
+ if (sourceMapDataList.length > jsFiles.length) {
+ currentFile = declarationFiles[Math.floor(i / 2)]; // When both kinds of source map are present, they alternate js/dts
+ }
+ else {
+ currentFile = declarationFiles[i];
+ }
+ }
+ else {
+ if (sourceMapDataList.length > jsFiles.length) {
+ currentFile = jsFiles[Math.floor(i / 2)];
+ }
+ else {
+ currentFile = jsFiles[i];
+ }
+ }
+ SourceMapSpanWriter.initializeSourceMapSpanWriter(sourceMapRecorder, sourceMapData, currentFile);
+ for (var _i = 0, _a = sourceMapData.sourceMapDecodedMappings; _i < _a.length; _i++) {
+ var decodedSourceMapping = _a[_i];
+ var currentSourceFile = program.getSourceFile(sourceMapData.inputSourceFileNames[decodedSourceMapping.sourceIndex]);
+ if (currentSourceFile !== prevSourceFile) {
+ SourceMapSpanWriter.recordNewSourceFileSpan(decodedSourceMapping, currentSourceFile.text);
+ prevSourceFile = currentSourceFile;
+ }
+ else {
+ SourceMapSpanWriter.recordSourceMapSpan(decodedSourceMapping);
+ }
+ }
+ SourceMapSpanWriter.close(); // If the last spans werent emitted, emit them
+ }
+ sourceMapRecorder.Close();
+ return sourceMapRecorder.lines.join("\r\n");
+ }
+ SourceMapRecorder.getSourceMapRecord = getSourceMapRecord;
+ })(SourceMapRecorder = Harness.SourceMapRecorder || (Harness.SourceMapRecorder = {}));
+})(Harness || (Harness = {}));
+// Block scoped definitions work poorly for global variables, temporarily enable var
+/* tslint:disable:no-var-keyword */
+// this will work in the browser via browserify
+var _chai = require("chai");
+var assert = _chai.assert;
+{
+ // chai's builtin `assert.isFalse` is featureful but slow - we don't use those features,
+ // so we'll just overwrite it as an alterative to migrating a bunch of code off of chai
+ assert.isFalse = function (expr, msg) { if (expr !== false)
+ throw new Error(msg); };
+ var assertDeepImpl_1 = assert.deepEqual;
+ assert.deepEqual = function (a, b, msg) {
+ if (ts.isArray(a) && ts.isArray(b)) {
+ assertDeepImpl_1(arrayExtraKeysObject(a), arrayExtraKeysObject(b), "Array extra keys differ");
+ }
+ assertDeepImpl_1(a, b, msg);
+ function arrayExtraKeysObject(a) {
+ var obj = {};
+ for (var key in a) {
+ if (Number.isNaN(Number(key))) {
+ obj[key] = a[key];
+ }
+ }
+ return obj;
+ }
+ };
+}
+var global = Function("return this").call(undefined);
+/* tslint:enable:no-var-keyword prefer-const */
+var Utils;
+(function (Utils) {
+ // Setup some globals based on the current environment
+ var ExecutionEnvironment;
+ (function (ExecutionEnvironment) {
+ ExecutionEnvironment[ExecutionEnvironment["Node"] = 0] = "Node";
+ ExecutionEnvironment[ExecutionEnvironment["Browser"] = 1] = "Browser";
+ })(ExecutionEnvironment = Utils.ExecutionEnvironment || (Utils.ExecutionEnvironment = {}));
+ function getExecutionEnvironment() {
+ if (typeof window !== "undefined") {
+ return 1 /* Browser */;
+ }
+ else {
+ return 0 /* Node */;
+ }
+ }
+ Utils.getExecutionEnvironment = getExecutionEnvironment;
+ Utils.currentExecutionEnvironment = getExecutionEnvironment();
+ // Thanks to browserify, Buffer is always available nowadays
+ var Buffer = require("buffer").Buffer;
+ function encodeString(s) {
+ return Buffer.from(s).toString("utf8");
+ }
+ Utils.encodeString = encodeString;
+ function byteLength(s, encoding) {
+ // stub implementation if Buffer is not available (in-browser case)
+ return Buffer.byteLength(s, encoding);
+ }
+ Utils.byteLength = byteLength;
+ function evalFile(fileContents, fileName, nodeContext) {
+ var environment = getExecutionEnvironment();
+ switch (environment) {
+ case 1 /* Browser */:
+ eval(fileContents);
+ break;
+ case 0 /* Node */:
+ var vm = require("vm");
+ if (nodeContext) {
+ vm.runInNewContext(fileContents, nodeContext, fileName);
+ }
+ else {
+ vm.runInThisContext(fileContents, fileName);
+ }
+ break;
+ default:
+ throw new Error("Unknown context");
+ }
+ }
+ Utils.evalFile = evalFile;
+ /** Splits the given string on \r\n, or on only \n if that fails, or on only \r if *that* fails. */
+ function splitContentByNewlines(content) {
+ // Split up the input file by line
+ // Note: IE JS engine incorrectly handles consecutive delimiters here when using RegExp split, so
+ // we have to use string-based splitting instead and try to figure out the delimiting chars
+ var lines = content.split("\r\n");
+ if (lines.length === 1) {
+ lines = content.split("\n");
+ if (lines.length === 1) {
+ lines = content.split("\r");
+ }
+ }
+ return lines;
+ }
+ Utils.splitContentByNewlines = splitContentByNewlines;
+ /** Reads a file under /tests */
+ function readTestFile(path) {
+ if (path.indexOf("tests") < 0) {
+ path = "tests/" + path;
+ }
+ var content;
+ try {
+ content = Harness.IO.readFile(Harness.userSpecifiedRoot + path);
+ }
+ catch (err) {
+ return undefined;
+ }
+ return content;
+ }
+ Utils.readTestFile = readTestFile;
+ function memoize(f, memoKey) {
+ var cache = ts.createMap();
+ return (function () {
+ var args = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ args[_i] = arguments[_i];
+ }
+ var key = memoKey.apply(void 0, args);
+ if (cache.has(key)) {
+ return cache.get(key);
+ }
+ else {
+ var value = f.apply(this, args);
+ cache.set(key, value);
+ return value;
+ }
+ });
+ }
+ Utils.memoize = memoize;
+ Utils.canonicalizeForHarness = ts.createGetCanonicalFileName(/*caseSensitive*/ false); // This is done so tests work on windows _and_ linux
+ function assertInvariants(node, parent) {
+ if (node) {
+ assert.isFalse(node.pos < 0, "node.pos < 0");
+ assert.isFalse(node.end < 0, "node.end < 0");
+ assert.isFalse(node.end < node.pos, "node.end < node.pos");
+ assert.equal(node.parent, parent, "node.parent !== parent");
+ if (parent) {
+ // Make sure each child is contained within the parent.
+ assert.isFalse(node.pos < parent.pos, "node.pos < parent.pos");
+ assert.isFalse(node.end > parent.end, "node.end > parent.end");
+ }
+ ts.forEachChild(node, function (child) {
+ assertInvariants(child, node);
+ });
+ // Make sure each of the children is in order.
+ var currentPos_1 = 0;
+ ts.forEachChild(node, function (child) {
+ assert.isFalse(child.pos < currentPos_1, "child.pos < currentPos");
+ currentPos_1 = child.end;
+ }, function (array) {
+ assert.isFalse(array.pos < node.pos, "array.pos < node.pos");
+ assert.isFalse(array.end > node.end, "array.end > node.end");
+ assert.isFalse(array.pos < currentPos_1, "array.pos < currentPos");
+ for (var _i = 0, array_1 = array; _i < array_1.length; _i++) {
+ var item = array_1[_i];
+ assert.isFalse(item.pos < currentPos_1, "array[i].pos < currentPos");
+ currentPos_1 = item.end;
+ }
+ currentPos_1 = array.end;
+ });
+ var childNodesAndArrays_1 = [];
+ ts.forEachChild(node, function (child) { childNodesAndArrays_1.push(child); }, function (array) { childNodesAndArrays_1.push(array); });
+ for (var childName in node) {
+ if (childName === "parent" || childName === "nextContainer" || childName === "modifiers" || childName === "externalModuleIndicator" ||
+ // for now ignore jsdoc comments
+ childName === "jsDocComment" || childName === "checkJsDirective" || childName === "commonJsModuleIndicator") {
+ continue;
+ }
+ var child = node[childName];
+ if (isNodeOrArray(child)) {
+ assert.isFalse(childNodesAndArrays_1.indexOf(child) < 0, "Missing child when forEach'ing over node: " + ts.SyntaxKind[node.kind] + "-" + childName);
+ }
+ }
+ }
+ }
+ Utils.assertInvariants = assertInvariants;
+ function isNodeOrArray(a) {
+ return a !== undefined && typeof a.pos === "number";
+ }
+ function convertDiagnostics(diagnostics) {
+ return diagnostics.map(convertDiagnostic);
+ }
+ Utils.convertDiagnostics = convertDiagnostics;
+ function convertDiagnostic(diagnostic) {
+ return {
+ start: diagnostic.start,
+ length: diagnostic.length,
+ messageText: ts.flattenDiagnosticMessageText(diagnostic.messageText, Harness.IO.newLine()),
+ category: ts.diagnosticCategoryName(diagnostic, /*lowerCase*/ false),
+ code: diagnostic.code
+ };
+ }
+ function sourceFileToJSON(file) {
+ return JSON.stringify(file, function (_, v) { return isNodeOrArray(v) ? serializeNode(v) : v; }, " ");
+ function getKindName(k) {
+ if (ts.isString(k)) {
+ return k;
+ }
+ // For some markers in SyntaxKind, we should print its original syntax name instead of
+ // the marker name in tests.
+ if (k === ts.SyntaxKind.FirstJSDocNode ||
+ k === ts.SyntaxKind.LastJSDocNode ||
+ k === ts.SyntaxKind.FirstJSDocTagNode ||
+ k === ts.SyntaxKind.LastJSDocTagNode) {
+ for (var kindName in ts.SyntaxKind) {
+ if (ts.SyntaxKind[kindName] === k) {
+ return kindName;
+ }
+ }
+ }
+ return ts.SyntaxKind[k];
+ }
+ function getFlagName(flags, f) {
+ if (f === 0) {
+ return 0;
+ }
+ var result = "";
+ ts.forEach(Object.getOwnPropertyNames(flags), function (v) {
+ if (isFinite(v)) {
+ v = +v;
+ if (f === +v) {
+ result = flags[v];
+ return true;
+ }
+ else if ((f & v) > 0) {
+ if (result.length) {
+ result += " | ";
+ }
+ result += flags[v];
+ return false;
+ }
+ }
+ });
+ return result;
+ }
+ function getNodeFlagName(f) { return getFlagName(ts.NodeFlags, f); }
+ function serializeNode(n) {
+ var o = { kind: getKindName(n.kind) };
+ if (ts.containsParseError(n)) {
+ o.containsParseError = true;
+ }
+ for (var _i = 0, _a = Object.getOwnPropertyNames(n); _i < _a.length; _i++) {
+ var propertyName = _a[_i];
+ switch (propertyName) {
+ case "parent":
+ case "symbol":
+ case "locals":
+ case "localSymbol":
+ case "kind":
+ case "id":
+ case "nodeCount":
+ case "symbolCount":
+ case "identifierCount":
+ case "scriptSnapshot":
+ // Blacklist of items we never put in the baseline file.
+ break;
+ case "originalKeywordKind":
+ o[propertyName] = getKindName(n[propertyName]);
+ break;
+ case "flags":
+ // Clear the flags that are produced by aggregating child values. That is ephemeral
+ // data we don't care about in the dump. We only care what the parser set directly
+ // on the AST.
+ var flags = n.flags & ~(65536 /* JavaScriptFile */ | 262144 /* HasAggregatedChildData */);
+ if (flags) {
+ o[propertyName] = getNodeFlagName(flags);
+ }
+ break;
+ case "parseDiagnostics":
+ o[propertyName] = convertDiagnostics(n[propertyName]);
+ break;
+ case "nextContainer":
+ if (n.nextContainer) {
+ o[propertyName] = { kind: n.nextContainer.kind, pos: n.nextContainer.pos, end: n.nextContainer.end };
+ }
+ break;
+ case "text":
+ // Include 'text' field for identifiers/literals, but not for source files.
+ if (n.kind !== 274 /* SourceFile */) {
+ o[propertyName] = n[propertyName];
+ }
+ break;
+ default:
+ o[propertyName] = n[propertyName];
+ }
+ }
+ return o;
+ }
+ }
+ Utils.sourceFileToJSON = sourceFileToJSON;
+ function assertDiagnosticsEquals(array1, array2) {
+ if (array1 === array2) {
+ return;
+ }
+ assert(array1, "array1");
+ assert(array2, "array2");
+ assert.equal(array1.length, array2.length, "array1.length !== array2.length");
+ for (var i = 0; i < array1.length; i++) {
+ var d1 = array1[i];
+ var d2 = array2[i];
+ assert.equal(d1.start, d2.start, "d1.start !== d2.start");
+ assert.equal(d1.length, d2.length, "d1.length !== d2.length");
+ assert.equal(ts.flattenDiagnosticMessageText(d1.messageText, Harness.IO.newLine()), ts.flattenDiagnosticMessageText(d2.messageText, Harness.IO.newLine()), "d1.messageText !== d2.messageText");
+ assert.equal(d1.category, d2.category, "d1.category !== d2.category");
+ assert.equal(d1.code, d2.code, "d1.code !== d2.code");
+ }
+ }
+ Utils.assertDiagnosticsEquals = assertDiagnosticsEquals;
+ function assertStructuralEquals(node1, node2) {
+ if (node1 === node2) {
+ return;
+ }
+ assert(node1, "node1");
+ assert(node2, "node2");
+ assert.equal(node1.pos, node2.pos, "node1.pos !== node2.pos");
+ assert.equal(node1.end, node2.end, "node1.end !== node2.end");
+ assert.equal(node1.kind, node2.kind, "node1.kind !== node2.kind");
+ // call this on both nodes to ensure all propagated flags have been set (and thus can be
+ // compared).
+ assert.equal(ts.containsParseError(node1), ts.containsParseError(node2));
+ assert.equal(node1.flags & ~1408 /* ReachabilityAndEmitFlags */, node2.flags & ~1408 /* ReachabilityAndEmitFlags */, "node1.flags !== node2.flags");
+ ts.forEachChild(node1, function (child1) {
+ var childName = findChildName(node1, child1);
+ var child2 = node2[childName];
+ assertStructuralEquals(child1, child2);
+ }, function (array1) {
+ var childName = findChildName(node1, array1);
+ var array2 = node2[childName];
+ assertArrayStructuralEquals(array1, array2);
+ });
+ }
+ Utils.assertStructuralEquals = assertStructuralEquals;
+ function assertArrayStructuralEquals(array1, array2) {
+ if (array1 === array2) {
+ return;
+ }
+ assert(array1, "array1");
+ assert(array2, "array2");
+ assert.equal(array1.pos, array2.pos, "array1.pos !== array2.pos");
+ assert.equal(array1.end, array2.end, "array1.end !== array2.end");
+ assert.equal(array1.length, array2.length, "array1.length !== array2.length");
+ for (var i = 0; i < array1.length; i++) {
+ assertStructuralEquals(array1[i], array2[i]);
+ }
+ }
+ function findChildName(parent, child) {
+ for (var name in parent) {
+ if (parent.hasOwnProperty(name) && parent[name] === child) {
+ return name;
+ }
+ }
+ throw new Error("Could not find child in parent");
+ }
+ var maxHarnessFrames = 1;
+ function filterStack(error, stackTraceLimit) {
+ if (stackTraceLimit === void 0) { stackTraceLimit = Infinity; }
+ var stack = error.stack;
+ if (stack) {
+ var lines = stack.split(/\r\n?|\n/g);
+ var filtered = [];
+ var frameCount = 0;
+ var harnessFrameCount = 0;
+ for (var _i = 0, lines_2 = lines; _i < lines_2.length; _i++) {
+ var line = lines_2[_i];
+ if (isStackFrame(line)) {
+ if (frameCount >= stackTraceLimit
+ || isMocha(line)
+ || isNode(line)) {
+ continue;
+ }
+ if (isHarness(line)) {
+ if (harnessFrameCount >= maxHarnessFrames) {
+ continue;
+ }
+ harnessFrameCount++;
+ }
+ line = line.replace(/\bfile:\/\/\/(.*?)(?=(:\d+)*($|\)))/, function (_, path) { return ts.sys.resolvePath(path); });
+ frameCount++;
+ }
+ filtered.push(line);
+ }
+ error.stack = filtered.join(Harness.IO.newLine());
+ }
+ return error;
+ }
+ Utils.filterStack = filterStack;
+ function isStackFrame(line) {
+ return /^\s+at\s/.test(line);
+ }
+ function isMocha(line) {
+ return /[\\/](node_modules|components)[\\/]mocha(js)?[\\/]|[\\/]mocha\.js/.test(line);
+ }
+ function isNode(line) {
+ return /\((timers|events|node|module)\.js:/.test(line);
+ }
+ function isHarness(line) {
+ return /[\\/]src[\\/]harness[\\/]|[\\/]run\.js/.test(line);
+ }
+})(Utils || (Utils = {}));
+var Harness;
+(function (Harness) {
+ // harness always uses one kind of new line
+ // But note that `parseTestData` in `fourslash.ts` uses "\n"
+ Harness.harnessNewLine = "\r\n";
+ // Root for file paths that are stored in a virtual file system
+ Harness.virtualFileSystemRoot = "/";
+ function createNodeIO() {
+ var fs, pathModule;
+ if (require) {
+ fs = require("fs");
+ pathModule = require("path");
+ }
+ else {
+ fs = pathModule = {};
+ }
+ function deleteFile(path) {
+ try {
+ fs.unlinkSync(path);
+ }
+ catch ( /*ignore*/_a) { /*ignore*/ }
+ }
+ function directoryName(path) {
+ var dirPath = pathModule.dirname(path);
+ // Node will just continue to repeat the root path, rather than return null
+ return dirPath === path ? undefined : dirPath;
+ }
+ function enumerateTestFiles(runner) {
+ return runner.enumerateTestFiles();
+ }
+ function listFiles(path, spec, options) {
+ if (options === void 0) { options = {}; }
+ function filesInFolder(folder) {
+ var paths = [];
+ for (var _i = 0, _a = fs.readdirSync(folder); _i < _a.length; _i++) {
+ var file = _a[_i];
+ var pathToFile = pathModule.join(folder, file);
+ var stat = fs.statSync(pathToFile);
+ if (options.recursive && stat.isDirectory()) {
+ paths = paths.concat(filesInFolder(pathToFile));
+ }
+ else if (stat.isFile() && (!spec || file.match(spec))) {
+ paths.push(pathToFile);
+ }
+ }
+ return paths;
+ }
+ return filesInFolder(path);
+ }
+ function getAccessibleFileSystemEntries(dirname) {
+ try {
+ var entries = fs.readdirSync(dirname || ".").sort(ts.sys.useCaseSensitiveFileNames ? ts.compareStringsCaseSensitive : ts.compareStringsCaseInsensitive);
+ var files = [];
+ var directories = [];
+ for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {
+ var entry = entries_1[_i];
+ if (entry === "." || entry === "..")
+ continue;
+ var name = vpath.combine(dirname, entry);
+ try {
+ var stat = fs.statSync(name);
+ if (!stat)
+ continue;
+ if (stat.isFile()) {
+ files.push(entry);
+ }
+ else if (stat.isDirectory()) {
+ directories.push(entry);
+ }
+ }
+ catch ( /*ignore*/_a) { /*ignore*/ }
+ }
+ return { files: files, directories: directories };
+ }
+ catch (e) {
+ return { files: [], directories: [] };
+ }
+ }
+ function createDirectory(path) {
+ try {
+ fs.mkdirSync(path);
+ }
+ catch (e) {
+ if (e.code === "ENOENT") {
+ createDirectory(vpath.dirname(path));
+ createDirectory(path);
+ }
+ else if (!ts.sys.directoryExists(path)) {
+ throw e;
+ }
+ }
+ }
+ return {
+ newLine: function () { return Harness.harnessNewLine; },
+ getCurrentDirectory: function () { return ts.sys.getCurrentDirectory(); },
+ useCaseSensitiveFileNames: function () { return ts.sys.useCaseSensitiveFileNames; },
+ resolvePath: function (path) { return ts.sys.resolvePath(path); },
+ getFileSize: function (path) { return ts.sys.getFileSize(path); },
+ readFile: function (path) { return ts.sys.readFile(path); },
+ writeFile: function (path, content) { return ts.sys.writeFile(path, content); },
+ directoryName: directoryName,
+ getDirectories: function (path) { return ts.sys.getDirectories(path); },
+ createDirectory: createDirectory,
+ fileExists: function (path) { return ts.sys.fileExists(path); },
+ directoryExists: function (path) { return ts.sys.directoryExists(path); },
+ deleteFile: deleteFile,
+ listFiles: listFiles,
+ enumerateTestFiles: enumerateTestFiles,
+ log: function (s) { return console.log(s); },
+ args: function () { return ts.sys.args; },
+ getExecutingFilePath: function () { return ts.sys.getExecutingFilePath(); },
+ getWorkspaceRoot: function () { return vpath.resolve(__dirname, "../.."); },
+ exit: function (exitCode) { return ts.sys.exit(exitCode); },
+ readDirectory: function (path, extension, exclude, include, depth) { return ts.sys.readDirectory(path, extension, exclude, include, depth); },
+ getAccessibleFileSystemEntries: getAccessibleFileSystemEntries,
+ tryEnableSourceMapsForHost: function () { return ts.sys.tryEnableSourceMapsForHost && ts.sys.tryEnableSourceMapsForHost(); },
+ getMemoryUsage: function () { return ts.sys.getMemoryUsage && ts.sys.getMemoryUsage(); },
+ getEnvironmentVariable: function (name) { return ts.sys.getEnvironmentVariable(name); },
+ };
+ }
+ function createBrowserIO() {
+ var serverRoot = new URL("http://localhost:8888/");
+ var HttpHeaders = /** @class */ (function (_super) {
+ __extends(HttpHeaders, _super);
+ function HttpHeaders(template) {
+ var _this = _super.call(this, ts.compareStringsCaseInsensitive) || this;
+ if (template) {
+ for (var key in template) {
+ if (ts.hasProperty(template, key)) {
+ _this.set(key, template[key]);
+ }
+ }
+ }
+ return _this;
+ }
+ HttpHeaders.combine = function (left, right) {
+ if (!left && !right)
+ return undefined;
+ var headers = new HttpHeaders();
+ if (left)
+ left.forEach(function (value, key) { headers.set(key, value); });
+ if (right)
+ right.forEach(function (value, key) { headers.set(key, value); });
+ return headers;
+ };
+ HttpHeaders.prototype.has = function (key) {
+ return _super.prototype.has.call(this, key.toLowerCase());
+ };
+ HttpHeaders.prototype.get = function (key) {
+ return _super.prototype.get.call(this, key.toLowerCase());
+ };
+ HttpHeaders.prototype.set = function (key, value) {
+ return _super.prototype.set.call(this, key.toLowerCase(), value);
+ };
+ HttpHeaders.prototype.delete = function (key) {
+ return _super.prototype.delete.call(this, key.toLowerCase());
+ };
+ HttpHeaders.prototype.writeRequestHeaders = function (xhr) {
+ this.forEach(function (values, key) {
+ if (key === "access-control-allow-origin" || key === "content-length")
+ return;
+ var value = Array.isArray(values) ? values.join(",") : values;
+ if (key === "content-type") {
+ xhr.overrideMimeType(value);
+ return;
+ }
+ xhr.setRequestHeader(key, value);
+ });
+ };
+ HttpHeaders.readResponseHeaders = function (xhr) {
+ var allHeaders = xhr.getAllResponseHeaders();
+ var headers = new HttpHeaders();
+ for (var _i = 0, _a = allHeaders.split(/\r\n/g); _i < _a.length; _i++) {
+ var header = _a[_i];
+ var colonIndex = header.indexOf(":");
+ if (colonIndex >= 0) {
+ var key = header.slice(0, colonIndex).trim();
+ var value = header.slice(colonIndex + 1).trim();
+ var values = value.split(",");
+ headers.set(key, values.length > 1 ? values : value);
+ }
+ }
+ return headers;
+ };
+ return HttpHeaders;
+ }(collections.SortedMap));
+ var HttpContent = /** @class */ (function () {
+ function HttpContent(headers, content) {
+ this.headers = headers instanceof HttpHeaders ? headers : new HttpHeaders(headers);
+ this.content = content;
+ }
+ HttpContent.fromMediaType = function (mediaType, content) {
+ return new HttpContent({ "Content-Type": mediaType }, content);
+ };
+ HttpContent.text = function (content) {
+ return HttpContent.fromMediaType("text/plain", content);
+ };
+ HttpContent.json = function (content) {
+ return HttpContent.fromMediaType("application/json", JSON.stringify(content));
+ };
+ HttpContent.readResponseContent = function (xhr) {
+ if (typeof xhr.responseText === "string") {
+ return new HttpContent({
+ "Content-Type": xhr.getResponseHeader("Content-Type") || undefined,
+ "Content-Length": xhr.getResponseHeader("Content-Length") || undefined,
+ }, xhr.responseText);
+ }
+ return undefined;
+ };
+ HttpContent.prototype.writeRequestHeaders = function (xhr) {
+ this.headers.writeRequestHeaders(xhr);
+ };
+ return HttpContent;
+ }());
+ var HttpRequestMessage = /** @class */ (function () {
+ function HttpRequestMessage(method, url, headers, content) {
+ this.method = method;
+ this.url = typeof url === "string" ? new URL(url) : url;
+ this.headers = headers instanceof HttpHeaders ? headers : new HttpHeaders(headers);
+ this.content = content;
+ }
+ HttpRequestMessage.options = function (url) {
+ return new HttpRequestMessage("OPTIONS", url);
+ };
+ HttpRequestMessage.head = function (url) {
+ return new HttpRequestMessage("HEAD", url);
+ };
+ HttpRequestMessage.get = function (url) {
+ return new HttpRequestMessage("GET", url);
+ };
+ HttpRequestMessage.delete = function (url) {
+ return new HttpRequestMessage("DELETE", url);
+ };
+ HttpRequestMessage.put = function (url, content) {
+ return new HttpRequestMessage("PUT", url, /*headers*/ undefined, content);
+ };
+ HttpRequestMessage.post = function (url, content) {
+ return new HttpRequestMessage("POST", url, /*headers*/ undefined, content);
+ };
+ HttpRequestMessage.prototype.writeRequestHeaders = function (xhr) {
+ this.headers.writeRequestHeaders(xhr);
+ if (this.content) {
+ this.content.writeRequestHeaders(xhr);
+ }
+ };
+ return HttpRequestMessage;
+ }());
+ var HttpResponseMessage = /** @class */ (function () {
+ function HttpResponseMessage(statusCode, statusMessage, headers, content) {
+ this.statusCode = statusCode;
+ this.statusMessage = statusMessage;
+ this.headers = headers instanceof HttpHeaders ? headers : new HttpHeaders(headers);
+ this.content = content;
+ }
+ HttpResponseMessage.notFound = function () {
+ return new HttpResponseMessage(404, "Not Found");
+ };
+ HttpResponseMessage.hasSuccessStatusCode = function (response) {
+ return response.statusCode === 304 || (response.statusCode >= 200 && response.statusCode < 300);
+ };
+ HttpResponseMessage.readResponseMessage = function (xhr) {
+ return new HttpResponseMessage(xhr.status, xhr.statusText, HttpHeaders.readResponseHeaders(xhr), HttpContent.readResponseContent(xhr));
+ };
+ return HttpResponseMessage;
+ }());
+ function send(request) {
+ var xhr = new XMLHttpRequest();
+ try {
+ xhr.open(request.method, request.url.toString(), /*async*/ false);
+ request.writeRequestHeaders(xhr);
+ xhr.setRequestHeader("Access-Control-Allow-Origin", "*");
+ xhr.send(request.content && request.content.content);
+ while (xhr.readyState !== 4)
+ ; // block until ready
+ return HttpResponseMessage.readResponseMessage(xhr);
+ }
+ catch (e) {
+ return HttpResponseMessage.notFound();
+ }
+ }
+ var caseSensitivity;
+ function useCaseSensitiveFileNames() {
+ if (!caseSensitivity) {
+ var response = send(HttpRequestMessage.options(new URL("*", serverRoot)));
+ var xCaseSensitivity = response.headers.get("X-Case-Sensitivity");
+ caseSensitivity = xCaseSensitivity === "CS" ? "CS" : "CI";
+ }
+ return caseSensitivity === "CS";
+ }
+ function resolvePath(path) {
+ var response = send(HttpRequestMessage.post(new URL("/api/resolve", serverRoot), HttpContent.text(path)));
+ return HttpResponseMessage.hasSuccessStatusCode(response) && response.content ? response.content.content : undefined;
+ }
+ function getFileSize(path) {
+ var response = send(HttpRequestMessage.head(new URL(path, serverRoot)));
+ return HttpResponseMessage.hasSuccessStatusCode(response) ? +response.headers.get("Content-Length").toString() : 0;
+ }
+ function readFile(path) {
+ var response = send(HttpRequestMessage.get(new URL(path, serverRoot)));
+ return HttpResponseMessage.hasSuccessStatusCode(response) && response.content ? response.content.content : undefined;
+ }
+ function writeFile(path, contents) {
+ send(HttpRequestMessage.put(new URL(path, serverRoot), HttpContent.text(contents)));
+ }
+ function fileExists(path) {
+ var response = send(HttpRequestMessage.head(new URL(path, serverRoot)));
+ return HttpResponseMessage.hasSuccessStatusCode(response);
+ }
+ function directoryExists(path) {
+ var response = send(HttpRequestMessage.post(new URL("/api/directoryExists", serverRoot), HttpContent.text(path)));
+ return hasJsonContent(response) && JSON.parse(response.content.content);
+ }
+ function deleteFile(path) {
+ send(HttpRequestMessage.delete(new URL(path, serverRoot)));
+ }
+ function directoryName(path) {
+ var url = new URL(path, serverRoot);
+ return ts.getDirectoryPath(ts.normalizeSlashes(url.pathname || "/"));
+ }
+ function enumerateTestFiles(runner) {
+ var response = send(HttpRequestMessage.post(new URL("/api/enumerateTestFiles", serverRoot), HttpContent.text(runner.kind())));
+ return hasJsonContent(response) ? JSON.parse(response.content.content) : [];
+ }
+ function listFiles(dirname, spec, options) {
+ if (spec || (options && !options.recursive)) {
+ var results = Harness.IO.listFiles(dirname);
+ if (spec) {
+ results = results.filter(function (file) { return spec.test(file); });
+ }
+ if (options && !options.recursive) {
+ results = results.filter(function (file) { return ts.getDirectoryPath(ts.normalizeSlashes(file)) === dirname; });
+ }
+ return results;
+ }
+ var response = send(HttpRequestMessage.post(new URL("/api/listFiles", serverRoot), HttpContent.text(dirname)));
+ return hasJsonContent(response) ? JSON.parse(response.content.content) : [];
+ }
+ function readDirectory(path, extension, exclude, include, depth) {
+ return ts.matchFiles(path, extension, exclude, include, useCaseSensitiveFileNames(), "", depth, getAccessibleFileSystemEntries);
+ }
+ function getAccessibleFileSystemEntries(dirname) {
+ var response = send(HttpRequestMessage.post(new URL("/api/getAccessibleFileSystemEntries", serverRoot), HttpContent.text(dirname)));
+ return hasJsonContent(response) ? JSON.parse(response.content.content) : { files: [], directories: [] };
+ }
+ function hasJsonContent(response) {
+ return HttpResponseMessage.hasSuccessStatusCode(response)
+ && !!response.content
+ && /^application\/json(;.*)$/.test("" + response.content.headers.get("Content-Type"));
+ }
+ return {
+ newLine: function () { return Harness.harnessNewLine; },
+ getCurrentDirectory: function () { return ""; },
+ useCaseSensitiveFileNames: useCaseSensitiveFileNames,
+ resolvePath: resolvePath,
+ getFileSize: getFileSize,
+ readFile: readFile,
+ writeFile: writeFile,
+ directoryName: Utils.memoize(directoryName, function (path) { return path; }),
+ getDirectories: function () { return []; },
+ createDirectory: function () { },
+ fileExists: fileExists,
+ directoryExists: directoryExists,
+ deleteFile: deleteFile,
+ listFiles: Utils.memoize(listFiles, function (path, spec, options) { return path + "|" + spec + "|" + (options ? options.recursive === true : true); }),
+ enumerateTestFiles: Utils.memoize(enumerateTestFiles, function (runner) { return runner.kind(); }),
+ log: function (s) { return console.log(s); },
+ args: function () { return []; },
+ getExecutingFilePath: function () { return ""; },
+ exit: function () { },
+ readDirectory: readDirectory,
+ getAccessibleFileSystemEntries: getAccessibleFileSystemEntries,
+ getWorkspaceRoot: function () { return "/"; }
+ };
+ }
+ function mockHash(s) {
+ return "hash-" + s;
+ }
+ Harness.mockHash = mockHash;
+ var environment = Utils.getExecutionEnvironment();
+ switch (environment) {
+ case 0 /* Node */:
+ Harness.IO = createNodeIO();
+ break;
+ case 1 /* Browser */:
+ Harness.IO = createBrowserIO();
+ break;
+ default:
+ throw new Error("Unknown value '" + environment + "' for ExecutionEnvironment.");
+ }
+})(Harness || (Harness = {}));
+if (Harness.IO.tryEnableSourceMapsForHost && /^development$/i.test(Harness.IO.getEnvironmentVariable("NODE_ENV"))) {
+ Harness.IO.tryEnableSourceMapsForHost();
+}
+(function (Harness) {
+ Harness.libFolder = "built/local/";
+ var tcServicesFileName = ts.combinePaths(Harness.libFolder, Utils.getExecutionEnvironment() === 1 /* Browser */ ? "typescriptServicesInBrowserTest.js" : "typescriptServices.js");
+ Harness.tcServicesFile = Harness.IO.readFile(tcServicesFileName) + (Utils.getExecutionEnvironment() !== 1 /* Browser */
+ ? Harness.IO.newLine() + ("//# sourceURL=" + Harness.IO.resolvePath(tcServicesFileName))
+ : "");
+ // Settings
+ Harness.userSpecifiedRoot = "";
+ Harness.lightMode = false;
+ /** Functionality for compiling TypeScript code */
+ var Compiler;
+ (function (Compiler) {
+ /** Aggregate various writes into a single array of lines. Useful for passing to the
+ * TypeScript compiler to fill with source code or errors.
+ */
+ var WriterAggregator = /** @class */ (function () {
+ function WriterAggregator() {
+ this.lines = [];
+ this.currentLine = undefined;
+ }
+ WriterAggregator.prototype.Write = function (str) {
+ // out of memory usage concerns avoid using + or += if we're going to do any manipulation of this string later
+ this.currentLine = [(this.currentLine || ""), str].join("");
+ };
+ WriterAggregator.prototype.WriteLine = function (str) {
+ // out of memory usage concerns avoid using + or += if we're going to do any manipulation of this string later
+ this.lines.push([(this.currentLine || ""), str].join(""));
+ this.currentLine = undefined;
+ };
+ WriterAggregator.prototype.Close = function () {
+ if (this.currentLine !== undefined) {
+ this.lines.push(this.currentLine);
+ }
+ this.currentLine = undefined;
+ };
+ WriterAggregator.prototype.reset = function () {
+ this.lines = [];
+ this.currentLine = undefined;
+ };
+ return WriterAggregator;
+ }());
+ Compiler.WriterAggregator = WriterAggregator;
+ function createSourceFileAndAssertInvariants(fileName, sourceText, languageVersion) {
+ // We'll only assert invariants outside of light mode.
+ var shouldAssertInvariants = !Harness.lightMode;
+ // Only set the parent nodes if we're asserting invariants. We don't need them otherwise.
+ var result = ts.createSourceFile(fileName, sourceText, languageVersion, /*setParentNodes:*/ shouldAssertInvariants);
+ if (shouldAssertInvariants) {
+ Utils.assertInvariants(result, /*parent:*/ undefined);
+ }
+ return result;
+ }
+ Compiler.createSourceFileAndAssertInvariants = createSourceFileAndAssertInvariants;
+ Compiler.defaultLibFileName = "lib.d.ts";
+ Compiler.es2015DefaultLibFileName = "lib.es2015.d.ts";
+ // Cache of lib files from "built/local"
+ var libFileNameSourceFileMap;
+ function getDefaultLibrarySourceFile(fileName) {
+ if (fileName === void 0) { fileName = Compiler.defaultLibFileName; }
+ var _a;
+ if (!isDefaultLibraryFile(fileName)) {
+ return undefined;
+ }
+ if (!libFileNameSourceFileMap) {
+ libFileNameSourceFileMap = ts.createMapFromTemplate((_a = {},
+ _a[Compiler.defaultLibFileName] = createSourceFileAndAssertInvariants(Compiler.defaultLibFileName, Harness.IO.readFile(Harness.libFolder + "lib.es5.d.ts"), /*languageVersion*/ 6 /* Latest */),
+ _a));
+ }
+ var sourceFile = libFileNameSourceFileMap.get(fileName);
+ if (!sourceFile) {
+ libFileNameSourceFileMap.set(fileName, sourceFile = createSourceFileAndAssertInvariants(fileName, Harness.IO.readFile(Harness.libFolder + fileName), 6 /* Latest */));
+ }
+ return sourceFile;
+ }
+ Compiler.getDefaultLibrarySourceFile = getDefaultLibrarySourceFile;
+ function getDefaultLibFileName(options) {
+ switch (options.target) {
+ case 6 /* ESNext */:
+ case 4 /* ES2017 */:
+ return "lib.es2017.d.ts";
+ case 3 /* ES2016 */:
+ return "lib.es2016.d.ts";
+ case 2 /* ES2015 */:
+ return Compiler.es2015DefaultLibFileName;
+ default:
+ return Compiler.defaultLibFileName;
+ }
+ }
+ Compiler.getDefaultLibFileName = getDefaultLibFileName;
+ // Cache these between executions so we don't have to re-parse them for every test
+ Compiler.fourslashFileName = "fourslash.ts";
+ function getCanonicalFileName(fileName) {
+ return fileName;
+ }
+ Compiler.getCanonicalFileName = getCanonicalFileName;
+ // Additional options not already in ts.optionDeclarations
+ var harnessOptionDeclarations = [
+ { name: "allowNonTsExtensions", type: "boolean" },
+ { name: "useCaseSensitiveFileNames", type: "boolean" },
+ { name: "baselineFile", type: "string" },
+ { name: "includeBuiltFile", type: "string" },
+ { name: "fileName", type: "string" },
+ { name: "libFiles", type: "string" },
+ { name: "noErrorTruncation", type: "boolean" },
+ { name: "suppressOutputPathCheck", type: "boolean" },
+ { name: "noImplicitReferences", type: "boolean" },
+ { name: "currentDirectory", type: "string" },
+ { name: "symlink", type: "string" },
+ // Emitted js baseline will print full paths for every output file
+ { name: "fullEmitPaths", type: "boolean" }
+ ];
+ var optionsIndex;
+ function getCommandLineOption(name) {
+ if (!optionsIndex) {
+ optionsIndex = ts.createMap();
+ var optionDeclarations = harnessOptionDeclarations.concat(ts.optionDeclarations);
+ for (var _i = 0, optionDeclarations_1 = optionDeclarations; _i < optionDeclarations_1.length; _i++) {
+ var option = optionDeclarations_1[_i];
+ optionsIndex.set(option.name.toLowerCase(), option);
+ }
+ }
+ return optionsIndex.get(name.toLowerCase());
+ }
+ function setCompilerOptionsFromHarnessSetting(settings, options) {
+ for (var name in settings) {
+ if (settings.hasOwnProperty(name)) {
+ var value = settings[name];
+ if (value === undefined) {
+ throw new Error("Cannot have undefined value for compiler option '" + name + "'.");
+ }
+ var option = getCommandLineOption(name);
+ if (option) {
+ var errors = [];
+ options[option.name] = optionValue(option, value, errors);
+ if (errors.length > 0) {
+ throw new Error("Unknown value '" + value + "' for compiler option '" + name + "'.");
+ }
+ }
+ else {
+ throw new Error("Unknown compiler option '" + name + "'.");
+ }
+ }
+ }
+ }
+ Compiler.setCompilerOptionsFromHarnessSetting = setCompilerOptionsFromHarnessSetting;
+ function optionValue(option, value, errors) {
+ switch (option.type) {
+ case "boolean":
+ return value.toLowerCase() === "true";
+ case "string":
+ return value;
+ case "number": {
+ var numverValue = parseInt(value, 10);
+ if (isNaN(numverValue)) {
+ throw new Error("Value must be a number, got: " + JSON.stringify(value));
+ }
+ return numverValue;
+ }
+ // If not a primitive, the possible types are specified in what is effectively a map of options.
+ case "list":
+ return ts.parseListTypeOption(option, value, errors);
+ default:
+ return ts.parseCustomTypeOption(option, value, errors);
+ }
+ }
+ function compileFiles(inputFiles, otherFiles, harnessSettings, compilerOptions,
+ // Current directory is needed for rwcRunner to be able to use currentDirectory defined in json file
+ currentDirectory) {
+ var options = compilerOptions ? ts.cloneCompilerOptions(compilerOptions) : { noResolve: false };
+ options.target = options.target || 0 /* ES3 */;
+ options.newLine = options.newLine || 0 /* CarriageReturnLineFeed */;
+ options.noErrorTruncation = true;
+ options.skipDefaultLibCheck = typeof options.skipDefaultLibCheck === "undefined" ? true : options.skipDefaultLibCheck;
+ if (typeof currentDirectory === "undefined") {
+ currentDirectory = vfs.srcFolder;
+ }
+ // Parse settings
+ if (harnessSettings) {
+ setCompilerOptionsFromHarnessSetting(harnessSettings, options);
+ }
+ if (options.rootDirs) {
+ options.rootDirs = ts.map(options.rootDirs, function (d) { return ts.getNormalizedAbsolutePath(d, currentDirectory); });
+ }
+ var useCaseSensitiveFileNames = options.useCaseSensitiveFileNames !== undefined ? options.useCaseSensitiveFileNames : true;
+ var programFileNames = inputFiles.map(function (file) { return file.unitName; }).filter(function (fileName) { return !ts.fileExtensionIs(fileName, ".json" /* Json */); });
+ // Files from built\local that are requested by test "@includeBuiltFiles" to be in the context.
+ // Treat them as library files, so include them in build, but not in baselines.
+ if (options.includeBuiltFile) {
+ programFileNames.push(vpath.combine(vfs.builtFolder, options.includeBuiltFile));
+ }
+ // Files from tests\lib that are requested by "@libFiles"
+ if (options.libFiles) {
+ for (var _i = 0, _a = options.libFiles.split(","); _i < _a.length; _i++) {
+ var fileName = _a[_i];
+ programFileNames.push(vpath.combine(vfs.testLibFolder, fileName));
+ }
+ }
+ var docs = inputFiles.concat(otherFiles).map(documents.TextDocument.fromTestFile);
+ var fs = vfs.createFromFileSystem(Harness.IO, !useCaseSensitiveFileNames, { documents: docs, cwd: currentDirectory });
+ var host = new fakes.CompilerHost(fs, options);
+ return compiler.compileFiles(host, programFileNames, options);
+ }
+ Compiler.compileFiles = compileFiles;
+ function prepareDeclarationCompilationContext(inputFiles, otherFiles, result, harnessSettings, options,
+ // Current directory is needed for rwcRunner to be able to use currentDirectory defined in json file
+ currentDirectory) {
+ if (options.declaration && result.diagnostics.length === 0) {
+ if (options.emitDeclarationOnly) {
+ if (result.js.size > 0 || result.dts.size === 0) {
+ throw new Error("Only declaration files should be generated when emitDeclarationOnly:true");
+ }
+ }
+ else if (result.dts.size !== result.getNumberOfJsFiles()) {
+ throw new Error("There were no errors and declFiles generated did not match number of js files generated");
+ }
+ }
+ var declInputFiles = [];
+ var declOtherFiles = [];
+ // if the .d.ts is non-empty, confirm it compiles correctly as well
+ if (options.declaration && result.diagnostics.length === 0 && result.dts.size > 0) {
+ ts.forEach(inputFiles, function (file) { return addDtsFile(file, declInputFiles); });
+ ts.forEach(otherFiles, function (file) { return addDtsFile(file, declOtherFiles); });
+ return { declInputFiles: declInputFiles, declOtherFiles: declOtherFiles, harnessSettings: harnessSettings, options: options, currentDirectory: currentDirectory || harnessSettings.currentDirectory };
+ }
+ function addDtsFile(file, dtsFiles) {
+ if (vpath.isDeclaration(file.unitName)) {
+ dtsFiles.push(file);
+ }
+ else if (vpath.isTypeScript(file.unitName)) {
+ var declFile = findResultCodeFile(file.unitName);
+ if (declFile && !findUnit(declFile.file, declInputFiles) && !findUnit(declFile.file, declOtherFiles)) {
+ dtsFiles.push({ unitName: declFile.file, content: utils.removeByteOrderMark(declFile.text) });
+ }
+ }
+ }
+ function findResultCodeFile(fileName) {
+ var sourceFile = result.program.getSourceFile(fileName);
+ assert(sourceFile, "Program has no source file with name '" + fileName + "'");
+ // Is this file going to be emitted separately
+ var sourceFileName;
+ var outFile = options.outFile || options.out;
+ if (!outFile) {
+ if (options.outDir) {
+ var sourceFilePath = ts.getNormalizedAbsolutePath(sourceFile.fileName, result.vfs.cwd());
+ sourceFilePath = sourceFilePath.replace(result.program.getCommonSourceDirectory(), "");
+ sourceFileName = ts.combinePaths(options.outDir, sourceFilePath);
+ }
+ else {
+ sourceFileName = sourceFile.fileName;
+ }
+ }
+ else {
+ // Goes to single --out file
+ sourceFileName = outFile;
+ }
+ var dTsFileName = ts.removeFileExtension(sourceFileName) + ".d.ts" /* Dts */;
+ return result.dts.get(dTsFileName);
+ }
+ function findUnit(fileName, units) {
+ return ts.forEach(units, function (unit) { return unit.unitName === fileName ? unit : undefined; });
+ }
+ }
+ Compiler.prepareDeclarationCompilationContext = prepareDeclarationCompilationContext;
+ function compileDeclarationFiles(context) {
+ if (!context) {
+ return;
+ }
+ var declInputFiles = context.declInputFiles, declOtherFiles = context.declOtherFiles, harnessSettings = context.harnessSettings, options = context.options, currentDirectory = context.currentDirectory;
+ var output = compileFiles(declInputFiles, declOtherFiles, harnessSettings, options, currentDirectory);
+ return { declInputFiles: declInputFiles, declOtherFiles: declOtherFiles, declResult: output };
+ }
+ Compiler.compileDeclarationFiles = compileDeclarationFiles;
+ function minimalDiagnosticsToString(diagnostics, pretty) {
+ var host = { getCanonicalFileName: getCanonicalFileName, getCurrentDirectory: function () { return ""; }, getNewLine: function () { return Harness.IO.newLine(); } };
+ return (pretty ? ts.formatDiagnosticsWithColorAndContext : ts.formatDiagnostics)(diagnostics, host);
+ }
+ Compiler.minimalDiagnosticsToString = minimalDiagnosticsToString;
+ function getErrorBaseline(inputFiles, diagnostics, pretty) {
+ var _a;
+ var outputLines = "";
+ var gen = iterateErrorBaseline(inputFiles, diagnostics, { pretty: pretty });
+ for (var _b = gen.next(), done = _b.done, value = _b.value; !done; _a = gen.next(), done = _a.done, value = _a.value, _a) {
+ var content = value[1];
+ outputLines += content;
+ }
+ return outputLines;
+ }
+ Compiler.getErrorBaseline = getErrorBaseline;
+ Compiler.diagnosticSummaryMarker = "__diagnosticSummary";
+ Compiler.globalErrorsMarker = "__globalErrors";
+ function iterateErrorBaseline(inputFiles, diagnostics, options) {
+ function newLine() {
+ if (firstLine) {
+ firstLine = false;
+ return "";
+ }
+ return "\r\n";
+ }
+ function outputErrorText(error) {
+ var message = ts.flattenDiagnosticMessageText(error.messageText, Harness.IO.newLine());
+ var errLines = utils.removeTestPathPrefixes(message)
+ .split("\n")
+ .map(function (s) { return s.length > 0 && s.charAt(s.length - 1) === "\r" ? s.substr(0, s.length - 1) : s; })
+ .filter(function (s) { return s.length > 0; })
+ .map(function (s) { return "!!! " + ts.diagnosticCategoryName(error) + " TS" + error.code + ": " + s; });
+ errLines.forEach(function (e) { return outputLines += (newLine() + e); });
+ errorsReported++;
+ // do not count errors from lib.d.ts here, they are computed separately as numLibraryDiagnostics
+ // if lib.d.ts is explicitly included in input files and there are some errors in it (i.e. because of duplicate identifiers)
+ // then they will be added twice thus triggering 'total errors' assertion with condition
+ // 'totalErrorsReportedInNonLibraryFiles + numLibraryDiagnostics + numTest262HarnessDiagnostics, diagnostics.length
+ if (!error.file || !isDefaultLibraryFile(error.file.fileName)) {
+ totalErrorsReportedInNonLibraryFiles++;
+ }
+ }
+ var outputLines, totalErrorsReportedInNonLibraryFiles, errorsReported, firstLine, globalErrors, dupeCase, _loop_1, _i, _a, inputFile, numLibraryDiagnostics, numTest262HarnessDiagnostics;
+ return __generator(this, function (_b) {
+ switch (_b.label) {
+ case 0:
+ diagnostics = ts.sort(diagnostics, ts.compareDiagnostics);
+ outputLines = "";
+ totalErrorsReportedInNonLibraryFiles = 0;
+ errorsReported = 0;
+ firstLine = true;
+ return [4 /*yield*/, [Compiler.diagnosticSummaryMarker, utils.removeTestPathPrefixes(minimalDiagnosticsToString(diagnostics, options && options.pretty)) + Harness.IO.newLine() + Harness.IO.newLine(), diagnostics.length]];
+ case 1:
+ _b.sent();
+ globalErrors = diagnostics.filter(function (err) { return !err.file; });
+ globalErrors.forEach(outputErrorText);
+ return [4 /*yield*/, [Compiler.globalErrorsMarker, outputLines, errorsReported]];
+ case 2:
+ _b.sent();
+ outputLines = "";
+ errorsReported = 0;
+ dupeCase = ts.createMap();
+ _loop_1 = function (inputFile) {
+ var fileErrors, markedErrorCount, lineStarts, lines, isDupe;
+ return __generator(this, function (_a) {
+ switch (_a.label) {
+ case 0:
+ fileErrors = diagnostics.filter(function (e) {
+ var errFn = e.file;
+ return !!errFn && ts.comparePaths(utils.removeTestPathPrefixes(errFn.fileName), utils.removeTestPathPrefixes(inputFile.unitName), options && options.currentDirectory || "", !(options && options.caseSensitive)) === 0 /* EqualTo */;
+ });
+ // Header
+ outputLines += (newLine() + "==== " + inputFile.unitName + " (" + fileErrors.length + " errors) ====");
+ markedErrorCount = 0;
+ lineStarts = ts.computeLineStarts(inputFile.content);
+ lines = inputFile.content.split("\n");
+ if (lines.length === 1) {
+ lines = lines[0].split("\r");
+ }
+ lines.forEach(function (line, lineIndex) {
+ if (line.length > 0 && line.charAt(line.length - 1) === "\r") {
+ line = line.substr(0, line.length - 1);
+ }
+ var thisLineStart = lineStarts[lineIndex];
+ var nextLineStart;
+ // On the last line of the file, fake the next line start number so that we handle errors on the last character of the file correctly
+ if (lineIndex === lines.length - 1) {
+ nextLineStart = inputFile.content.length;
+ }
+ else {
+ nextLineStart = lineStarts[lineIndex + 1];
+ }
+ // Emit this line from the original file
+ outputLines += (newLine() + " " + line);
+ fileErrors.forEach(function (errDiagnostic) {
+ var err = errDiagnostic; // TODO: GH#18217
+ // Does any error start or continue on to this line? Emit squiggles
+ var end = ts.textSpanEnd(err);
+ if ((end >= thisLineStart) && ((err.start < nextLineStart) || (lineIndex === lines.length - 1))) {
+ // How many characters from the start of this line the error starts at (could be positive or negative)
+ var relativeOffset = err.start - thisLineStart;
+ // How many characters of the error are on this line (might be longer than this line in reality)
+ var length = (end - err.start) - Math.max(0, thisLineStart - err.start);
+ // Calculate the start of the squiggle
+ var squiggleStart = Math.max(0, relativeOffset);
+ // TODO/REVIEW: this doesn't work quite right in the browser if a multi file test has files whose names are just the right length relative to one another
+ outputLines += (newLine() + " " + line.substr(0, squiggleStart).replace(/[^\s]/g, " ") + new Array(Math.min(length, line.length - squiggleStart) + 1).join("~"));
+ // If the error ended here, or we're at the end of the file, emit its message
+ if ((lineIndex === lines.length - 1) || nextLineStart > end) {
+ // Just like above, we need to do a split on a string instead of on a regex
+ // because the JS engine does regexes wrong
+ outputErrorText(errDiagnostic);
+ markedErrorCount++;
+ }
+ }
+ });
+ });
+ // Verify we didn't miss any errors in this file
+ assert.equal(markedErrorCount, fileErrors.length, "count of errors in " + inputFile.unitName);
+ isDupe = dupeCase.has(sanitizeTestFilePath(inputFile.unitName));
+ return [4 /*yield*/, [checkDuplicatedFileName(inputFile.unitName, dupeCase), outputLines, errorsReported]];
+ case 1:
+ _a.sent();
+ if (isDupe && !(options && options.caseSensitive)) {
+ // Case-duplicated files on a case-insensitive build will have errors reported in both the dupe and the original
+ // thanks to the canse-insensitive path comparison on the error file path - We only want to count those errors once
+ // for the assert below, so we subtract them here.
+ totalErrorsReportedInNonLibraryFiles -= errorsReported;
+ }
+ outputLines = "";
+ errorsReported = 0;
+ return [2 /*return*/];
+ }
+ });
+ };
+ _i = 0, _a = inputFiles.filter(function (f) { return f.content !== undefined; });
+ _b.label = 3;
+ case 3:
+ if (!(_i < _a.length)) return [3 /*break*/, 6];
+ inputFile = _a[_i];
+ return [5 /*yield**/, _loop_1(inputFile)];
+ case 4:
+ _b.sent();
+ _b.label = 5;
+ case 5:
+ _i++;
+ return [3 /*break*/, 3];
+ case 6:
+ numLibraryDiagnostics = ts.countWhere(diagnostics, function (diagnostic) {
+ return !!diagnostic.file && (isDefaultLibraryFile(diagnostic.file.fileName) || isBuiltFile(diagnostic.file.fileName));
+ });
+ numTest262HarnessDiagnostics = ts.countWhere(diagnostics, function (diagnostic) {
+ // Count an error generated from tests262-harness folder.This should only apply for test262
+ return !!diagnostic.file && diagnostic.file.fileName.indexOf("test262-harness") >= 0;
+ });
+ // Verify we didn't miss any errors in total
+ assert.equal(totalErrorsReportedInNonLibraryFiles + numLibraryDiagnostics + numTest262HarnessDiagnostics, diagnostics.length, "total number of errors");
+ return [2 /*return*/];
+ }
+ });
+ }
+ Compiler.iterateErrorBaseline = iterateErrorBaseline;
+ function doErrorBaseline(baselinePath, inputFiles, errors, pretty) {
+ Baseline.runBaseline(baselinePath.replace(/\.tsx?$/, ".errors.txt"), function () {
+ if (!errors || (errors.length === 0)) {
+ /* tslint:disable:no-null-keyword */
+ return null;
+ /* tslint:enable:no-null-keyword */
+ }
+ return getErrorBaseline(inputFiles, errors, pretty);
+ });
+ }
+ Compiler.doErrorBaseline = doErrorBaseline;
+ function doTypeAndSymbolBaseline(baselinePath, program, allFiles, opts, multifile, skipTypeBaselines, skipSymbolBaselines) {
+ // The full walker simulates the types that you would get from doing a full
+ // compile. The pull walker simulates the types you get when you just do
+ // a type query for a random node (like how the LS would do it). Most of the
+ // time, these will be the same. However, occasionally, they can be different.
+ // Specifically, when the compiler internally depends on symbol IDs to order
+ // things, then we may see different results because symbols can be created in a
+ // different order with 'pull' operations, and thus can produce slightly differing
+ // output.
+ //
+ // For example, with a full type check, we may see a type displayed as: number | string
+ // But with a pull type check, we may see it as: string | number
+ //
+ // These types are equivalent, but depend on what order the compiler observed
+ // certain parts of the program.
+ var fullWalker = new TypeWriterWalker(program, /*fullTypeCheck*/ true);
+ // Produce baselines. The first gives the types for all expressions.
+ // The second gives symbols for all identifiers.
+ var typesError, symbolsError;
+ try {
+ checkBaseLines(/*isSymbolBaseLine*/ false);
+ }
+ catch (e) {
+ typesError = e;
+ }
+ try {
+ checkBaseLines(/*isSymbolBaseLine*/ true);
+ }
+ catch (e) {
+ symbolsError = e;
+ }
+ if (typesError && symbolsError) {
+ throw new Error(typesError.stack + Harness.IO.newLine() + symbolsError.stack);
+ }
+ if (typesError) {
+ throw typesError;
+ }
+ if (symbolsError) {
+ throw symbolsError;
+ }
+ return;
+ function checkBaseLines(isSymbolBaseLine) {
+ var fullExtension = isSymbolBaseLine ? ".symbols" : ".types";
+ // When calling this function from rwc-runner, the baselinePath will have no extension.
+ // As rwc test- file is stored in json which ".json" will get stripped off.
+ // When calling this function from compiler-runner, the baselinePath will then has either ".ts" or ".tsx" extension
+ var outputFileName = ts.endsWith(baselinePath, ".ts" /* Ts */) || ts.endsWith(baselinePath, ".tsx" /* Tsx */) ?
+ baselinePath.replace(/\.tsx?/, "") : baselinePath;
+ if (!multifile) {
+ var fullBaseLine_1 = generateBaseLine(isSymbolBaseLine, isSymbolBaseLine ? skipSymbolBaselines : skipTypeBaselines);
+ Baseline.runBaseline(outputFileName + fullExtension, function () { return fullBaseLine_1; }, opts);
+ }
+ else {
+ Baseline.runMultifileBaseline(outputFileName, fullExtension, function () {
+ return iterateBaseLine(isSymbolBaseLine, isSymbolBaseLine ? skipSymbolBaselines : skipTypeBaselines);
+ }, opts);
+ }
+ }
+ function generateBaseLine(isSymbolBaseline, skipBaseline) {
+ var _a;
+ var result = "";
+ var gen = iterateBaseLine(isSymbolBaseline, skipBaseline);
+ for (var _b = gen.next(), done = _b.done, value = _b.value; !done; _a = gen.next(), done = _a.done, value = _a.value, _a) {
+ var content = value[1];
+ result += content;
+ }
+ /* tslint:disable:no-null-keyword */
+ return result || null;
+ /* tslint:enable:no-null-keyword */
+ }
+ function iterateBaseLine(isSymbolBaseline, skipBaseline) {
+ var _a, dupeCase, _i, allFiles_1, file, unitName, typeLines, codeLines, gen, lastIndexWritten, _b, done, result, typeOrSymbolString, formattedLine, _c, codeLines_1, codeLine;
+ return __generator(this, function (_d) {
+ switch (_d.label) {
+ case 0:
+ if (skipBaseline) {
+ return [2 /*return*/];
+ }
+ dupeCase = ts.createMap();
+ _i = 0, allFiles_1 = allFiles;
+ _d.label = 1;
+ case 1:
+ if (!(_i < allFiles_1.length)) return [3 /*break*/, 4];
+ file = allFiles_1[_i];
+ unitName = file.unitName;
+ typeLines = "=== " + unitName + " ===\r\n";
+ codeLines = ts.flatMap(file.content.split(/\r?\n/g), function (e) { return e.split(/[\r\u2028\u2029]/g); });
+ gen = isSymbolBaseline ? fullWalker.getSymbols(unitName) : fullWalker.getTypes(unitName);
+ lastIndexWritten = void 0;
+ for (_b = gen.next(), done = _b.done, result = _b.value; !done; _a = gen.next(), done = _a.done, result = _a.value, _a) {
+ if (isSymbolBaseline && !result.symbol) {
+ return [2 /*return*/];
+ }
+ if (lastIndexWritten === undefined) {
+ typeLines += codeLines.slice(0, result.line + 1).join("\r\n") + "\r\n";
+ }
+ else if (result.line !== lastIndexWritten) {
+ if (!((lastIndexWritten + 1 < codeLines.length) && (codeLines[lastIndexWritten + 1].match(/^\s*[{|}]\s*$/) || codeLines[lastIndexWritten + 1].trim() === ""))) {
+ typeLines += "\r\n";
+ }
+ typeLines += codeLines.slice(lastIndexWritten + 1, result.line + 1).join("\r\n") + "\r\n";
+ }
+ lastIndexWritten = result.line;
+ typeOrSymbolString = isSymbolBaseline ? result.symbol : result.type;
+ formattedLine = result.sourceText.replace(/\r?\n/g, "") + " : " + typeOrSymbolString;
+ typeLines += ">" + formattedLine + "\r\n";
+ }
+ // Preserve legacy behavior
+ if (lastIndexWritten === undefined) {
+ for (_c = 0, codeLines_1 = codeLines; _c < codeLines_1.length; _c++) {
+ codeLine = codeLines_1[_c];
+ typeLines += codeLine + "\r\nNo type information for this code.";
+ }
+ }
+ else {
+ if (lastIndexWritten + 1 < codeLines.length) {
+ if (!((lastIndexWritten + 1 < codeLines.length) && (codeLines[lastIndexWritten + 1].match(/^\s*[{|}]\s*$/) || codeLines[lastIndexWritten + 1].trim() === ""))) {
+ typeLines += "\r\n";
+ }
+ typeLines += codeLines.slice(lastIndexWritten + 1).join("\r\n");
+ }
+ typeLines += "\r\n";
+ }
+ return [4 /*yield*/, [checkDuplicatedFileName(unitName, dupeCase), utils.removeTestPathPrefixes(typeLines)]];
+ case 2:
+ _d.sent();
+ _d.label = 3;
+ case 3:
+ _i++;
+ return [3 /*break*/, 1];
+ case 4: return [2 /*return*/];
+ }
+ });
+ }
+ }
+ Compiler.doTypeAndSymbolBaseline = doTypeAndSymbolBaseline;
+ function doSourcemapBaseline(baselinePath, options, result, harnessSettings) {
+ var declMaps = ts.getAreDeclarationMapsEnabled(options);
+ if (options.inlineSourceMap) {
+ if (result.maps.size > 0 && !declMaps) {
+ throw new Error("No sourcemap files should be generated if inlineSourceMaps was set.");
+ }
+ return;
+ }
+ else if (options.sourceMap || declMaps) {
+ if (result.maps.size !== (result.getNumberOfJsFiles() * (declMaps && options.sourceMap ? 2 : 1))) {
+ throw new Error("Number of sourcemap files should be same as js files.");
+ }
+ Baseline.runBaseline(baselinePath.replace(/\.tsx?/, ".js.map"), function () {
+ if ((options.noEmitOnError && result.diagnostics.length !== 0) || result.maps.size === 0) {
+ // We need to return null here or the runBaseLine will actually create a empty file.
+ // Baselining isn't required here because there is no output.
+ /* tslint:disable:no-null-keyword */
+ return null;
+ /* tslint:enable:no-null-keyword */
+ }
+ var sourceMapCode = "";
+ result.maps.forEach(function (sourceMap) {
+ sourceMapCode += fileOutput(sourceMap, harnessSettings);
+ });
+ return sourceMapCode;
+ });
+ }
+ }
+ Compiler.doSourcemapBaseline = doSourcemapBaseline;
+ function doJsEmitBaseline(baselinePath, header, options, result, tsConfigFiles, toBeCompiled, otherFiles, harnessSettings) {
+ if (!options.noEmit && !options.emitDeclarationOnly && result.js.size === 0 && result.diagnostics.length === 0) {
+ throw new Error("Expected at least one js file to be emitted or at least one error to be created.");
+ }
+ // check js output
+ Baseline.runBaseline(baselinePath.replace(/\.tsx?/, ".js" /* Js */), function () {
+ var tsCode = "";
+ var tsSources = otherFiles.concat(toBeCompiled);
+ if (tsSources.length > 1) {
+ tsCode += "//// [" + header + "] ////\r\n\r\n";
+ }
+ for (var i = 0; i < tsSources.length; i++) {
+ tsCode += "//// [" + ts.getBaseFileName(tsSources[i].unitName) + "]\r\n";
+ tsCode += tsSources[i].content + (i < (tsSources.length - 1) ? "\r\n" : "");
+ }
+ var jsCode = "";
+ result.js.forEach(function (file) {
+ jsCode += fileOutput(file, harnessSettings);
+ });
+ if (result.dts.size > 0) {
+ jsCode += "\r\n\r\n";
+ result.dts.forEach(function (declFile) {
+ jsCode += fileOutput(declFile, harnessSettings);
+ });
+ }
+ var declFileContext = prepareDeclarationCompilationContext(toBeCompiled, otherFiles, result, harnessSettings, options, /*currentDirectory*/ undefined);
+ var declFileCompilationResult = compileDeclarationFiles(declFileContext);
+ if (declFileCompilationResult && declFileCompilationResult.declResult.diagnostics.length) {
+ jsCode += "\r\n\r\n//// [DtsFileErrors]\r\n";
+ jsCode += "\r\n\r\n";
+ jsCode += getErrorBaseline(tsConfigFiles.concat(declFileCompilationResult.declInputFiles, declFileCompilationResult.declOtherFiles), declFileCompilationResult.declResult.diagnostics);
+ }
+ if (jsCode.length > 0) {
+ return tsCode + "\r\n\r\n" + jsCode;
+ }
+ else {
+ /* tslint:disable:no-null-keyword */
+ return null;
+ /* tslint:enable:no-null-keyword */
+ }
+ });
+ }
+ Compiler.doJsEmitBaseline = doJsEmitBaseline;
+ function fileOutput(file, harnessSettings) {
+ var fileName = harnessSettings.fullEmitPaths ? utils.removeTestPathPrefixes(file.file) : ts.getBaseFileName(file.file);
+ return "//// [" + fileName + "]\r\n" + utils.removeTestPathPrefixes(file.text);
+ }
+ function collateOutputs(outputFiles) {
+ var _a;
+ var gen = iterateOutputs(outputFiles);
+ // Emit them
+ var result = "";
+ for (var _b = gen.next(), done = _b.done, value = _b.value; !done; _a = gen.next(), done = _a.done, value = _a.value, _a) {
+ // Some extra spacing if this isn't the first file
+ if (result.length) {
+ result += "\r\n\r\n";
+ }
+ // FileName header + content
+ var content = value[1];
+ result += content;
+ }
+ return result;
+ }
+ Compiler.collateOutputs = collateOutputs;
+ function iterateOutputs(outputFiles) {
+ function cleanName(fn) {
+ var lastSlash = ts.normalizeSlashes(fn).lastIndexOf("/");
+ return fn.substr(lastSlash + 1).toLowerCase();
+ }
+ var files, dupeCase, _i, files_1, outputFile;
+ return __generator(this, function (_a) {
+ switch (_a.label) {
+ case 0:
+ files = Array.from(outputFiles);
+ files.slice().sort(function (a, b) { return ts.compareStringsCaseSensitive(cleanName(a.file), cleanName(b.file)); });
+ dupeCase = ts.createMap();
+ _i = 0, files_1 = files;
+ _a.label = 1;
+ case 1:
+ if (!(_i < files_1.length)) return [3 /*break*/, 4];
+ outputFile = files_1[_i];
+ return [4 /*yield*/, [checkDuplicatedFileName(outputFile.file, dupeCase), "/*====== " + outputFile.file + " ======*/\r\n" + utils.removeByteOrderMark(outputFile.text)]];
+ case 2:
+ _a.sent();
+ _a.label = 3;
+ case 3:
+ _i++;
+ return [3 /*break*/, 1];
+ case 4: return [2 /*return*/];
+ }
+ });
+ }
+ Compiler.iterateOutputs = iterateOutputs;
+ function checkDuplicatedFileName(resultName, dupeCase) {
+ resultName = sanitizeTestFilePath(resultName);
+ if (dupeCase.has(resultName)) {
+ // A different baseline filename should be manufactured if the names differ only in case, for windows compat
+ var count = 1 + dupeCase.get(resultName);
+ dupeCase.set(resultName, count);
+ resultName = resultName + ".dupe" + count;
+ }
+ else {
+ dupeCase.set(resultName, 0);
+ }
+ return resultName;
+ }
+ function sanitizeTestFilePath(name) {
+ var path = ts.toPath(ts.normalizeSlashes(name.replace(/[\^<>:"|?*%]/g, "_")).replace(/\.\.\//g, "__dotdot/"), "", Utils.canonicalizeForHarness);
+ if (ts.startsWith(path, "/")) {
+ return path.substring(1);
+ }
+ return path;
+ }
+ Compiler.sanitizeTestFilePath = sanitizeTestFilePath;
+ })(Compiler = Harness.Compiler || (Harness.Compiler = {}));
+ function splitVaryBySettingValue(text) {
+ if (!text)
+ return undefined;
+ var entries = text.split(/,/).map(function (s) { return s.trim().toLowerCase(); }).filter(function (s) { return s.length > 0; });
+ return entries && entries.length > 1 ? entries : undefined;
+ }
+ function computeFileBasedTestConfigurationVariations(configurations, variationState, varyByEntries, offset) {
+ if (offset >= varyByEntries.length) {
+ // make a copy of the current variation state
+ configurations.push(__assign({}, variationState));
+ return;
+ }
+ var _a = varyByEntries[offset], varyBy = _a[0], entries = _a[1];
+ for (var _i = 0, entries_2 = entries; _i < entries_2.length; _i++) {
+ var entry = entries_2[_i];
+ // set or overwrite the variation, then compute the next variation
+ variationState[varyBy] = entry;
+ computeFileBasedTestConfigurationVariations(configurations, variationState, varyByEntries, offset + 1);
+ }
+ }
+ /**
+ * Compute FileBasedTestConfiguration variations based on a supplied list of variable settings.
+ */
+ function getFileBasedTestConfigurations(settings, varyBy) {
+ var varyByEntries;
+ for (var _i = 0, varyBy_1 = varyBy; _i < varyBy_1.length; _i++) {
+ var varyByKey = varyBy_1[_i];
+ if (ts.hasProperty(settings, varyByKey)) {
+ // we only consider variations when there are 2 or more variable entries.
+ var entries = splitVaryBySettingValue(settings[varyByKey]);
+ if (entries) {
+ if (!varyByEntries)
+ varyByEntries = [];
+ varyByEntries.push([varyByKey, entries]);
+ }
+ }
+ }
+ if (!varyByEntries)
+ return undefined;
+ var configurations = [];
+ computeFileBasedTestConfigurationVariations(configurations, /*variationState*/ {}, varyByEntries, /*offset*/ 0);
+ return configurations;
+ }
+ Harness.getFileBasedTestConfigurations = getFileBasedTestConfigurations;
+ /**
+ * Compute a description for this configuration based on its entries
+ */
+ function getFileBasedTestConfigurationDescription(configuration) {
+ var name = "";
+ if (configuration) {
+ var keys = Object.keys(configuration).sort();
+ for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {
+ var key = keys_1[_i];
+ if (name)
+ name += ", ";
+ name += "@" + key + ": " + configuration[key];
+ }
+ }
+ return name;
+ }
+ Harness.getFileBasedTestConfigurationDescription = getFileBasedTestConfigurationDescription;
+ var TestCaseParser;
+ (function (TestCaseParser) {
+ // Regex for parsing options in the format "@Alpha: Value of any sort"
+ var optionRegex = /^[\/]{2}\s*@(\w+)\s*:\s*([^\r\n]*)/gm; // multiple matches on multiple lines
+ function extractCompilerSettings(content) {
+ var opts = {};
+ var match;
+ /* tslint:disable:no-null-keyword */
+ while ((match = optionRegex.exec(content)) !== null) {
+ /* tslint:enable:no-null-keyword */
+ opts[match[1]] = match[2].trim();
+ }
+ return opts;
+ }
+ TestCaseParser.extractCompilerSettings = extractCompilerSettings;
+ /** Given a test file containing // @FileName directives, return an array of named units of code to be added to an existing compiler instance */
+ function makeUnitsFromTest(code, fileName, rootDir, settings) {
+ if (settings === void 0) { settings = extractCompilerSettings(code); }
+ // List of all the subfiles we've parsed out
+ var testUnitData = [];
+ var lines = Utils.splitContentByNewlines(code);
+ // Stuff related to the subfile we're parsing
+ var currentFileContent;
+ var currentFileOptions = {};
+ var currentFileName;
+ var refs = [];
+ for (var _i = 0, lines_3 = lines; _i < lines_3.length; _i++) {
+ var line = lines_3[_i];
+ var testMetaData = optionRegex.exec(line);
+ if (testMetaData) {
+ // Comment line, check for global/file @options and record them
+ optionRegex.lastIndex = 0;
+ var metaDataName = testMetaData[1].toLowerCase();
+ currentFileOptions[testMetaData[1]] = testMetaData[2].trim();
+ if (metaDataName !== "filename") {
+ continue;
+ }
+ // New metadata statement after having collected some code to go with the previous metadata
+ if (currentFileName) {
+ // Store result file
+ var newTestFile = {
+ content: currentFileContent,
+ name: currentFileName,
+ fileOptions: currentFileOptions,
+ originalFilePath: fileName,
+ references: refs
+ };
+ testUnitData.push(newTestFile);
+ // Reset local data
+ currentFileContent = undefined;
+ currentFileOptions = {};
+ currentFileName = testMetaData[2].trim();
+ refs = [];
+ }
+ else {
+ // First metadata marker in the file
+ currentFileName = testMetaData[2].trim();
+ }
+ }
+ else {
+ // Subfile content line
+ // Append to the current subfile content, inserting a newline needed
+ if (currentFileContent === undefined) {
+ currentFileContent = "";
+ }
+ else if (currentFileContent !== "") {
+ // End-of-line
+ currentFileContent = currentFileContent + "\n";
+ }
+ currentFileContent = currentFileContent + line;
+ }
+ }
+ // normalize the fileName for the single file case
+ currentFileName = testUnitData.length > 0 || currentFileName ? currentFileName : ts.getBaseFileName(fileName);
+ // EOF, push whatever remains
+ var newTestFile2 = {
+ content: currentFileContent || "",
+ name: currentFileName,
+ fileOptions: currentFileOptions,
+ originalFilePath: fileName,
+ references: refs
+ };
+ testUnitData.push(newTestFile2);
+ // unit tests always list files explicitly
+ var parseConfigHost = {
+ useCaseSensitiveFileNames: false,
+ readDirectory: function () { return []; },
+ fileExists: function () { return true; },
+ readFile: function (name) { return ts.forEach(testUnitData, function (data) { return data.name.toLowerCase() === name.toLowerCase() ? data.content : undefined; }); }
+ };
+ // check if project has tsconfig.json in the list of files
+ var tsConfig;
+ var tsConfigFileUnitData;
+ for (var i = 0; i < testUnitData.length; i++) {
+ var data = testUnitData[i];
+ if (getConfigNameFromFileName(data.name)) {
+ var configJson = ts.parseJsonText(data.name, data.content);
+ assert.isTrue(configJson.endOfFileToken !== undefined);
+ var baseDir = ts.normalizePath(ts.getDirectoryPath(data.name));
+ if (rootDir) {
+ baseDir = ts.getNormalizedAbsolutePath(baseDir, rootDir);
+ }
+ tsConfig = ts.parseJsonSourceFileConfigFileContent(configJson, parseConfigHost, baseDir);
+ tsConfig.options.configFilePath = data.name;
+ tsConfigFileUnitData = data;
+ // delete entry from the list
+ ts.orderedRemoveItemAt(testUnitData, i);
+ break;
+ }
+ }
+ return { settings: settings, testUnitData: testUnitData, tsConfig: tsConfig, tsConfigFileUnitData: tsConfigFileUnitData };
+ }
+ TestCaseParser.makeUnitsFromTest = makeUnitsFromTest;
+ })(TestCaseParser = Harness.TestCaseParser || (Harness.TestCaseParser = {}));
+ /** Support class for baseline files */
+ var Baseline;
+ (function (Baseline) {
+ var noContent = "";
+ function localPath(fileName, baselineFolder, subfolder) {
+ if (baselineFolder === undefined) {
+ return baselinePath(fileName, "local", "tests/baselines", subfolder);
+ }
+ else {
+ return baselinePath(fileName, "local", baselineFolder, subfolder);
+ }
+ }
+ Baseline.localPath = localPath;
+ function referencePath(fileName, baselineFolder, subfolder) {
+ if (baselineFolder === undefined) {
+ return baselinePath(fileName, "reference", "tests/baselines", subfolder);
+ }
+ else {
+ return baselinePath(fileName, "reference", baselineFolder, subfolder);
+ }
+ }
+ function baselinePath(fileName, type, baselineFolder, subfolder) {
+ if (subfolder !== undefined) {
+ return Harness.userSpecifiedRoot + baselineFolder + "/" + subfolder + "/" + type + "/" + fileName;
+ }
+ else {
+ return Harness.userSpecifiedRoot + baselineFolder + "/" + type + "/" + fileName;
+ }
+ }
+ var fileCache = {};
+ function generateActual(generateContent) {
+ var actual = generateContent();
+ if (actual === undefined) {
+ throw new Error("The generated content was \"undefined\". Return \"null\" if no baselining is required.\"");
+ }
+ return actual;
+ }
+ function compareToBaseline(actual, relativeFileName, opts) {
+ // actual is now either undefined (the generator had an error), null (no file requested),
+ // or some real output of the function
+ if (actual === undefined) {
+ // Nothing to do
+ return undefined; // TODO: GH#18217
+ }
+ var refFileName = referencePath(relativeFileName, opts && opts.Baselinefolder, opts && opts.Subfolder);
+ /* tslint:disable:no-null-keyword */
+ if (actual === null) {
+ /* tslint:enable:no-null-keyword */
+ actual = noContent;
+ }
+ var expected = "";
+ if (Harness.IO.fileExists(refFileName)) {
+ expected = Harness.IO.readFile(refFileName); // TODO: GH#18217
+ }
+ return { expected: expected, actual: actual };
+ }
+ function writeComparison(expected, actual, relativeFileName, actualFileName) {
+ // For now this is written using TypeScript, because sys is not available when running old test cases.
+ // But we need to move to sys once we have
+ // Creates the directory including its parent if not already present
+ function createDirectoryStructure(dirName) {
+ if (fileCache[dirName] || Harness.IO.directoryExists(dirName)) {
+ fileCache[dirName] = true;
+ return;
+ }
+ var parentDirectory = Harness.IO.directoryName(dirName); // TODO: GH#18217
+ if (parentDirectory !== "" && parentDirectory !== dirName) {
+ createDirectoryStructure(parentDirectory);
+ }
+ Harness.IO.createDirectory(dirName);
+ fileCache[dirName] = true;
+ }
+ // Create folders if needed
+ createDirectoryStructure(Harness.IO.directoryName(actualFileName)); // TODO: GH#18217
+ // Delete the actual file in case it fails
+ if (Harness.IO.fileExists(actualFileName)) {
+ Harness.IO.deleteFile(actualFileName);
+ }
+ var encodedActual = Utils.encodeString(actual);
+ if (expected !== encodedActual) {
+ if (actual === noContent) {
+ Harness.IO.writeFile(actualFileName + ".delete", "");
+ }
+ else {
+ Harness.IO.writeFile(actualFileName, encodedActual);
+ }
+ throw new Error("The baseline file " + relativeFileName + " has changed.");
+ }
+ }
+ function runBaseline(relativeFileName, generateContent, opts) {
+ var actualFileName = localPath(relativeFileName, opts && opts.Baselinefolder, opts && opts.Subfolder);
+ var actual = generateActual(generateContent);
+ var comparison = compareToBaseline(actual, relativeFileName, opts);
+ writeComparison(comparison.expected, comparison.actual, relativeFileName, actualFileName);
+ }
+ Baseline.runBaseline = runBaseline;
+ function runMultifileBaseline(relativeFileBase, extension, generateContent, opts, referencedExtensions) {
+ var _a;
+ var gen = generateContent();
+ var writtenFiles = ts.createMap();
+ var errors = [];
+ // tslint:disable-next-line:no-null-keyword
+ if (gen !== null) {
+ for (var _b = gen.next(), done = _b.done, value = _b.value; !done; _a = gen.next(), done = _a.done, value = _a.value, _a) {
+ var _c = value, name = _c[0], content = _c[1], count = _c[2];
+ if (count === 0)
+ continue; // Allow error reporter to skip writing files without errors
+ var relativeFileName = relativeFileBase + "/" + name + extension;
+ var actualFileName = localPath(relativeFileName, opts && opts.Baselinefolder, opts && opts.Subfolder);
+ var comparison = compareToBaseline(content, relativeFileName, opts);
+ try {
+ writeComparison(comparison.expected, comparison.actual, relativeFileName, actualFileName);
+ }
+ catch (e) {
+ errors.push(e);
+ }
+ writtenFiles.set(relativeFileName, true);
+ }
+ }
+ var referenceDir = referencePath(relativeFileBase, opts && opts.Baselinefolder, opts && opts.Subfolder);
+ var existing = Harness.IO.readDirectory(referenceDir, referencedExtensions || [extension]);
+ if (extension === ".ts" || referencedExtensions && referencedExtensions.indexOf(".ts") > -1 && referencedExtensions.indexOf(".d.ts") === -1) {
+ // special-case and filter .d.ts out of .ts results
+ existing = existing.filter(function (f) { return !ts.endsWith(f, ".d.ts"); });
+ }
+ var missing = [];
+ for (var _i = 0, existing_1 = existing; _i < existing_1.length; _i++) {
+ var name = existing_1[_i];
+ var localCopy = name.substring(referenceDir.length - relativeFileBase.length);
+ if (!writtenFiles.has(localCopy)) {
+ missing.push(localCopy);
+ }
+ }
+ if (missing.length) {
+ for (var _d = 0, missing_1 = missing; _d < missing_1.length; _d++) {
+ var file = missing_1[_d];
+ Harness.IO.writeFile(localPath(file + ".delete", opts && opts.Baselinefolder, opts && opts.Subfolder), "");
+ }
+ }
+ if (errors.length || missing.length) {
+ var errorMsg = "";
+ if (errors.length) {
+ errorMsg += "The baseline for " + relativeFileBase + " in " + errors.length + " files has changed:" + ("\n " + errors.slice(0, 5).map(function (e) { return e.message; }).join("\n ") + (errors.length > 5 ? "\n" + (" and " + (errors.length - 5) + " more") : ""));
+ }
+ if (errors.length && missing.length) {
+ errorMsg += "\n";
+ }
+ if (missing.length) {
+ var writtenFilesArray = ts.arrayFrom(writtenFiles.keys());
+ errorMsg += "Baseline missing " + missing.length + " files:" + ("\n " + missing.slice(0, 5).join("\n ") + (missing.length > 5 ? "\n" + (" and " + (missing.length - 5) + " more") : "") + "\n") + "Written " + writtenFiles.size + " files:" + ("\n " + writtenFilesArray.slice(0, 5).join("\n ") + (writtenFilesArray.length > 5 ? "\n" + (" and " + (writtenFilesArray.length - 5) + " more") : ""));
+ }
+ throw new Error(errorMsg);
+ }
+ }
+ Baseline.runMultifileBaseline = runMultifileBaseline;
+ })(Baseline = Harness.Baseline || (Harness.Baseline = {}));
+ function isDefaultLibraryFile(filePath) {
+ // We need to make sure that the filePath is prefixed with "lib." not just containing "lib." and end with ".d.ts"
+ var fileName = ts.getBaseFileName(ts.normalizeSlashes(filePath));
+ return ts.startsWith(fileName, "lib.") && ts.endsWith(fileName, ".d.ts" /* Dts */);
+ }
+ Harness.isDefaultLibraryFile = isDefaultLibraryFile;
+ function isBuiltFile(filePath) {
+ return filePath.indexOf(Harness.libFolder) === 0 ||
+ filePath.indexOf(vpath.addTrailingSeparator(vfs.builtFolder)) === 0;
+ }
+ Harness.isBuiltFile = isBuiltFile;
+ function getDefaultLibraryFile(filePath, io) {
+ var libFile = Harness.userSpecifiedRoot + Harness.libFolder + ts.getBaseFileName(ts.normalizeSlashes(filePath));
+ return { unitName: libFile, content: io.readFile(libFile) };
+ }
+ Harness.getDefaultLibraryFile = getDefaultLibraryFile;
+ function getConfigNameFromFileName(filename) {
+ var flc = ts.getBaseFileName(filename).toLowerCase();
+ return ts.find(["tsconfig.json", "jsconfig.json"], function (x) { return x === flc; });
+ }
+ Harness.getConfigNameFromFileName = getConfigNameFromFileName;
+ if (Error)
+ Error.stackTraceLimit = 100;
+})(Harness || (Harness = {}));
+var Harness;
+(function (Harness) {
+ var LanguageService;
+ (function (LanguageService) {
+ var ScriptInfo = /** @class */ (function () {
+ function ScriptInfo(fileName, content, isRootFile) {
+ this.fileName = fileName;
+ this.content = content;
+ this.isRootFile = isRootFile;
+ this.version = 1;
+ this.editRanges = [];
+ this.setContent(content);
+ }
+ ScriptInfo.prototype.setContent = function (content) {
+ this.content = content;
+ this.lineMap = undefined;
+ };
+ ScriptInfo.prototype.getLineMap = function () {
+ return this.lineMap || (this.lineMap = ts.computeLineStarts(this.content));
+ };
+ ScriptInfo.prototype.updateContent = function (content) {
+ this.editRanges = [];
+ this.setContent(content);
+ this.version++;
+ };
+ ScriptInfo.prototype.editContent = function (start, end, newText) {
+ // Apply edits
+ var prefix = this.content.substring(0, start);
+ var middle = newText;
+ var suffix = this.content.substring(end);
+ this.setContent(prefix + middle + suffix);
+ // Store edit range + new length of script
+ this.editRanges.push({
+ length: this.content.length,
+ textChangeRange: ts.createTextChangeRange(ts.createTextSpanFromBounds(start, end), newText.length)
+ });
+ // Update version #
+ this.version++;
+ };
+ ScriptInfo.prototype.getTextChangeRangeBetweenVersions = function (startVersion, endVersion) {
+ if (startVersion === endVersion) {
+ // No edits!
+ return ts.unchangedTextChangeRange;
+ }
+ var initialEditRangeIndex = this.editRanges.length - (this.version - startVersion);
+ var lastEditRangeIndex = this.editRanges.length - (this.version - endVersion);
+ var entries = this.editRanges.slice(initialEditRangeIndex, lastEditRangeIndex);
+ return ts.collapseTextChangeRangesAcrossMultipleVersions(entries.map(function (e) { return e.textChangeRange; }));
+ };
+ return ScriptInfo;
+ }());
+ LanguageService.ScriptInfo = ScriptInfo;
+ var ScriptSnapshot = /** @class */ (function () {
+ function ScriptSnapshot(scriptInfo) {
+ this.scriptInfo = scriptInfo;
+ this.textSnapshot = scriptInfo.content;
+ this.version = scriptInfo.version;
+ }
+ ScriptSnapshot.prototype.getText = function (start, end) {
+ return this.textSnapshot.substring(start, end);
+ };
+ ScriptSnapshot.prototype.getLength = function () {
+ return this.textSnapshot.length;
+ };
+ ScriptSnapshot.prototype.getChangeRange = function (oldScript) {
+ var oldShim = oldScript;
+ return this.scriptInfo.getTextChangeRangeBetweenVersions(oldShim.version, this.version);
+ };
+ return ScriptSnapshot;
+ }());
+ var ScriptSnapshotProxy = /** @class */ (function () {
+ function ScriptSnapshotProxy(scriptSnapshot) {
+ this.scriptSnapshot = scriptSnapshot;
+ }
+ ScriptSnapshotProxy.prototype.getText = function (start, end) {
+ return this.scriptSnapshot.getText(start, end);
+ };
+ ScriptSnapshotProxy.prototype.getLength = function () {
+ return this.scriptSnapshot.getLength();
+ };
+ ScriptSnapshotProxy.prototype.getChangeRange = function (oldScript) {
+ var range = this.scriptSnapshot.getChangeRange(oldScript.scriptSnapshot);
+ return range && JSON.stringify(range);
+ };
+ return ScriptSnapshotProxy;
+ }());
+ var DefaultHostCancellationToken = /** @class */ (function () {
+ function DefaultHostCancellationToken() {
+ }
+ DefaultHostCancellationToken.prototype.isCancellationRequested = function () {
+ return false;
+ };
+ DefaultHostCancellationToken.instance = new DefaultHostCancellationToken();
+ return DefaultHostCancellationToken;
+ }());
+ var LanguageServiceAdapterHost = /** @class */ (function () {
+ function LanguageServiceAdapterHost(cancellationToken, settings) {
+ if (cancellationToken === void 0) { cancellationToken = DefaultHostCancellationToken.instance; }
+ if (settings === void 0) { settings = ts.getDefaultCompilerOptions(); }
+ this.cancellationToken = cancellationToken;
+ this.settings = settings;
+ this.sys = new fakes.System(new vfs.FileSystem(/*ignoreCase*/ true, { cwd: Harness.virtualFileSystemRoot }));
+ this.scriptInfos = new collections.SortedMap({ comparer: this.vfs.stringComparer, sort: "insertion" });
+ }
+ Object.defineProperty(LanguageServiceAdapterHost.prototype, "vfs", {
+ get: function () {
+ return this.sys.vfs;
+ },
+ enumerable: true,
+ configurable: true
+ });
+ LanguageServiceAdapterHost.prototype.getNewLine = function () {
+ return Harness.harnessNewLine;
+ };
+ LanguageServiceAdapterHost.prototype.getFilenames = function () {
+ var fileNames = [];
+ this.scriptInfos.forEach(function (scriptInfo) {
+ if (scriptInfo.isRootFile) {
+ // only include root files here
+ // usually it means that we won't include lib.d.ts in the list of root files so it won't mess the computation of compilation root dir.
+ fileNames.push(scriptInfo.fileName);
+ }
+ });
+ return fileNames;
+ };
+ LanguageServiceAdapterHost.prototype.getScriptInfo = function (fileName) {
+ return this.scriptInfos.get(vpath.resolve(this.vfs.cwd(), fileName));
+ };
+ LanguageServiceAdapterHost.prototype.addScript = function (fileName, content, isRootFile) {
+ this.vfs.mkdirpSync(vpath.dirname(fileName));
+ this.vfs.writeFileSync(fileName, content);
+ this.scriptInfos.set(vpath.resolve(this.vfs.cwd(), fileName), new ScriptInfo(fileName, content, isRootFile));
+ };
+ LanguageServiceAdapterHost.prototype.editScript = function (fileName, start, end, newText) {
+ var script = this.getScriptInfo(fileName);
+ if (script) {
+ script.editContent(start, end, newText);
+ this.vfs.mkdirpSync(vpath.dirname(fileName));
+ this.vfs.writeFileSync(fileName, script.content);
+ return;
+ }
+ throw new Error("No script with name '" + fileName + "'");
+ };
+ LanguageServiceAdapterHost.prototype.openFile = function (_fileName, _content, _scriptKindName) { };
+ /**
+ * @param line 0 based index
+ * @param col 0 based index
+ */
+ LanguageServiceAdapterHost.prototype.positionToLineAndCharacter = function (fileName, position) {
+ var script = this.getScriptInfo(fileName);
+ assert.isOk(script);
+ return ts.computeLineAndCharacterOfPosition(script.getLineMap(), position);
+ };
+ return LanguageServiceAdapterHost;
+ }());
+ LanguageService.LanguageServiceAdapterHost = LanguageServiceAdapterHost;
+ /// Native adapter
+ var NativeLanguageServiceHost = /** @class */ (function (_super) {
+ __extends(NativeLanguageServiceHost, _super);
+ function NativeLanguageServiceHost() {
+ var _this = _super !== null && _super.apply(this, arguments) || this;
+ _this.installPackage = ts.notImplemented;
+ _this.log = ts.noop;
+ _this.trace = ts.noop;
+ _this.error = ts.noop;
+ return _this;
+ }
+ NativeLanguageServiceHost.prototype.isKnownTypesPackageName = function (name) {
+ return !!this.typesRegistry && this.typesRegistry.has(name);
+ };
+ NativeLanguageServiceHost.prototype.getCompilationSettings = function () { return this.settings; };
+ NativeLanguageServiceHost.prototype.getCancellationToken = function () { return this.cancellationToken; };
+ NativeLanguageServiceHost.prototype.getDirectories = function (path) {
+ return this.sys.getDirectories(path);
+ };
+ NativeLanguageServiceHost.prototype.getCurrentDirectory = function () { return Harness.virtualFileSystemRoot; };
+ NativeLanguageServiceHost.prototype.getDefaultLibFileName = function () { return Harness.Compiler.defaultLibFileName; };
+ NativeLanguageServiceHost.prototype.getScriptFileNames = function () {
+ return this.getFilenames().filter(ts.isAnySupportedFileExtension);
+ };
+ NativeLanguageServiceHost.prototype.getScriptSnapshot = function (fileName) {
+ var script = this.getScriptInfo(fileName);
+ return script ? new ScriptSnapshot(script) : undefined;
+ };
+ NativeLanguageServiceHost.prototype.getScriptKind = function () { return 0 /* Unknown */; };
+ NativeLanguageServiceHost.prototype.getScriptVersion = function (fileName) {
+ var script = this.getScriptInfo(fileName);
+ return script ? script.version.toString() : undefined; // TODO: GH#18217
+ };
+ NativeLanguageServiceHost.prototype.directoryExists = function (dirName) {
+ return this.sys.directoryExists(dirName);
+ };
+ NativeLanguageServiceHost.prototype.fileExists = function (fileName) {
+ return this.sys.fileExists(fileName);
+ };
+ NativeLanguageServiceHost.prototype.readDirectory = function (path, extensions, exclude, include, depth) {
+ return this.sys.readDirectory(path, extensions, exclude, include, depth);
+ };
+ NativeLanguageServiceHost.prototype.readFile = function (path) {
+ return this.sys.readFile(path);
+ };
+ NativeLanguageServiceHost.prototype.realpath = function (path) {
+ return this.sys.realpath(path);
+ };
+ NativeLanguageServiceHost.prototype.getTypeRootsVersion = function () {
+ return 0;
+ };
+ return NativeLanguageServiceHost;
+ }(LanguageServiceAdapterHost));
+ var NativeLanguageServiceAdapter = /** @class */ (function () {
+ function NativeLanguageServiceAdapter(cancellationToken, options) {
+ this.host = new NativeLanguageServiceHost(cancellationToken, options);
+ }
+ NativeLanguageServiceAdapter.prototype.getHost = function () { return this.host; };
+ NativeLanguageServiceAdapter.prototype.getLanguageService = function () { return ts.createLanguageService(this.host); };
+ NativeLanguageServiceAdapter.prototype.getClassifier = function () { return ts.createClassifier(); };
+ NativeLanguageServiceAdapter.prototype.getPreProcessedFileInfo = function (fileName, fileContents) { return ts.preProcessFile(fileContents, /* readImportFiles */ true, ts.hasJavaScriptFileExtension(fileName)); };
+ return NativeLanguageServiceAdapter;
+ }());
+ LanguageService.NativeLanguageServiceAdapter = NativeLanguageServiceAdapter;
+ /// Shim adapter
+ var ShimLanguageServiceHost = /** @class */ (function (_super) {
+ __extends(ShimLanguageServiceHost, _super);
+ function ShimLanguageServiceHost(preprocessToResolve, cancellationToken, options) {
+ var _this = _super.call(this, cancellationToken, options) || this;
+ _this.readDirectory = ts.notImplemented;
+ _this.readDirectoryNames = ts.notImplemented;
+ _this.readFileNames = ts.notImplemented;
+ _this.nativeHost = new NativeLanguageServiceHost(cancellationToken, options);
+ if (preprocessToResolve) {
+ var compilerOptions_1 = _this.nativeHost.getCompilationSettings();
+ var moduleResolutionHost_1 = {
+ fileExists: function (fileName) { return _this.getScriptInfo(fileName) !== undefined; },
+ readFile: function (fileName) {
+ var scriptInfo = _this.getScriptInfo(fileName);
+ return scriptInfo && scriptInfo.content;
+ }
+ };
+ _this.getModuleResolutionsForFile = function (fileName) {
+ var scriptInfo = _this.getScriptInfo(fileName);
+ var preprocessInfo = ts.preProcessFile(scriptInfo.content, /*readImportFiles*/ true);
+ var imports = {};
+ for (var _i = 0, _a = preprocessInfo.importedFiles; _i < _a.length; _i++) {
+ var module_1 = _a[_i];
+ var resolutionInfo = ts.resolveModuleName(module_1.fileName, fileName, compilerOptions_1, moduleResolutionHost_1);
+ if (resolutionInfo.resolvedModule) {
+ imports[module_1.fileName] = resolutionInfo.resolvedModule.resolvedFileName;
+ }
+ }
+ return JSON.stringify(imports);
+ };
+ _this.getTypeReferenceDirectiveResolutionsForFile = function (fileName) {
+ var scriptInfo = _this.getScriptInfo(fileName);
+ if (scriptInfo) {
+ var preprocessInfo = ts.preProcessFile(scriptInfo.content, /*readImportFiles*/ false);
+ var resolutions = {};
+ var settings = _this.nativeHost.getCompilationSettings();
+ for (var _i = 0, _a = preprocessInfo.typeReferenceDirectives; _i < _a.length; _i++) {
+ var typeReferenceDirective = _a[_i];
+ var resolutionInfo = ts.resolveTypeReferenceDirective(typeReferenceDirective.fileName, fileName, settings, moduleResolutionHost_1);
+ if (resolutionInfo.resolvedTypeReferenceDirective.resolvedFileName) {
+ resolutions[typeReferenceDirective.fileName] = resolutionInfo.resolvedTypeReferenceDirective;
+ }
+ }
+ return JSON.stringify(resolutions);
+ }
+ else {
+ return "[]";
+ }
+ };
+ }
+ return _this;
+ }
+ ShimLanguageServiceHost.prototype.getFilenames = function () { return this.nativeHost.getFilenames(); };
+ ShimLanguageServiceHost.prototype.getScriptInfo = function (fileName) { return this.nativeHost.getScriptInfo(fileName); };
+ ShimLanguageServiceHost.prototype.addScript = function (fileName, content, isRootFile) { this.nativeHost.addScript(fileName, content, isRootFile); };
+ ShimLanguageServiceHost.prototype.editScript = function (fileName, start, end, newText) { this.nativeHost.editScript(fileName, start, end, newText); };
+ ShimLanguageServiceHost.prototype.positionToLineAndCharacter = function (fileName, position) { return this.nativeHost.positionToLineAndCharacter(fileName, position); };
+ ShimLanguageServiceHost.prototype.getCompilationSettings = function () { return JSON.stringify(this.nativeHost.getCompilationSettings()); };
+ ShimLanguageServiceHost.prototype.getCancellationToken = function () { return this.nativeHost.getCancellationToken(); };
+ ShimLanguageServiceHost.prototype.getCurrentDirectory = function () { return this.nativeHost.getCurrentDirectory(); };
+ ShimLanguageServiceHost.prototype.getDirectories = function (path) { return JSON.stringify(this.nativeHost.getDirectories(path)); };
+ ShimLanguageServiceHost.prototype.getDefaultLibFileName = function () { return this.nativeHost.getDefaultLibFileName(); };
+ ShimLanguageServiceHost.prototype.getScriptFileNames = function () { return JSON.stringify(this.nativeHost.getScriptFileNames()); };
+ ShimLanguageServiceHost.prototype.getScriptSnapshot = function (fileName) {
+ var nativeScriptSnapshot = this.nativeHost.getScriptSnapshot(fileName); // TODO: GH#18217
+ return nativeScriptSnapshot && new ScriptSnapshotProxy(nativeScriptSnapshot);
+ };
+ ShimLanguageServiceHost.prototype.getScriptKind = function () { return this.nativeHost.getScriptKind(); };
+ ShimLanguageServiceHost.prototype.getScriptVersion = function (fileName) { return this.nativeHost.getScriptVersion(fileName); };
+ ShimLanguageServiceHost.prototype.getLocalizedDiagnosticMessages = function () { return JSON.stringify({}); };
+ ShimLanguageServiceHost.prototype.fileExists = function (fileName) { return this.getScriptInfo(fileName) !== undefined; };
+ ShimLanguageServiceHost.prototype.readFile = function (fileName) {
+ var snapshot = this.nativeHost.getScriptSnapshot(fileName);
+ return snapshot && ts.getSnapshotText(snapshot);
+ };
+ ShimLanguageServiceHost.prototype.log = function (s) { this.nativeHost.log(s); };
+ ShimLanguageServiceHost.prototype.trace = function (s) { this.nativeHost.trace(s); };
+ ShimLanguageServiceHost.prototype.error = function (s) { this.nativeHost.error(s); };
+ ShimLanguageServiceHost.prototype.directoryExists = function () {
+ // for tests pessimistically assume that directory always exists
+ return true;
+ };
+ return ShimLanguageServiceHost;
+ }(LanguageServiceAdapterHost));
+ var ClassifierShimProxy = /** @class */ (function () {
+ function ClassifierShimProxy(shim) {
+ this.shim = shim;
+ }
+ ClassifierShimProxy.prototype.getEncodedLexicalClassifications = function (_text, _lexState, _classifyKeywordsInGenerics) {
+ return ts.notImplemented();
+ };
+ ClassifierShimProxy.prototype.getClassificationsForLine = function (text, lexState, classifyKeywordsInGenerics) {
+ var result = this.shim.getClassificationsForLine(text, lexState, classifyKeywordsInGenerics).split("\n");
+ var entries = [];
+ var i = 0;
+ var position = 0;
+ for (; i < result.length - 1; i += 2) {
+ var t = entries[i / 2] = {
+ length: parseInt(result[i]),
+ classification: parseInt(result[i + 1])
+ };
+ assert.isTrue(t.length > 0, "Result length should be greater than 0, got :" + t.length);
+ position += t.length;
+ }
+ var finalLexState = parseInt(result[result.length - 1]);
+ assert.equal(position, text.length, "Expected cumulative length of all entries to match the length of the source. expected: " + text.length + ", but got: " + position);
+ return {
+ finalLexState: finalLexState,
+ entries: entries
+ };
+ };
+ return ClassifierShimProxy;
+ }());
+ function unwrapJSONCallResult(result) {
+ var parsedResult = JSON.parse(result);
+ if (parsedResult.error) {
+ throw new Error("Language Service Shim Error: " + JSON.stringify(parsedResult.error));
+ }
+ else if (parsedResult.canceled) {
+ throw new ts.OperationCanceledException();
+ }
+ return parsedResult.result;
+ }
+ var LanguageServiceShimProxy = /** @class */ (function () {
+ function LanguageServiceShimProxy(shim) {
+ this.shim = shim;
+ this.getCombinedCodeFix = ts.notImplemented;
+ this.applyCodeActionCommand = ts.notImplemented;
+ }
+ LanguageServiceShimProxy.prototype.cleanupSemanticCache = function () {
+ this.shim.cleanupSemanticCache();
+ };
+ LanguageServiceShimProxy.prototype.getSyntacticDiagnostics = function (fileName) {
+ return unwrapJSONCallResult(this.shim.getSyntacticDiagnostics(fileName));
+ };
+ LanguageServiceShimProxy.prototype.getSemanticDiagnostics = function (fileName) {
+ return unwrapJSONCallResult(this.shim.getSemanticDiagnostics(fileName));
+ };
+ LanguageServiceShimProxy.prototype.getSuggestionDiagnostics = function (fileName) {
+ return unwrapJSONCallResult(this.shim.getSuggestionDiagnostics(fileName));
+ };
+ LanguageServiceShimProxy.prototype.getCompilerOptionsDiagnostics = function () {
+ return unwrapJSONCallResult(this.shim.getCompilerOptionsDiagnostics());
+ };
+ LanguageServiceShimProxy.prototype.getSyntacticClassifications = function (fileName, span) {
+ return unwrapJSONCallResult(this.shim.getSyntacticClassifications(fileName, span.start, span.length));
+ };
+ LanguageServiceShimProxy.prototype.getSemanticClassifications = function (fileName, span) {
+ return unwrapJSONCallResult(this.shim.getSemanticClassifications(fileName, span.start, span.length));
+ };
+ LanguageServiceShimProxy.prototype.getEncodedSyntacticClassifications = function (fileName, span) {
+ return unwrapJSONCallResult(this.shim.getEncodedSyntacticClassifications(fileName, span.start, span.length));
+ };
+ LanguageServiceShimProxy.prototype.getEncodedSemanticClassifications = function (fileName, span) {
+ return unwrapJSONCallResult(this.shim.getEncodedSemanticClassifications(fileName, span.start, span.length));
+ };
+ LanguageServiceShimProxy.prototype.getCompletionsAtPosition = function (fileName, position, preferences) {
+ return unwrapJSONCallResult(this.shim.getCompletionsAtPosition(fileName, position, preferences));
+ };
+ LanguageServiceShimProxy.prototype.getCompletionEntryDetails = function (fileName, position, entryName, formatOptions, source, preferences) {
+ return unwrapJSONCallResult(this.shim.getCompletionEntryDetails(fileName, position, entryName, JSON.stringify(formatOptions), source, preferences));
+ };
+ LanguageServiceShimProxy.prototype.getCompletionEntrySymbol = function () {
+ throw new Error("getCompletionEntrySymbol not implemented across the shim layer.");
+ };
+ LanguageServiceShimProxy.prototype.getQuickInfoAtPosition = function (fileName, position) {
+ return unwrapJSONCallResult(this.shim.getQuickInfoAtPosition(fileName, position));
+ };
+ LanguageServiceShimProxy.prototype.getNameOrDottedNameSpan = function (fileName, startPos, endPos) {
+ return unwrapJSONCallResult(this.shim.getNameOrDottedNameSpan(fileName, startPos, endPos));
+ };
+ LanguageServiceShimProxy.prototype.getBreakpointStatementAtPosition = function (fileName, position) {
+ return unwrapJSONCallResult(this.shim.getBreakpointStatementAtPosition(fileName, position));
+ };
+ LanguageServiceShimProxy.prototype.getSignatureHelpItems = function (fileName, position) {
+ return unwrapJSONCallResult(this.shim.getSignatureHelpItems(fileName, position));
+ };
+ LanguageServiceShimProxy.prototype.getRenameInfo = function (fileName, position) {
+ return unwrapJSONCallResult(this.shim.getRenameInfo(fileName, position));
+ };
+ LanguageServiceShimProxy.prototype.findRenameLocations = function (fileName, position, findInStrings, findInComments) {
+ return unwrapJSONCallResult(this.shim.findRenameLocations(fileName, position, findInStrings, findInComments));
+ };
+ LanguageServiceShimProxy.prototype.getDefinitionAtPosition = function (fileName, position) {
+ return unwrapJSONCallResult(this.shim.getDefinitionAtPosition(fileName, position));
+ };
+ LanguageServiceShimProxy.prototype.getDefinitionAndBoundSpan = function (fileName, position) {
+ return unwrapJSONCallResult(this.shim.getDefinitionAndBoundSpan(fileName, position));
+ };
+ LanguageServiceShimProxy.prototype.getTypeDefinitionAtPosition = function (fileName, position) {
+ return unwrapJSONCallResult(this.shim.getTypeDefinitionAtPosition(fileName, position));
+ };
+ LanguageServiceShimProxy.prototype.getImplementationAtPosition = function (fileName, position) {
+ return unwrapJSONCallResult(this.shim.getImplementationAtPosition(fileName, position));
+ };
+ LanguageServiceShimProxy.prototype.getReferencesAtPosition = function (fileName, position) {
+ return unwrapJSONCallResult(this.shim.getReferencesAtPosition(fileName, position));
+ };
+ LanguageServiceShimProxy.prototype.findReferences = function (fileName, position) {
+ return unwrapJSONCallResult(this.shim.findReferences(fileName, position));
+ };
+ LanguageServiceShimProxy.prototype.getOccurrencesAtPosition = function (fileName, position) {
+ return unwrapJSONCallResult(this.shim.getOccurrencesAtPosition(fileName, position));
+ };
+ LanguageServiceShimProxy.prototype.getDocumentHighlights = function (fileName, position, filesToSearch) {
+ return unwrapJSONCallResult(this.shim.getDocumentHighlights(fileName, position, JSON.stringify(filesToSearch)));
+ };
+ LanguageServiceShimProxy.prototype.getNavigateToItems = function (searchValue) {
+ return unwrapJSONCallResult(this.shim.getNavigateToItems(searchValue));
+ };
+ LanguageServiceShimProxy.prototype.getNavigationBarItems = function (fileName) {
+ return unwrapJSONCallResult(this.shim.getNavigationBarItems(fileName));
+ };
+ LanguageServiceShimProxy.prototype.getNavigationTree = function (fileName) {
+ return unwrapJSONCallResult(this.shim.getNavigationTree(fileName));
+ };
+ LanguageServiceShimProxy.prototype.getOutliningSpans = function (fileName) {
+ return unwrapJSONCallResult(this.shim.getOutliningSpans(fileName));
+ };
+ LanguageServiceShimProxy.prototype.getTodoComments = function (fileName, descriptors) {
+ return unwrapJSONCallResult(this.shim.getTodoComments(fileName, JSON.stringify(descriptors)));
+ };
+ LanguageServiceShimProxy.prototype.getBraceMatchingAtPosition = function (fileName, position) {
+ return unwrapJSONCallResult(this.shim.getBraceMatchingAtPosition(fileName, position));
+ };
+ LanguageServiceShimProxy.prototype.getIndentationAtPosition = function (fileName, position, options) {
+ return unwrapJSONCallResult(this.shim.getIndentationAtPosition(fileName, position, JSON.stringify(options)));
+ };
+ LanguageServiceShimProxy.prototype.getFormattingEditsForRange = function (fileName, start, end, options) {
+ return unwrapJSONCallResult(this.shim.getFormattingEditsForRange(fileName, start, end, JSON.stringify(options)));
+ };
+ LanguageServiceShimProxy.prototype.getFormattingEditsForDocument = function (fileName, options) {
+ return unwrapJSONCallResult(this.shim.getFormattingEditsForDocument(fileName, JSON.stringify(options)));
+ };
+ LanguageServiceShimProxy.prototype.getFormattingEditsAfterKeystroke = function (fileName, position, key, options) {
+ return unwrapJSONCallResult(this.shim.getFormattingEditsAfterKeystroke(fileName, position, key, JSON.stringify(options)));
+ };
+ LanguageServiceShimProxy.prototype.getDocCommentTemplateAtPosition = function (fileName, position) {
+ return unwrapJSONCallResult(this.shim.getDocCommentTemplateAtPosition(fileName, position));
+ };
+ LanguageServiceShimProxy.prototype.isValidBraceCompletionAtPosition = function (fileName, position, openingBrace) {
+ return unwrapJSONCallResult(this.shim.isValidBraceCompletionAtPosition(fileName, position, openingBrace));
+ };
+ LanguageServiceShimProxy.prototype.getJsxClosingTagAtPosition = function () {
+ throw new Error("Not supported on the shim.");
+ };
+ LanguageServiceShimProxy.prototype.getSpanOfEnclosingComment = function (fileName, position, onlyMultiLine) {
+ return unwrapJSONCallResult(this.shim.getSpanOfEnclosingComment(fileName, position, onlyMultiLine));
+ };
+ LanguageServiceShimProxy.prototype.getCodeFixesAtPosition = function () {
+ throw new Error("Not supported on the shim.");
+ };
+ LanguageServiceShimProxy.prototype.getCodeFixDiagnostics = function () {
+ throw new Error("Not supported on the shim.");
+ };
+ LanguageServiceShimProxy.prototype.getEditsForRefactor = function () {
+ throw new Error("Not supported on the shim.");
+ };
+ LanguageServiceShimProxy.prototype.getApplicableRefactors = function () {
+ throw new Error("Not supported on the shim.");
+ };
+ LanguageServiceShimProxy.prototype.organizeImports = function (_scope, _formatOptions) {
+ throw new Error("Not supported on the shim.");
+ };
+ LanguageServiceShimProxy.prototype.getEditsForFileRename = function () {
+ throw new Error("Not supported on the shim.");
+ };
+ LanguageServiceShimProxy.prototype.getEmitOutput = function (fileName) {
+ return unwrapJSONCallResult(this.shim.getEmitOutput(fileName));
+ };
+ LanguageServiceShimProxy.prototype.getProgram = function () {
+ throw new Error("Program can not be marshaled across the shim layer.");
+ };
+ LanguageServiceShimProxy.prototype.getNonBoundSourceFile = function () {
+ throw new Error("SourceFile can not be marshaled across the shim layer.");
+ };
+ LanguageServiceShimProxy.prototype.getSourceFile = function () {
+ throw new Error("SourceFile can not be marshaled across the shim layer.");
+ };
+ LanguageServiceShimProxy.prototype.dispose = function () { this.shim.dispose({}); };
+ return LanguageServiceShimProxy;
+ }());
+ var ShimLanguageServiceAdapter = /** @class */ (function () {
+ function ShimLanguageServiceAdapter(preprocessToResolve, cancellationToken, options) {
+ this.host = new ShimLanguageServiceHost(preprocessToResolve, cancellationToken, options);
+ this.factory = new TypeScript.Services.TypeScriptServicesFactory();
+ }
+ ShimLanguageServiceAdapter.prototype.getHost = function () { return this.host; };
+ ShimLanguageServiceAdapter.prototype.getLanguageService = function () { return new LanguageServiceShimProxy(this.factory.createLanguageServiceShim(this.host)); };
+ ShimLanguageServiceAdapter.prototype.getClassifier = function () { return new ClassifierShimProxy(this.factory.createClassifierShim(this.host)); };
+ ShimLanguageServiceAdapter.prototype.getPreProcessedFileInfo = function (fileName, fileContents) {
+ var shimResult;
+ var coreServicesShim = this.factory.createCoreServicesShim(this.host);
+ shimResult = unwrapJSONCallResult(coreServicesShim.getPreProcessedFileInfo(fileName, ts.ScriptSnapshot.fromString(fileContents)));
+ var convertResult = {
+ referencedFiles: [],
+ importedFiles: [],
+ ambientExternalModules: [],
+ isLibFile: shimResult.isLibFile,
+ typeReferenceDirectives: [],
+ libReferenceDirectives: []
+ };
+ ts.forEach(shimResult.referencedFiles, function (refFile) {
+ convertResult.referencedFiles.push({
+ fileName: refFile.path,
+ pos: refFile.position,
+ end: refFile.position + refFile.length
+ });
+ });
+ ts.forEach(shimResult.importedFiles, function (importedFile) {
+ convertResult.importedFiles.push({
+ fileName: importedFile.path,
+ pos: importedFile.position,
+ end: importedFile.position + importedFile.length
+ });
+ });
+ ts.forEach(shimResult.typeReferenceDirectives, function (typeRefDirective) {
+ convertResult.importedFiles.push({
+ fileName: typeRefDirective.path,
+ pos: typeRefDirective.position,
+ end: typeRefDirective.position + typeRefDirective.length
+ });
+ });
+ return convertResult;
+ };
+ return ShimLanguageServiceAdapter;
+ }());
+ LanguageService.ShimLanguageServiceAdapter = ShimLanguageServiceAdapter;
+ // Server adapter
+ var SessionClientHost = /** @class */ (function (_super) {
+ __extends(SessionClientHost, _super);
+ function SessionClientHost(cancellationToken, settings) {
+ var _this = _super.call(this, cancellationToken, settings) || this;
+ _this.onMessage = ts.noop;
+ _this.writeMessage = ts.noop;
+ return _this;
+ }
+ SessionClientHost.prototype.setClient = function (client) {
+ this.client = client;
+ };
+ SessionClientHost.prototype.openFile = function (fileName, content, scriptKindName) {
+ _super.prototype.openFile.call(this, fileName, content, scriptKindName);
+ this.client.openFile(fileName, content, scriptKindName);
+ };
+ SessionClientHost.prototype.editScript = function (fileName, start, end, newText) {
+ _super.prototype.editScript.call(this, fileName, start, end, newText);
+ this.client.changeFile(fileName, start, end, newText);
+ };
+ return SessionClientHost;
+ }(NativeLanguageServiceHost));
+ var SessionServerHost = /** @class */ (function () {
+ function SessionServerHost(host) {
+ this.host = host;
+ this.args = [];
+ this.useCaseSensitiveFileNames = false;
+ this.onMessage = ts.noop;
+ this.writeMessage = ts.noop; // overridden
+ this.writeFile = ts.noop;
+ this.exit = ts.noop;
+ this.close = ts.noop;
+ this.newLine = this.host.getNewLine();
+ }
+ SessionServerHost.prototype.write = function (message) {
+ this.writeMessage(message);
+ };
+ SessionServerHost.prototype.readFile = function (fileName) {
+ if (ts.stringContains(fileName, Harness.Compiler.defaultLibFileName)) {
+ fileName = Harness.Compiler.defaultLibFileName;
+ }
+ var snapshot = this.host.getScriptSnapshot(fileName);
+ return snapshot && ts.getSnapshotText(snapshot);
+ };
+ SessionServerHost.prototype.resolvePath = function (path) {
+ return path;
+ };
+ SessionServerHost.prototype.fileExists = function (path) {
+ return !!this.host.getScriptSnapshot(path);
+ };
+ SessionServerHost.prototype.directoryExists = function () {
+ // for tests assume that directory exists
+ return true;
+ };
+ SessionServerHost.prototype.getExecutingFilePath = function () {
+ return "";
+ };
+ SessionServerHost.prototype.createDirectory = function (_directoryName) {
+ return ts.notImplemented();
+ };
+ SessionServerHost.prototype.getCurrentDirectory = function () {
+ return this.host.getCurrentDirectory();
+ };
+ SessionServerHost.prototype.getDirectories = function () {
+ return [];
+ };
+ SessionServerHost.prototype.getEnvironmentVariable = function (name) {
+ return ts.sys.getEnvironmentVariable(name);
+ };
+ SessionServerHost.prototype.readDirectory = function () { return ts.notImplemented(); };
+ SessionServerHost.prototype.watchFile = function () {
+ return { close: ts.noop };
+ };
+ SessionServerHost.prototype.watchDirectory = function () {
+ return { close: ts.noop };
+ };
+ SessionServerHost.prototype.info = function (message) {
+ this.host.log(message);
+ };
+ SessionServerHost.prototype.msg = function (message) {
+ this.host.log(message);
+ };
+ SessionServerHost.prototype.loggingEnabled = function () {
+ return true;
+ };
+ SessionServerHost.prototype.getLogFileName = function () {
+ return undefined;
+ };
+ SessionServerHost.prototype.hasLevel = function () {
+ return false;
+ };
+ SessionServerHost.prototype.startGroup = function () { throw ts.notImplemented(); };
+ SessionServerHost.prototype.endGroup = function () { throw ts.notImplemented(); };
+ SessionServerHost.prototype.perftrc = function (message) {
+ return this.host.log(message);
+ };
+ SessionServerHost.prototype.setTimeout = function (callback, ms) {
+ var args = [];
+ for (var _i = 2; _i < arguments.length; _i++) {
+ args[_i - 2] = arguments[_i];
+ }
+ return setTimeout(callback, ms, args);
+ };
+ SessionServerHost.prototype.clearTimeout = function (timeoutId) {
+ clearTimeout(timeoutId);
+ };
+ SessionServerHost.prototype.setImmediate = function (callback, _ms) {
+ var args = [];
+ for (var _i = 2; _i < arguments.length; _i++) {
+ args[_i - 2] = arguments[_i];
+ }
+ return setImmediate(callback, args);
+ };
+ SessionServerHost.prototype.clearImmediate = function (timeoutId) {
+ clearImmediate(timeoutId);
+ };
+ SessionServerHost.prototype.createHash = function (s) {
+ return Harness.mockHash(s);
+ };
+ SessionServerHost.prototype.require = function (_initialDir, _moduleName) {
+ switch (_moduleName) {
+ // Adds to the Quick Info a fixed string and a string from the config file
+ // and replaces the first display part
+ case "quickinfo-augmeneter":
+ return {
+ module: function () { return ({
+ create: function (info) {
+ var proxy = makeDefaultProxy(info);
+ var langSvc = info.languageService;
+ // tslint:disable-next-line only-arrow-functions
+ proxy.getQuickInfoAtPosition = function () {
+ var parts = langSvc.getQuickInfoAtPosition.apply(langSvc, arguments);
+ if (parts.displayParts.length > 0) {
+ parts.displayParts[0].text = "Proxied";
+ }
+ parts.displayParts.push({ text: info.config.message, kind: "punctuation" });
+ return parts;
+ };
+ return proxy;
+ }
+ }); },
+ error: undefined
+ };
+ // Throws during initialization
+ case "create-thrower":
+ return {
+ module: function () { return ({
+ create: function () {
+ throw new Error("I am not a well-behaved plugin");
+ }
+ }); },
+ error: undefined
+ };
+ // Adds another diagnostic
+ case "diagnostic-adder":
+ return {
+ module: function () { return ({
+ create: function (info) {
+ var proxy = makeDefaultProxy(info);
+ proxy.getSemanticDiagnostics = function (filename) {
+ var prev = info.languageService.getSemanticDiagnostics(filename);
+ var sourceFile = info.project.getSourceFile(ts.toPath(filename, /*basePath*/ undefined, ts.createGetCanonicalFileName(info.serverHost.useCaseSensitiveFileNames)));
+ prev.push({
+ category: ts.DiagnosticCategory.Warning,
+ file: sourceFile,
+ code: 9999,
+ length: 3,
+ messageText: "Plugin diagnostic",
+ start: 0
+ });
+ return prev;
+ };
+ return proxy;
+ }
+ }); },
+ error: undefined
+ };
+ default:
+ return {
+ module: undefined,
+ error: new Error("Could not resolve module")
+ };
+ }
+ function makeDefaultProxy(info) {
+ // tslint:disable-next-line:no-null-keyword
+ var proxy = Object.create(/*prototype*/ null);
+ var langSvc = info.languageService;
+ var _loop_2 = function (k) {
+ // tslint:disable-next-line only-arrow-functions
+ proxy[k] = function () {
+ return langSvc[k].apply(langSvc, arguments);
+ };
+ };
+ for (var _i = 0, _a = Object.keys(langSvc); _i < _a.length; _i++) {
+ var k = _a[_i];
+ _loop_2(k);
+ }
+ return proxy;
+ }
+ };
+ return SessionServerHost;
+ }());
+ var ServerLanguageServiceAdapter = /** @class */ (function () {
+ function ServerLanguageServiceAdapter(cancellationToken, options) {
+ // This is the main host that tests use to direct tests
+ var clientHost = new SessionClientHost(cancellationToken, options);
+ var client = new ts.server.SessionClient(clientHost);
+ // This host is just a proxy for the clientHost, it uses the client
+ // host to answer server queries about files on disk
+ var serverHost = new SessionServerHost(clientHost);
+ var opts = {
+ host: serverHost,
+ cancellationToken: ts.server.nullCancellationToken,
+ useSingleInferredProject: false,
+ useInferredProjectPerProjectRoot: false,
+ typingsInstaller: undefined,
+ byteLength: Utils.byteLength,
+ hrtime: process.hrtime,
+ logger: serverHost,
+ canUseEvents: true
+ };
+ var server = new ts.server.Session(opts);
+ // Fake the connection between the client and the server
+ serverHost.writeMessage = client.onMessage.bind(client);
+ clientHost.writeMessage = server.onMessage.bind(server);
+ // Wire the client to the host to get notifications when a file is open
+ // or edited.
+ clientHost.setClient(client);
+ // Set the properties
+ this.client = client;
+ this.host = clientHost;
+ }
+ ServerLanguageServiceAdapter.prototype.getHost = function () { return this.host; };
+ ServerLanguageServiceAdapter.prototype.getLanguageService = function () { return this.client; };
+ ServerLanguageServiceAdapter.prototype.getClassifier = function () { throw new Error("getClassifier is not available using the server interface."); };
+ ServerLanguageServiceAdapter.prototype.getPreProcessedFileInfo = function () { throw new Error("getPreProcessedFileInfo is not available using the server interface."); };
+ return ServerLanguageServiceAdapter;
+ }());
+ LanguageService.ServerLanguageServiceAdapter = ServerLanguageServiceAdapter;
+ })(LanguageService = Harness.LanguageService || (Harness.LanguageService = {}));
+})(Harness || (Harness = {}));
+var ts;
+(function (ts) {
+ var TestFSWithWatch;
+ (function (TestFSWithWatch) {
+ TestFSWithWatch.libFile = {
+ path: "/a/lib/lib.d.ts",
+ content: "/// \ninterface Boolean {}\ninterface Function {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array {}"
+ };
+ TestFSWithWatch.safeList = {
+ path: "/safeList.json",
+ content: JSON.stringify({
+ commander: "commander",
+ express: "express",
+ jquery: "jquery",
+ lodash: "lodash",
+ moment: "moment",
+ chroma: "chroma-js"
+ })
+ };
+ function getExecutingFilePathFromLibFile() {
+ return ts.combinePaths(ts.getDirectoryPath(TestFSWithWatch.libFile.path), "tsc.js");
+ }
+ function createWatchedSystem(fileOrFolderList, params) {
+ if (!params) {
+ params = {};
+ }
+ var host = new TestServerHost(/*withSafelist*/ false, params.useCaseSensitiveFileNames !== undefined ? params.useCaseSensitiveFileNames : false, params.executingFilePath || getExecutingFilePathFromLibFile(), params.currentDirectory || "/", fileOrFolderList, params.newLine, params.useWindowsStylePaths, params.environmentVariables);
+ return host;
+ }
+ TestFSWithWatch.createWatchedSystem = createWatchedSystem;
+ function createServerHost(fileOrFolderList, params) {
+ if (!params) {
+ params = {};
+ }
+ var host = new TestServerHost(/*withSafelist*/ true, params.useCaseSensitiveFileNames !== undefined ? params.useCaseSensitiveFileNames : false, params.executingFilePath || getExecutingFilePathFromLibFile(), params.currentDirectory || "/", fileOrFolderList, params.newLine, params.useWindowsStylePaths, params.environmentVariables);
+ return host;
+ }
+ TestFSWithWatch.createServerHost = createServerHost;
+ function isFile(fileOrFolderOrSymLink) {
+ return ts.isString(fileOrFolderOrSymLink.content);
+ }
+ function isSymLink(fileOrFolderOrSymLink) {
+ return ts.isString(fileOrFolderOrSymLink.symLink);
+ }
+ function isFsFolder(s) {
+ return s && ts.isArray(s.entries);
+ }
+ function isFsFile(s) {
+ return s && ts.isString(s.content);
+ }
+ function isFsSymLink(s) {
+ return s && ts.isString(s.symLink);
+ }
+ function invokeWatcherCallbacks(callbacks, invokeCallback) {
+ if (callbacks) {
+ // The array copy is made to ensure that even if one of the callback removes the callbacks,
+ // we dont miss any callbacks following it
+ var cbs = callbacks.slice();
+ for (var _i = 0, cbs_1 = cbs; _i < cbs_1.length; _i++) {
+ var cb = cbs_1[_i];
+ invokeCallback(cb);
+ }
+ }
+ }
+ function getDiffInKeys(map, expectedKeys) {
+ if (map.size === expectedKeys.length) {
+ return "";
+ }
+ var notInActual = [];
+ var duplicates = [];
+ var seen = ts.createMap();
+ ts.forEach(expectedKeys, function (expectedKey) {
+ if (seen.has(expectedKey)) {
+ duplicates.push(expectedKey);
+ return;
+ }
+ seen.set(expectedKey, true);
+ if (!map.has(expectedKey)) {
+ notInActual.push(expectedKey);
+ }
+ });
+ var inActualNotExpected = [];
+ map.forEach(function (_value, key) {
+ if (!seen.has(key)) {
+ inActualNotExpected.push(key);
+ }
+ seen.set(key, true);
+ });
+ return "\n\nNotInActual: " + notInActual + "\nDuplicates: " + duplicates + "\nInActualButNotInExpected: " + inActualNotExpected;
+ }
+ function verifyMapSize(caption, map, expectedKeys) {
+ assert.equal(map.size, expectedKeys.length, caption + ": incorrect size of map: Actual keys: " + ts.arrayFrom(map.keys()) + " Expected: " + expectedKeys + getDiffInKeys(map, expectedKeys));
+ }
+ TestFSWithWatch.verifyMapSize = verifyMapSize;
+ function checkMapKeys(caption, map, expectedKeys) {
+ verifyMapSize(caption, map, expectedKeys);
+ for (var _i = 0, expectedKeys_1 = expectedKeys; _i < expectedKeys_1.length; _i++) {
+ var name = expectedKeys_1[_i];
+ assert.isTrue(map.has(name), caption + " is expected to contain " + name + ", actual keys: " + ts.arrayFrom(map.keys()));
+ }
+ }
+ function checkMultiMapKeyCount(caption, actual, expectedKeysMapOrArray, eachKeyCount) {
+ var expectedKeys = ts.isArray(expectedKeysMapOrArray) ? ts.arrayToMap(expectedKeysMapOrArray, function (s) { return s; }, function () { return eachKeyCount; }) : expectedKeysMapOrArray;
+ verifyMapSize(caption, actual, ts.arrayFrom(expectedKeys.keys()));
+ expectedKeys.forEach(function (count, name) {
+ assert.isTrue(actual.has(name), caption + ": expected to contain " + name + ", actual keys: " + ts.arrayFrom(actual.keys()));
+ assert.equal(actual.get(name).length, count, caption + ": Expected to be have " + count + " entries for " + name + ". Actual entry: " + JSON.stringify(actual.get(name)));
+ });
+ }
+ TestFSWithWatch.checkMultiMapKeyCount = checkMultiMapKeyCount;
+ function checkArray(caption, actual, expected) {
+ assert.equal(actual.length, expected.length, caption + ": incorrect actual number of files, expected:\r\n" + expected.join("\r\n") + "\r\ngot: " + actual.join("\r\n"));
+ for (var _i = 0, expected_1 = expected; _i < expected_1.length; _i++) {
+ var f = expected_1[_i];
+ assert.equal(true, ts.contains(actual, f), caption + ": expected to find " + f + " in " + actual);
+ }
+ }
+ TestFSWithWatch.checkArray = checkArray;
+ function checkWatchedFiles(host, expectedFiles) {
+ checkMapKeys("watchedFiles", host.watchedFiles, expectedFiles);
+ }
+ TestFSWithWatch.checkWatchedFiles = checkWatchedFiles;
+ function checkWatchedFilesDetailed(host, expectedFiles, eachFileWatchCount) {
+ if (ts.isArray(expectedFiles)) {
+ checkMultiMapKeyCount("watchedFiles", host.watchedFiles, expectedFiles, eachFileWatchCount);
+ }
+ else {
+ checkMultiMapKeyCount("watchedFiles", host.watchedFiles, expectedFiles);
+ }
+ }
+ TestFSWithWatch.checkWatchedFilesDetailed = checkWatchedFilesDetailed;
+ function checkWatchedDirectories(host, expectedDirectories, recursive) {
+ checkMapKeys("watchedDirectories" + (recursive ? " recursive" : ""), recursive ? host.watchedDirectoriesRecursive : host.watchedDirectories, expectedDirectories);
+ }
+ TestFSWithWatch.checkWatchedDirectories = checkWatchedDirectories;
+ function checkWatchedDirectoriesDetailed(host, expectedDirectories, recursiveOrEachDirectoryWatchCount, recursive) {
+ if (ts.isArray(expectedDirectories)) {
+ checkMultiMapKeyCount("watchedDirectories" + (recursive ? " recursive" : ""), recursive ? host.watchedDirectoriesRecursive : host.watchedDirectories, expectedDirectories, recursiveOrEachDirectoryWatchCount);
+ }
+ else {
+ recursive = recursiveOrEachDirectoryWatchCount;
+ checkMultiMapKeyCount("watchedDirectories" + (recursive ? " recursive" : ""), recursive ? host.watchedDirectoriesRecursive : host.watchedDirectories, expectedDirectories);
+ }
+ }
+ TestFSWithWatch.checkWatchedDirectoriesDetailed = checkWatchedDirectoriesDetailed;
+ function checkOutputContains(host, expected) {
+ var mapExpected = ts.arrayToSet(expected);
+ var mapSeen = ts.createMap();
+ for (var _i = 0, _a = host.getOutput(); _i < _a.length; _i++) {
+ var f = _a[_i];
+ assert.isUndefined(mapSeen.get(f), "Already found " + f + " in " + JSON.stringify(host.getOutput()));
+ if (mapExpected.has(f)) {
+ mapExpected.delete(f);
+ mapSeen.set(f, true);
+ }
+ }
+ assert.equal(mapExpected.size, 0, "Output has missing " + JSON.stringify(ts.arrayFrom(mapExpected.keys())) + " in " + JSON.stringify(host.getOutput()));
+ }
+ TestFSWithWatch.checkOutputContains = checkOutputContains;
+ function checkOutputDoesNotContain(host, expectedToBeAbsent) {
+ var mapExpectedToBeAbsent = ts.arrayToSet(expectedToBeAbsent);
+ for (var _i = 0, _a = host.getOutput(); _i < _a.length; _i++) {
+ var f = _a[_i];
+ assert.isFalse(mapExpectedToBeAbsent.has(f), "Contains " + f + " in " + JSON.stringify(host.getOutput()));
+ }
+ }
+ TestFSWithWatch.checkOutputDoesNotContain = checkOutputDoesNotContain;
+ var Callbacks = /** @class */ (function () {
+ function Callbacks() {
+ this.map = [];
+ this.nextId = 1;
+ }
+ Callbacks.prototype.getNextId = function () {
+ return this.nextId;
+ };
+ Callbacks.prototype.register = function (cb, args) {
+ var timeoutId = this.nextId;
+ this.nextId++;
+ this.map[timeoutId] = cb.bind.apply(cb, [/*this*/ undefined].concat(args));
+ return timeoutId;
+ };
+ Callbacks.prototype.unregister = function (id) {
+ if (typeof id === "number") {
+ delete this.map[id];
+ }
+ };
+ Callbacks.prototype.count = function () {
+ var n = 0;
+ for (var _ in this.map) {
+ n++;
+ }
+ return n;
+ };
+ Callbacks.prototype.invoke = function (invokeKey) {
+ if (invokeKey) {
+ this.map[invokeKey]();
+ delete this.map[invokeKey];
+ return;
+ }
+ // Note: invoking a callback may result in new callbacks been queued,
+ // so do not clear the entire callback list regardless. Only remove the
+ // ones we have invoked.
+ for (var key in this.map) {
+ this.map[key]();
+ delete this.map[key];
+ }
+ };
+ return Callbacks;
+ }());
+ var Tsc_WatchDirectory;
+ (function (Tsc_WatchDirectory) {
+ Tsc_WatchDirectory["WatchFile"] = "RecursiveDirectoryUsingFsWatchFile";
+ Tsc_WatchDirectory["NonRecursiveWatchDirectory"] = "RecursiveDirectoryUsingNonRecursiveWatchDirectory";
+ Tsc_WatchDirectory["DynamicPolling"] = "RecursiveDirectoryUsingDynamicPriorityPolling";
+ })(Tsc_WatchDirectory = TestFSWithWatch.Tsc_WatchDirectory || (TestFSWithWatch.Tsc_WatchDirectory = {}));
+ var timeIncrements = 1000;
+ var TestServerHost = /** @class */ (function () {
+ function TestServerHost(withSafeList, useCaseSensitiveFileNames, executingFilePath, currentDirectory, fileOrFolderorSymLinkList, newLine, useWindowsStylePath, environmentVariables) {
+ if (newLine === void 0) { newLine = "\n"; }
+ var _this = this;
+ this.withSafeList = withSafeList;
+ this.useCaseSensitiveFileNames = useCaseSensitiveFileNames;
+ this.newLine = newLine;
+ this.useWindowsStylePath = useWindowsStylePath;
+ this.environmentVariables = environmentVariables;
+ this.args = [];
+ this.output = [];
+ this.fs = ts.createMap();
+ this.time = timeIncrements;
+ this.timeoutCallbacks = new Callbacks();
+ this.immediateCallbacks = new Callbacks();
+ this.screenClears = [];
+ this.watchedDirectories = ts.createMultiMap();
+ this.watchedDirectoriesRecursive = ts.createMultiMap();
+ this.watchedFiles = ts.createMultiMap();
+ this.exitMessage = "System Exit";
+ this.resolvePath = function (s) { return s; };
+ this.getExecutingFilePath = function () { return _this.executingFilePath; };
+ this.getCurrentDirectory = function () { return _this.currentDirectory; };
+ this.getCanonicalFileName = ts.createGetCanonicalFileName(useCaseSensitiveFileNames);
+ this.toPath = function (s) { return ts.toPath(s, currentDirectory, _this.getCanonicalFileName); };
+ this.executingFilePath = this.getHostSpecificPath(executingFilePath);
+ this.currentDirectory = this.getHostSpecificPath(currentDirectory);
+ this.reloadFS(fileOrFolderorSymLinkList);
+ this.dynamicPriorityWatchFile = this.environmentVariables && this.environmentVariables.get("TSC_WATCHFILE") === "DynamicPriorityPolling" ?
+ ts.createDynamicPriorityPollingWatchFile(this) :
+ undefined;
+ var tscWatchDirectory = this.environmentVariables && this.environmentVariables.get("TSC_WATCHDIRECTORY");
+ if (tscWatchDirectory === Tsc_WatchDirectory.WatchFile) {
+ var watchDirectory = function (directory, cb) { return _this.watchFile(directory, function () { return cb(directory); }, ts.PollingInterval.Medium); };
+ this.customRecursiveWatchDirectory = ts.createRecursiveDirectoryWatcher({
+ directoryExists: function (path) { return _this.directoryExists(path); },
+ getAccessibleSortedChildDirectories: function (path) { return _this.getDirectories(path); },
+ filePathComparer: this.useCaseSensitiveFileNames ? ts.compareStringsCaseSensitive : ts.compareStringsCaseInsensitive,
+ watchDirectory: watchDirectory,
+ realpath: function (s) { return _this.realpath(s); }
+ });
+ }
+ else if (tscWatchDirectory === Tsc_WatchDirectory.NonRecursiveWatchDirectory) {
+ var watchDirectory = function (directory, cb) { return _this.watchDirectory(directory, function (fileName) { return cb(fileName); }, /*recursive*/ false); };
+ this.customRecursiveWatchDirectory = ts.createRecursiveDirectoryWatcher({
+ directoryExists: function (path) { return _this.directoryExists(path); },
+ getAccessibleSortedChildDirectories: function (path) { return _this.getDirectories(path); },
+ filePathComparer: this.useCaseSensitiveFileNames ? ts.compareStringsCaseSensitive : ts.compareStringsCaseInsensitive,
+ watchDirectory: watchDirectory,
+ realpath: function (s) { return _this.realpath(s); }
+ });
+ }
+ else if (tscWatchDirectory === Tsc_WatchDirectory.DynamicPolling) {
+ var watchFile_1 = ts.createDynamicPriorityPollingWatchFile(this);
+ var watchDirectory = function (directory, cb) { return watchFile_1(directory, function () { return cb(directory); }, ts.PollingInterval.Medium); };
+ this.customRecursiveWatchDirectory = ts.createRecursiveDirectoryWatcher({
+ directoryExists: function (path) { return _this.directoryExists(path); },
+ getAccessibleSortedChildDirectories: function (path) { return _this.getDirectories(path); },
+ filePathComparer: this.useCaseSensitiveFileNames ? ts.compareStringsCaseSensitive : ts.compareStringsCaseInsensitive,
+ watchDirectory: watchDirectory,
+ realpath: function (s) { return _this.realpath(s); }
+ });
+ }
+ }
+ TestServerHost.prototype.getNewLine = function () {
+ return this.newLine;
+ };
+ TestServerHost.prototype.toNormalizedAbsolutePath = function (s) {
+ return ts.getNormalizedAbsolutePath(s, this.currentDirectory);
+ };
+ TestServerHost.prototype.toFullPath = function (s) {
+ return this.toPath(this.toNormalizedAbsolutePath(s));
+ };
+ TestServerHost.prototype.getHostSpecificPath = function (s) {
+ if (this.useWindowsStylePath && s.startsWith(ts.directorySeparator)) {
+ return "c:/" + s.substring(1);
+ }
+ return s;
+ };
+ TestServerHost.prototype.now = function () {
+ this.time += timeIncrements;
+ return new Date(this.time);
+ };
+ TestServerHost.prototype.reloadFS = function (fileOrFolderOrSymLinkList, options) {
+ var _this = this;
+ var mapNewLeaves = ts.createMap();
+ var isNewFs = this.fs.size === 0;
+ fileOrFolderOrSymLinkList = fileOrFolderOrSymLinkList.concat(this.withSafeList ? TestFSWithWatch.safeList : []);
+ var filesOrFoldersToLoad = !this.useWindowsStylePath ? fileOrFolderOrSymLinkList :
+ fileOrFolderOrSymLinkList.map(function (f) {
+ var result = ts.clone(f);
+ result.path = _this.getHostSpecificPath(f.path);
+ return result;
+ });
+ for (var _i = 0, filesOrFoldersToLoad_1 = filesOrFoldersToLoad; _i < filesOrFoldersToLoad_1.length; _i++) {
+ var fileOrDirectory = filesOrFoldersToLoad_1[_i];
+ var path = this.toFullPath(fileOrDirectory.path);
+ mapNewLeaves.set(path, true);
+ // If its a change
+ var currentEntry = this.fs.get(path);
+ if (currentEntry) {
+ if (isFsFile(currentEntry)) {
+ if (isFile(fileOrDirectory)) {
+ // Update file
+ if (currentEntry.content !== fileOrDirectory.content) {
+ this.modifyFile(fileOrDirectory.path, fileOrDirectory.content, options);
+ }
+ }
+ else {
+ // TODO: Changing from file => folder/Symlink
+ }
+ }
+ else if (isFsSymLink(currentEntry)) {
+ // TODO: update symlinks
+ }
+ else {
+ // Folder
+ if (isFile(fileOrDirectory)) {
+ // TODO: Changing from folder => file
+ }
+ else {
+ // Folder update: Nothing to do.
+ currentEntry.modifiedTime = this.now();
+ }
+ }
+ }
+ else {
+ this.ensureFileOrFolder(fileOrDirectory, options && options.ignoreWatchInvokedWithTriggerAsFileCreate);
+ }
+ }
+ if (!isNewFs) {
+ this.fs.forEach(function (fileOrDirectory, path) {
+ // If this entry is not from the new file or folder
+ if (!mapNewLeaves.get(path)) {
+ // Leaf entries that arent in new list => remove these
+ if (isFsFile(fileOrDirectory) || isFsSymLink(fileOrDirectory) || isFsFolder(fileOrDirectory) && fileOrDirectory.entries.length === 0) {
+ _this.removeFileOrFolder(fileOrDirectory, function (folder) { return !mapNewLeaves.get(folder.path); });
+ }
+ }
+ });
+ }
+ };
+ TestServerHost.prototype.modifyFile = function (filePath, content, options) {
+ var path = this.toFullPath(filePath);
+ var currentEntry = this.fs.get(path);
+ if (!currentEntry || !isFsFile(currentEntry)) {
+ throw new Error("file not present: " + filePath);
+ }
+ if (options && options.invokeFileDeleteCreateAsPartInsteadOfChange) {
+ this.removeFileOrFolder(currentEntry, ts.returnFalse);
+ this.ensureFileOrFolder({ path: filePath, content: content });
+ }
+ else {
+ currentEntry.content = content;
+ currentEntry.modifiedTime = this.now();
+ this.fs.get(ts.getDirectoryPath(currentEntry.path)).modifiedTime = this.now();
+ if (options && options.invokeDirectoryWatcherInsteadOfFileChanged) {
+ this.invokeDirectoryWatcher(ts.getDirectoryPath(currentEntry.fullPath), currentEntry.fullPath);
+ }
+ else {
+ this.invokeFileWatcher(currentEntry.fullPath, ts.FileWatcherEventKind.Changed);
+ }
+ }
+ };
+ TestServerHost.prototype.renameFolder = function (folderName, newFolderName) {
+ var fullPath = ts.getNormalizedAbsolutePath(folderName, this.currentDirectory);
+ var path = this.toPath(fullPath);
+ var folder = this.fs.get(path);
+ ts.Debug.assert(!!folder);
+ // Only remove the folder
+ this.removeFileOrFolder(folder, ts.returnFalse, /*isRenaming*/ true);
+ // Add updated folder with new folder name
+ var newFullPath = ts.getNormalizedAbsolutePath(newFolderName, this.currentDirectory);
+ var newFolder = this.toFsFolder(newFullPath);
+ var newPath = newFolder.path;
+ var basePath = ts.getDirectoryPath(path);
+ ts.Debug.assert(basePath !== path);
+ ts.Debug.assert(basePath === ts.getDirectoryPath(newPath));
+ var baseFolder = this.fs.get(basePath);
+ this.addFileOrFolderInFolder(baseFolder, newFolder);
+ // Invoke watches for files in the folder as deleted (from old path)
+ this.renameFolderEntries(folder, newFolder);
+ };
+ TestServerHost.prototype.renameFolderEntries = function (oldFolder, newFolder) {
+ for (var _i = 0, _a = oldFolder.entries; _i < _a.length; _i++) {
+ var entry = _a[_i];
+ this.fs.delete(entry.path);
+ this.invokeFileWatcher(entry.fullPath, ts.FileWatcherEventKind.Deleted);
+ entry.fullPath = ts.combinePaths(newFolder.fullPath, ts.getBaseFileName(entry.fullPath));
+ entry.path = this.toPath(entry.fullPath);
+ if (newFolder !== oldFolder) {
+ newFolder.entries.push(entry);
+ }
+ this.fs.set(entry.path, entry);
+ this.invokeFileWatcher(entry.fullPath, ts.FileWatcherEventKind.Created);
+ if (isFsFolder(entry)) {
+ this.renameFolderEntries(entry, entry);
+ }
+ }
+ };
+ TestServerHost.prototype.ensureFileOrFolder = function (fileOrDirectoryOrSymLink, ignoreWatchInvokedWithTriggerAsFileCreate) {
+ if (isFile(fileOrDirectoryOrSymLink)) {
+ var file = this.toFsFile(fileOrDirectoryOrSymLink);
+ // file may already exist when updating existing type declaration file
+ if (!this.fs.get(file.path)) {
+ var baseFolder = this.ensureFolder(ts.getDirectoryPath(file.fullPath));
+ this.addFileOrFolderInFolder(baseFolder, file, ignoreWatchInvokedWithTriggerAsFileCreate);
+ }
+ }
+ else if (isSymLink(fileOrDirectoryOrSymLink)) {
+ var symLink = this.toFsSymLink(fileOrDirectoryOrSymLink);
+ ts.Debug.assert(!this.fs.get(symLink.path));
+ var baseFolder = this.ensureFolder(ts.getDirectoryPath(symLink.fullPath));
+ this.addFileOrFolderInFolder(baseFolder, symLink, ignoreWatchInvokedWithTriggerAsFileCreate);
+ }
+ else {
+ var fullPath = ts.getNormalizedAbsolutePath(fileOrDirectoryOrSymLink.path, this.currentDirectory);
+ this.ensureFolder(fullPath);
+ }
+ };
+ TestServerHost.prototype.ensureFolder = function (fullPath) {
+ var path = this.toPath(fullPath);
+ var folder = this.fs.get(path);
+ if (!folder) {
+ folder = this.toFsFolder(fullPath);
+ var baseFullPath = ts.getDirectoryPath(fullPath);
+ if (fullPath !== baseFullPath) {
+ // Add folder in the base folder
+ var baseFolder = this.ensureFolder(baseFullPath);
+ this.addFileOrFolderInFolder(baseFolder, folder);
+ }
+ else {
+ // root folder
+ ts.Debug.assert(this.fs.size === 0);
+ this.fs.set(path, folder);
+ }
+ }
+ ts.Debug.assert(isFsFolder(folder));
+ return folder;
+ };
+ TestServerHost.prototype.addFileOrFolderInFolder = function (folder, fileOrDirectory, ignoreWatch) {
+ ts.insertSorted(folder.entries, fileOrDirectory, function (a, b) { return ts.compareStringsCaseSensitive(ts.getBaseFileName(a.path), ts.getBaseFileName(b.path)); });
+ folder.modifiedTime = this.now();
+ this.fs.set(fileOrDirectory.path, fileOrDirectory);
+ if (ignoreWatch) {
+ return;
+ }
+ this.invokeFileWatcher(fileOrDirectory.fullPath, ts.FileWatcherEventKind.Created);
+ this.invokeDirectoryWatcher(folder.fullPath, fileOrDirectory.fullPath);
+ };
+ TestServerHost.prototype.removeFileOrFolder = function (fileOrDirectory, isRemovableLeafFolder, isRenaming) {
+ if (isRenaming === void 0) { isRenaming = false; }
+ var basePath = ts.getDirectoryPath(fileOrDirectory.path);
+ var baseFolder = this.fs.get(basePath);
+ if (basePath !== fileOrDirectory.path) {
+ ts.Debug.assert(!!baseFolder);
+ baseFolder.modifiedTime = this.now();
+ ts.filterMutate(baseFolder.entries, function (entry) { return entry !== fileOrDirectory; });
+ }
+ this.fs.delete(fileOrDirectory.path);
+ this.invokeFileWatcher(fileOrDirectory.fullPath, ts.FileWatcherEventKind.Deleted);
+ if (isFsFolder(fileOrDirectory)) {
+ ts.Debug.assert(fileOrDirectory.entries.length === 0 || isRenaming);
+ var relativePath = this.getRelativePathToDirectory(fileOrDirectory.fullPath, fileOrDirectory.fullPath);
+ // Invoke directory and recursive directory watcher for the folder
+ // Here we arent invoking recursive directory watchers for the base folders
+ // since that is something we would want to do for both file as well as folder we are deleting
+ this.invokeWatchedDirectoriesCallback(fileOrDirectory.fullPath, relativePath);
+ this.invokeWatchedDirectoriesRecursiveCallback(fileOrDirectory.fullPath, relativePath);
+ }
+ if (basePath !== fileOrDirectory.path) {
+ if (baseFolder.entries.length === 0 && isRemovableLeafFolder(baseFolder)) {
+ this.removeFileOrFolder(baseFolder, isRemovableLeafFolder);
+ }
+ else {
+ this.invokeRecursiveDirectoryWatcher(baseFolder.fullPath, fileOrDirectory.fullPath);
+ }
+ }
+ };
+ TestServerHost.prototype.removeFolder = function (folderPath, recursive) {
+ var _this = this;
+ var path = this.toFullPath(folderPath);
+ var currentEntry = this.fs.get(path);
+ ts.Debug.assert(isFsFolder(currentEntry));
+ if (recursive && currentEntry.entries.length) {
+ var subEntries = currentEntry.entries.slice();
+ subEntries.forEach(function (fsEntry) {
+ if (isFsFolder(fsEntry)) {
+ _this.removeFolder(fsEntry.fullPath, recursive);
+ }
+ else {
+ _this.removeFileOrFolder(fsEntry, ts.returnFalse);
+ }
+ });
+ }
+ this.removeFileOrFolder(currentEntry, ts.returnFalse);
+ };
+ // For overriding the methods
+ TestServerHost.prototype.invokeWatchedDirectoriesCallback = function (folderFullPath, relativePath) {
+ var _this = this;
+ invokeWatcherCallbacks(this.watchedDirectories.get(this.toPath(folderFullPath)), function (cb) { return _this.directoryCallback(cb, relativePath); });
+ };
+ TestServerHost.prototype.invokeWatchedDirectoriesRecursiveCallback = function (folderFullPath, relativePath) {
+ var _this = this;
+ invokeWatcherCallbacks(this.watchedDirectoriesRecursive.get(this.toPath(folderFullPath)), function (cb) { return _this.directoryCallback(cb, relativePath); });
+ };
+ TestServerHost.prototype.invokeFileWatcher = function (fileFullPath, eventKind, useFileNameInCallback) {
+ invokeWatcherCallbacks(this.watchedFiles.get(this.toPath(fileFullPath)), function (_a) {
+ var cb = _a.cb, fileName = _a.fileName;
+ return cb(useFileNameInCallback ? fileName : fileFullPath, eventKind);
+ });
+ };
+ TestServerHost.prototype.getRelativePathToDirectory = function (directoryFullPath, fileFullPath) {
+ return ts.getRelativePathToDirectoryOrUrl(directoryFullPath, fileFullPath, this.currentDirectory, this.getCanonicalFileName, /*isAbsolutePathAnUrl*/ false);
+ };
+ /**
+ * This will call the directory watcher for the folderFullPath and recursive directory watchers for this and base folders
+ */
+ TestServerHost.prototype.invokeDirectoryWatcher = function (folderFullPath, fileName) {
+ var relativePath = this.getRelativePathToDirectory(folderFullPath, fileName);
+ // Folder is changed when the directory watcher is invoked
+ this.invokeFileWatcher(folderFullPath, ts.FileWatcherEventKind.Changed, /*useFileNameInCallback*/ true);
+ this.invokeWatchedDirectoriesCallback(folderFullPath, relativePath);
+ this.invokeRecursiveDirectoryWatcher(folderFullPath, fileName);
+ };
+ TestServerHost.prototype.directoryCallback = function (_a, relativePath) {
+ var cb = _a.cb, directoryName = _a.directoryName;
+ cb(ts.combinePaths(directoryName, relativePath));
+ };
+ /**
+ * This will call the recursive directory watcher for this directory as well as all the base directories
+ */
+ TestServerHost.prototype.invokeRecursiveDirectoryWatcher = function (fullPath, fileName) {
+ var relativePath = this.getRelativePathToDirectory(fullPath, fileName);
+ this.invokeWatchedDirectoriesRecursiveCallback(fullPath, relativePath);
+ var basePath = ts.getDirectoryPath(fullPath);
+ if (this.getCanonicalFileName(fullPath) !== this.getCanonicalFileName(basePath)) {
+ this.invokeRecursiveDirectoryWatcher(basePath, fileName);
+ }
+ };
+ TestServerHost.prototype.toFsEntry = function (path) {
+ var fullPath = ts.getNormalizedAbsolutePath(path, this.currentDirectory);
+ return {
+ path: this.toPath(fullPath),
+ fullPath: fullPath,
+ modifiedTime: this.now()
+ };
+ };
+ TestServerHost.prototype.toFsFile = function (file) {
+ var fsFile = this.toFsEntry(file.path);
+ fsFile.content = file.content;
+ fsFile.fileSize = file.fileSize;
+ return fsFile;
+ };
+ TestServerHost.prototype.toFsSymLink = function (symLink) {
+ var fsSymLink = this.toFsEntry(symLink.path);
+ fsSymLink.symLink = ts.getNormalizedAbsolutePath(symLink.symLink, ts.getDirectoryPath(fsSymLink.fullPath));
+ return fsSymLink;
+ };
+ TestServerHost.prototype.toFsFolder = function (path) {
+ var fsFolder = this.toFsEntry(path);
+ fsFolder.entries = []; // https://github.com/Microsoft/TypeScript/issues/19873
+ return fsFolder;
+ };
+ TestServerHost.prototype.getRealFsEntry = function (isFsEntry, path, fsEntry) {
+ if (fsEntry === void 0) { fsEntry = this.fs.get(path); }
+ if (isFsEntry(fsEntry)) {
+ return fsEntry;
+ }
+ if (isFsSymLink(fsEntry)) {
+ return this.getRealFsEntry(isFsEntry, this.toPath(fsEntry.symLink));
+ }
+ if (fsEntry) {
+ // This fs entry is something else
+ return undefined;
+ }
+ var realpath = this.realpath(path);
+ if (path !== realpath) {
+ return this.getRealFsEntry(isFsEntry, this.toPath(realpath));
+ }
+ return undefined;
+ };
+ TestServerHost.prototype.isFsFile = function (fsEntry) {
+ return !!this.getRealFile(fsEntry.path, fsEntry);
+ };
+ TestServerHost.prototype.getRealFile = function (path, fsEntry) {
+ return this.getRealFsEntry(isFsFile, path, fsEntry);
+ };
+ TestServerHost.prototype.isFsFolder = function (fsEntry) {
+ return !!this.getRealFolder(fsEntry.path, fsEntry);
+ };
+ TestServerHost.prototype.getRealFolder = function (path, fsEntry) {
+ if (fsEntry === void 0) { fsEntry = this.fs.get(path); }
+ return this.getRealFsEntry(isFsFolder, path, fsEntry);
+ };
+ TestServerHost.prototype.fileExists = function (s) {
+ var path = this.toFullPath(s);
+ return !!this.getRealFile(path);
+ };
+ TestServerHost.prototype.getModifiedTime = function (s) {
+ var path = this.toFullPath(s);
+ var fsEntry = this.fs.get(path);
+ return (fsEntry && fsEntry.modifiedTime); // TODO: GH#18217
+ };
+ TestServerHost.prototype.readFile = function (s) {
+ var fsEntry = this.getRealFile(this.toFullPath(s));
+ return fsEntry ? fsEntry.content : undefined;
+ };
+ TestServerHost.prototype.getFileSize = function (s) {
+ var path = this.toFullPath(s);
+ var entry = this.fs.get(path);
+ if (isFsFile(entry)) {
+ return entry.fileSize ? entry.fileSize : entry.content.length;
+ }
+ return undefined; // TODO: GH#18217
+ };
+ TestServerHost.prototype.directoryExists = function (s) {
+ var path = this.toFullPath(s);
+ return !!this.getRealFolder(path);
+ };
+ TestServerHost.prototype.getDirectories = function (s) {
+ var _this = this;
+ var path = this.toFullPath(s);
+ var folder = this.getRealFolder(path);
+ if (folder) {
+ return ts.mapDefined(folder.entries, function (entry) { return _this.isFsFolder(entry) ? ts.getBaseFileName(entry.fullPath) : undefined; });
+ }
+ ts.Debug.fail(folder ? "getDirectories called on file" : "getDirectories called on missing folder");
+ return [];
+ };
+ TestServerHost.prototype.readDirectory = function (path, extensions, exclude, include, depth) {
+ var _this = this;
+ return ts.matchFiles(path, extensions, exclude, include, this.useCaseSensitiveFileNames, this.getCurrentDirectory(), depth, function (dir) {
+ var directories = [];
+ var files = [];
+ var folder = _this.getRealFolder(_this.toPath(dir));
+ if (folder) {
+ folder.entries.forEach(function (entry) {
+ if (_this.isFsFolder(entry)) {
+ directories.push(ts.getBaseFileName(entry.fullPath));
+ }
+ else if (_this.isFsFile(entry)) {
+ files.push(ts.getBaseFileName(entry.fullPath));
+ }
+ else {
+ ts.Debug.fail("Unknown entry");
+ }
+ });
+ }
+ return { directories: directories, files: files };
+ });
+ };
+ TestServerHost.prototype.watchDirectory = function (directoryName, cb, recursive) {
+ if (recursive && this.customRecursiveWatchDirectory) {
+ return this.customRecursiveWatchDirectory(directoryName, cb, /*recursive*/ true);
+ }
+ var path = this.toFullPath(directoryName);
+ var map = recursive ? this.watchedDirectoriesRecursive : this.watchedDirectories;
+ var callback = {
+ cb: cb,
+ directoryName: directoryName
+ };
+ map.add(path, callback);
+ return {
+ close: function () { return map.remove(path, callback); }
+ };
+ };
+ TestServerHost.prototype.createHash = function (s) {
+ return Harness.mockHash(s);
+ };
+ TestServerHost.prototype.createSHA256Hash = function (s) {
+ return ts.sys.createSHA256Hash(s);
+ };
+ TestServerHost.prototype.watchFile = function (fileName, cb, pollingInterval) {
+ var _this = this;
+ if (this.dynamicPriorityWatchFile) {
+ return this.dynamicPriorityWatchFile(fileName, cb, pollingInterval);
+ }
+ var path = this.toFullPath(fileName);
+ var callback = { fileName: fileName, cb: cb };
+ this.watchedFiles.add(path, callback);
+ return { close: function () { return _this.watchedFiles.remove(path, callback); } };
+ };
+ // TOOD: record and invoke callbacks to simulate timer events
+ TestServerHost.prototype.setTimeout = function (callback, _time) {
+ var args = [];
+ for (var _i = 2; _i < arguments.length; _i++) {
+ args[_i - 2] = arguments[_i];
+ }
+ return this.timeoutCallbacks.register(callback, args);
+ };
+ TestServerHost.prototype.getNextTimeoutId = function () {
+ return this.timeoutCallbacks.getNextId();
+ };
+ TestServerHost.prototype.clearTimeout = function (timeoutId) {
+ this.timeoutCallbacks.unregister(timeoutId);
+ };
+ TestServerHost.prototype.clearScreen = function () {
+ this.screenClears.push(this.output.length);
+ };
+ TestServerHost.prototype.checkTimeoutQueueLengthAndRun = function (expected) {
+ this.checkTimeoutQueueLength(expected);
+ this.runQueuedTimeoutCallbacks();
+ };
+ TestServerHost.prototype.checkTimeoutQueueLength = function (expected) {
+ var callbacksCount = this.timeoutCallbacks.count();
+ assert.equal(callbacksCount, expected, "expected " + expected + " timeout callbacks queued but found " + callbacksCount + ".");
+ };
+ TestServerHost.prototype.runQueuedTimeoutCallbacks = function (timeoutId) {
+ try {
+ this.timeoutCallbacks.invoke(timeoutId);
+ }
+ catch (e) {
+ if (e.message === this.exitMessage) {
+ return;
+ }
+ throw e;
+ }
+ };
+ TestServerHost.prototype.runQueuedImmediateCallbacks = function (checkCount) {
+ if (checkCount !== undefined) {
+ assert.equal(this.immediateCallbacks.count(), checkCount);
+ }
+ this.immediateCallbacks.invoke();
+ };
+ TestServerHost.prototype.setImmediate = function (callback, _time) {
+ var args = [];
+ for (var _i = 2; _i < arguments.length; _i++) {
+ args[_i - 2] = arguments[_i];
+ }
+ return this.immediateCallbacks.register(callback, args);
+ };
+ TestServerHost.prototype.clearImmediate = function (timeoutId) {
+ this.immediateCallbacks.unregister(timeoutId);
+ };
+ TestServerHost.prototype.createDirectory = function (directoryName) {
+ var folder = this.toFsFolder(directoryName);
+ // base folder has to be present
+ var base = ts.getDirectoryPath(folder.path);
+ var baseFolder = this.fs.get(base);
+ ts.Debug.assert(isFsFolder(baseFolder));
+ ts.Debug.assert(!this.fs.get(folder.path));
+ this.addFileOrFolderInFolder(baseFolder, folder);
+ };
+ TestServerHost.prototype.writeFile = function (path, content) {
+ var file = this.toFsFile({ path: path, content: content });
+ // base folder has to be present
+ var base = ts.getDirectoryPath(file.path);
+ var folder = this.fs.get(base);
+ ts.Debug.assert(isFsFolder(folder));
+ this.addFileOrFolderInFolder(folder, file);
+ };
+ TestServerHost.prototype.write = function (message) {
+ this.output.push(message);
+ };
+ TestServerHost.prototype.getOutput = function () {
+ return this.output;
+ };
+ TestServerHost.prototype.clearOutput = function () {
+ ts.clear(this.output);
+ this.screenClears.length = 0;
+ };
+ TestServerHost.prototype.realpath = function (s) {
+ var fullPath = this.toNormalizedAbsolutePath(s);
+ var path = this.toPath(fullPath);
+ if (ts.getDirectoryPath(path) === path) {
+ // Root
+ return s;
+ }
+ var dirFullPath = this.realpath(ts.getDirectoryPath(fullPath));
+ var realFullPath = ts.combinePaths(dirFullPath, ts.getBaseFileName(fullPath));
+ var fsEntry = this.fs.get(this.toPath(realFullPath));
+ if (isFsSymLink(fsEntry)) {
+ return this.realpath(fsEntry.symLink);
+ }
+ return realFullPath;
+ };
+ TestServerHost.prototype.exit = function (exitCode) {
+ this.exitCode = exitCode;
+ throw new Error(this.exitMessage);
+ };
+ TestServerHost.prototype.getEnvironmentVariable = function (name) {
+ return this.environmentVariables && this.environmentVariables.get(name) || "";
+ };
+ return TestServerHost;
+ }());
+ TestFSWithWatch.TestServerHost = TestServerHost;
+ })(TestFSWithWatch = ts.TestFSWithWatch || (ts.TestFSWithWatch = {}));
+})(ts || (ts = {}));
+var FourSlash;
+(function (FourSlash) {
+ ts.disableIncrementalParsing = false;
+ var FourSlashTestType;
+ (function (FourSlashTestType) {
+ FourSlashTestType[FourSlashTestType["Native"] = 0] = "Native";
+ FourSlashTestType[FourSlashTestType["Shims"] = 1] = "Shims";
+ FourSlashTestType[FourSlashTestType["ShimsWithPreprocess"] = 2] = "ShimsWithPreprocess";
+ FourSlashTestType[FourSlashTestType["Server"] = 3] = "Server";
+ })(FourSlashTestType = FourSlash.FourSlashTestType || (FourSlash.FourSlashTestType = {}));
+ // Name of testcase metadata including ts.CompilerOptions properties that will be used by globalOptions
+ // To add additional option, add property into the testOptMetadataNames, refer the property in either globalMetadataNames or fileMetadataNames
+ // Add cases into convertGlobalOptionsToCompilationsSettings function for the compiler to acknowledge such option from meta data
+ var MetadataOptionNames;
+ (function (MetadataOptionNames) {
+ MetadataOptionNames["baselineFile"] = "BaselineFile";
+ MetadataOptionNames["emitThisFile"] = "emitThisFile";
+ MetadataOptionNames["fileName"] = "Filename";
+ MetadataOptionNames["resolveReference"] = "ResolveReference";
+ MetadataOptionNames["symlink"] = "Symlink";
+ })(MetadataOptionNames || (MetadataOptionNames = {}));
+ // List of allowed metadata names
+ var fileMetadataNames = ["Filename" /* fileName */, "emitThisFile" /* emitThisFile */, "ResolveReference" /* resolveReference */, "Symlink" /* symlink */];
+ function convertGlobalOptionsToCompilerOptions(globalOptions) {
+ var settings = { target: 1 /* ES5 */ };
+ Harness.Compiler.setCompilerOptionsFromHarnessSetting(globalOptions, settings);
+ return settings;
+ }
+ var TestCancellationToken = /** @class */ (function () {
+ function TestCancellationToken() {
+ this.numberOfCallsBeforeCancellation = TestCancellationToken.notCanceled;
+ }
+ TestCancellationToken.prototype.isCancellationRequested = function () {
+ if (this.numberOfCallsBeforeCancellation < 0) {
+ return false;
+ }
+ if (this.numberOfCallsBeforeCancellation > 0) {
+ this.numberOfCallsBeforeCancellation--;
+ return false;
+ }
+ return true;
+ };
+ TestCancellationToken.prototype.setCancelled = function (numberOfCalls) {
+ if (numberOfCalls === void 0) { numberOfCalls = 0; }
+ ts.Debug.assert(numberOfCalls >= 0);
+ this.numberOfCallsBeforeCancellation = numberOfCalls;
+ };
+ TestCancellationToken.prototype.resetCancelled = function () {
+ this.numberOfCallsBeforeCancellation = TestCancellationToken.notCanceled;
+ };
+ // 0 - cancelled
+ // >0 - not cancelled
+ // <0 - not cancelled and value denotes number of isCancellationRequested after which token become cancelled
+ TestCancellationToken.notCanceled = -1;
+ return TestCancellationToken;
+ }());
+ FourSlash.TestCancellationToken = TestCancellationToken;
+ function verifyOperationIsCancelled(f) {
+ try {
+ f();
+ }
+ catch (e) {
+ if (e instanceof ts.OperationCanceledException) {
+ return;
+ }
+ }
+ throw new Error("Operation should be cancelled");
+ }
+ FourSlash.verifyOperationIsCancelled = verifyOperationIsCancelled;
+ // This function creates IScriptSnapshot object for testing getPreProcessedFileInfo
+ // Return object may lack some functionalities for other purposes.
+ function createScriptSnapShot(sourceText) {
+ return ts.ScriptSnapshot.fromString(sourceText);
+ }
+ var TestState = /** @class */ (function () {
+ function TestState(basePath, testType, testData) {
+ var _a;
+ var _this = this;
+ this.basePath = basePath;
+ this.testType = testType;
+ this.testData = testData;
+ // The current caret position in the active file
+ this.currentCaretPosition = 0;
+ // The position of the end of the current selection, or -1 if nothing is selected
+ this.selectionEnd = -1;
+ this.lastKnownMarker = "";
+ // Whether or not we should format on keystrokes
+ this.enableFormatting = true;
+ this.inputFiles = ts.createMap(); // Map between inputFile's fileName and its content for easily looking up when resolving references
+ this.alignmentForExtraInfo = 50;
+ // Create a new Services Adapter
+ this.cancellationToken = new TestCancellationToken();
+ var compilationOptions = convertGlobalOptionsToCompilerOptions(this.testData.globalOptions);
+ compilationOptions.skipDefaultLibCheck = true;
+ // Initialize the language service with all the scripts
+ var startResolveFileRef;
+ var configFileName;
+ for (var _i = 0, _b = testData.files; _i < _b.length; _i++) {
+ var file = _b[_i];
+ // Create map between fileName and its content for easily looking up when resolveReference flag is specified
+ this.inputFiles.set(file.fileName, file.content);
+ if (isConfig(file)) {
+ var configJson = ts.parseConfigFileTextToJson(file.fileName, file.content);
+ if (configJson.config === undefined) {
+ throw new Error("Failed to parse test " + file.fileName + ": " + configJson.error.messageText);
+ }
+ // Extend our existing compiler options so that we can also support tsconfig only options
+ if (configJson.config.compilerOptions) {
+ var baseDirectory = ts.normalizePath(ts.getDirectoryPath(file.fileName));
+ var tsConfig = ts.convertCompilerOptionsFromJson(configJson.config.compilerOptions, baseDirectory, file.fileName);
+ if (!tsConfig.errors || !tsConfig.errors.length) {
+ compilationOptions = ts.extend(compilationOptions, tsConfig.options);
+ }
+ }
+ configFileName = file.fileName;
+ }
+ if (!startResolveFileRef && file.fileOptions["ResolveReference" /* resolveReference */] === "true") {
+ startResolveFileRef = file;
+ }
+ else if (startResolveFileRef) {
+ // If entry point for resolving file references is already specified, report duplication error
+ throw new Error("There exists a Fourslash file which has resolveReference flag specified; remove duplicated resolveReference flag");
+ }
+ }
+ if (configFileName) {
+ var baseDir = ts.normalizePath(ts.getDirectoryPath(configFileName));
+ var files_2 = (_a = {}, _a[baseDir] = {}, _a);
+ this.inputFiles.forEach(function (data, path) {
+ var scriptInfo = new Harness.LanguageService.ScriptInfo(path, undefined, /*isRootFile*/ false); // TODO: GH#18217
+ files_2[path] = new vfs.File(data, { meta: { scriptInfo: scriptInfo } });
+ });
+ var fs = new vfs.FileSystem(/*ignoreCase*/ true, { cwd: baseDir, files: files_2 });
+ var host = new fakes.ParseConfigHost(fs);
+ var jsonSourceFile = ts.parseJsonText(configFileName, this.inputFiles.get(configFileName));
+ compilationOptions = ts.parseJsonSourceFileConfigFileContent(jsonSourceFile, host, baseDir, compilationOptions, configFileName).options;
+ }
+ if (compilationOptions.typeRoots) {
+ compilationOptions.typeRoots = compilationOptions.typeRoots.map(function (p) { return ts.getNormalizedAbsolutePath(p, _this.basePath); });
+ }
+ var languageServiceAdapter = this.getLanguageServiceAdapter(testType, this.cancellationToken, compilationOptions);
+ this.languageServiceAdapterHost = languageServiceAdapter.getHost();
+ this.languageService = memoWrap(languageServiceAdapter.getLanguageService(), this); // Wrap the LS to cache some expensive operations certain tests call repeatedly
+ if (startResolveFileRef) {
+ // Add the entry-point file itself into the languageServiceShimHost
+ this.languageServiceAdapterHost.addScript(startResolveFileRef.fileName, startResolveFileRef.content, /*isRootFile*/ true);
+ var resolvedResult = languageServiceAdapter.getPreProcessedFileInfo(startResolveFileRef.fileName, startResolveFileRef.content);
+ var referencedFiles = resolvedResult.referencedFiles;
+ var importedFiles = resolvedResult.importedFiles;
+ // Add triple reference files into language-service host
+ ts.forEach(referencedFiles, function (referenceFile) {
+ // Fourslash insert tests/cases/fourslash into inputFile.unitName so we will properly append the same base directory to refFile path
+ var referenceFilePath = _this.basePath + "/" + referenceFile.fileName;
+ _this.addMatchedInputFile(referenceFilePath, /* extensions */ undefined);
+ });
+ // Add import files into language-service host
+ ts.forEach(importedFiles, function (importedFile) {
+ // Fourslash insert tests/cases/fourslash into inputFile.unitName and import statement doesn't require ".ts"
+ // so convert them before making appropriate comparison
+ var importedFilePath = _this.basePath + "/" + importedFile.fileName;
+ _this.addMatchedInputFile(importedFilePath, ts.getSupportedExtensions(compilationOptions));
+ });
+ // Check if no-default-lib flag is false and if so add default library
+ if (!resolvedResult.isLibFile) {
+ this.languageServiceAdapterHost.addScript(Harness.Compiler.defaultLibFileName, Harness.Compiler.getDefaultLibrarySourceFile().text, /*isRootFile*/ false);
+ }
+ }
+ else {
+ // resolveReference file-option is not specified then do not resolve any files and include all inputFiles
+ this.inputFiles.forEach(function (file, fileName) {
+ if (!Harness.isDefaultLibraryFile(fileName)) {
+ _this.languageServiceAdapterHost.addScript(fileName, file, /*isRootFile*/ true);
+ }
+ });
+ if (!compilationOptions.noLib) {
+ this.languageServiceAdapterHost.addScript(Harness.Compiler.defaultLibFileName, Harness.Compiler.getDefaultLibrarySourceFile().text, /*isRootFile*/ false);
+ }
+ }
+ var _loop_3 = function (file) {
+ ts.forEach(file.symlinks, function (link) {
+ _this.languageServiceAdapterHost.vfs.mkdirpSync(vpath.dirname(link));
+ _this.languageServiceAdapterHost.vfs.symlinkSync(file.fileName, link);
+ });
+ };
+ for (var _c = 0, _d = testData.files; _c < _d.length; _c++) {
+ var file = _d[_c];
+ _loop_3(file);
+ }
+ this.formatCodeSettings = {
+ baseIndentSize: 0,
+ indentSize: 4,
+ tabSize: 4,
+ newLineCharacter: "\n",
+ convertTabsToSpaces: true,
+ indentStyle: ts.IndentStyle.Smart,
+ insertSpaceAfterCommaDelimiter: true,
+ insertSpaceAfterSemicolonInForStatements: true,
+ insertSpaceBeforeAndAfterBinaryOperators: true,
+ insertSpaceAfterConstructor: false,
+ insertSpaceAfterKeywordsInControlFlowStatements: true,
+ insertSpaceAfterFunctionKeywordForAnonymousFunctions: false,
+ insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis: false,
+ insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets: false,
+ insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces: true,
+ insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces: false,
+ insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces: false,
+ insertSpaceAfterTypeAssertion: false,
+ placeOpenBraceOnNewLineForFunctions: false,
+ placeOpenBraceOnNewLineForControlBlocks: false,
+ insertSpaceBeforeTypeAnnotation: false
+ };
+ // Open the first file by default
+ this.openFile(0);
+ function memoWrap(ls, target) {
+ var cacheableMembers = [
+ "getCompletionEntryDetails",
+ "getCompletionEntrySymbol",
+ "getQuickInfoAtPosition",
+ "getReferencesAtPosition",
+ "getDocumentHighlights",
+ ];
+ var proxy = {};
+ var _loop_4 = function (k) {
+ var key = k;
+ if (cacheableMembers.indexOf(key) === -1) {
+ proxy[key] = function () {
+ var args = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ args[_i] = arguments[_i];
+ }
+ return ls[key].apply(ls, args);
+ };
+ return "continue";
+ }
+ var memo = Utils.memoize(function (_version, _active, _caret, _selectEnd, _marker) {
+ var args = [];
+ for (var _i = 5; _i < arguments.length; _i++) {
+ args[_i - 5] = arguments[_i];
+ }
+ return ls[key].apply(ls, args);
+ }, function () {
+ var args = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ args[_i] = arguments[_i];
+ }
+ return args.join("|,|");
+ });
+ proxy[key] = function () {
+ var args = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ args[_i] = arguments[_i];
+ }
+ return memo.apply(void 0, [target.languageServiceAdapterHost.getScriptInfo(target.activeFile.fileName).version,
+ target.activeFile.fileName,
+ target.currentCaretPosition,
+ target.selectionEnd,
+ target.lastKnownMarker].concat(args));
+ };
+ };
+ for (var k in ls) {
+ _loop_4(k);
+ }
+ return proxy;
+ }
+ }
+ TestState.getDisplayPartsJson = function (displayParts) {
+ var result = "";
+ ts.forEach(displayParts, function (part) {
+ if (result) {
+ result += ",\n ";
+ }
+ else {
+ result = "[\n ";
+ }
+ result += JSON.stringify(part);
+ });
+ if (result) {
+ result += "\n]";
+ }
+ return result;
+ };
+ // Add input file which has matched file name with the given reference-file path.
+ // This is necessary when resolveReference flag is specified
+ TestState.prototype.addMatchedInputFile = function (referenceFilePath, extensions) {
+ var inputFiles = this.inputFiles;
+ var languageServiceAdapterHost = this.languageServiceAdapterHost;
+ var didAdd = tryAdd(referenceFilePath);
+ if (extensions && !didAdd) {
+ ts.forEach(extensions, function (ext) { return tryAdd(referenceFilePath + ext); });
+ }
+ function tryAdd(path) {
+ var inputFile = inputFiles.get(path);
+ if (inputFile && !Harness.isDefaultLibraryFile(path)) {
+ languageServiceAdapterHost.addScript(path, inputFile, /*isRootFile*/ true);
+ return true;
+ }
+ }
+ };
+ TestState.prototype.getLanguageServiceAdapter = function (testType, cancellationToken, compilationOptions) {
+ switch (testType) {
+ case 0 /* Native */:
+ return new Harness.LanguageService.NativeLanguageServiceAdapter(cancellationToken, compilationOptions);
+ case 1 /* Shims */:
+ return new Harness.LanguageService.ShimLanguageServiceAdapter(/*preprocessToResolve*/ false, cancellationToken, compilationOptions);
+ case 2 /* ShimsWithPreprocess */:
+ return new Harness.LanguageService.ShimLanguageServiceAdapter(/*preprocessToResolve*/ true, cancellationToken, compilationOptions);
+ case 3 /* Server */:
+ return new Harness.LanguageService.ServerLanguageServiceAdapter(cancellationToken, compilationOptions);
+ default:
+ throw new Error("Unknown FourSlash test type: ");
+ }
+ };
+ TestState.prototype.getFileContent = function (fileName) {
+ var script = this.languageServiceAdapterHost.getScriptInfo(fileName);
+ return script.content;
+ };
+ // Entry points from fourslash.ts
+ TestState.prototype.goToMarker = function (name) {
+ if (name === void 0) { name = ""; }
+ var marker = ts.isString(name) ? this.getMarkerByName(name) : name;
+ if (this.activeFile.fileName !== marker.fileName) {
+ this.openFile(marker.fileName);
+ }
+ var content = this.getFileContent(marker.fileName);
+ if (marker.position === -1 || marker.position > content.length) {
+ throw new Error("Marker \"" + name + "\" has been invalidated by unrecoverable edits to the file.");
+ }
+ var mName = ts.isString(name) ? name : this.markerName(marker);
+ this.lastKnownMarker = mName;
+ this.goToPosition(marker.position);
+ };
+ TestState.prototype.goToEachMarker = function (markers, action) {
+ assert(markers.length);
+ for (var i = 0; i < markers.length; i++) {
+ this.goToMarker(markers[i]);
+ action(markers[i], i);
+ }
+ };
+ TestState.prototype.goToEachRange = function (action) {
+ var ranges = this.getRanges();
+ assert(ranges.length);
+ for (var _i = 0, ranges_1 = ranges; _i < ranges_1.length; _i++) {
+ var range = ranges_1[_i];
+ this.selectRange(range);
+ action();
+ }
+ };
+ TestState.prototype.markerName = function (m) {
+ return ts.forEachEntry(this.testData.markerPositions, function (marker, name) {
+ if (marker === m) {
+ return name;
+ }
+ });
+ };
+ TestState.prototype.goToPosition = function (pos) {
+ this.currentCaretPosition = pos;
+ this.selectionEnd = -1;
+ };
+ TestState.prototype.select = function (startMarker, endMarker) {
+ var start = this.getMarkerByName(startMarker), end = this.getMarkerByName(endMarker);
+ ts.Debug.assert(start.fileName === end.fileName);
+ if (this.activeFile.fileName !== start.fileName) {
+ this.openFile(start.fileName);
+ }
+ this.goToPosition(start.position);
+ this.selectionEnd = end.position;
+ };
+ TestState.prototype.selectRange = function (range) {
+ this.goToRangeStart(range);
+ this.selectionEnd = range.end;
+ };
+ TestState.prototype.moveCaretRight = function (count) {
+ if (count === void 0) { count = 1; }
+ this.currentCaretPosition += count;
+ this.currentCaretPosition = Math.min(this.currentCaretPosition, this.getFileContent(this.activeFile.fileName).length);
+ this.selectionEnd = -1;
+ };
+ // Opens a file given its 0-based index or fileName
+ TestState.prototype.openFile = function (indexOrName, content, scriptKindName) {
+ var fileToOpen = this.findFile(indexOrName);
+ fileToOpen.fileName = ts.normalizeSlashes(fileToOpen.fileName);
+ this.activeFile = fileToOpen;
+ // Let the host know that this file is now open
+ this.languageServiceAdapterHost.openFile(fileToOpen.fileName, content, scriptKindName);
+ };
+ TestState.prototype.verifyErrorExistsBetweenMarkers = function (startMarkerName, endMarkerName, shouldExist) {
+ var startMarker = this.getMarkerByName(startMarkerName);
+ var endMarker = this.getMarkerByName(endMarkerName);
+ var predicate = function (errorMinChar, errorLimChar, startPos, endPos) {
+ return ((errorMinChar === startPos) && (errorLimChar === endPos)) ? true : false;
+ };
+ var exists = this.anyErrorInRange(predicate, startMarker, endMarker);
+ if (exists !== shouldExist) {
+ this.printErrorLog(shouldExist, this.getAllDiagnostics());
+ throw new Error((shouldExist ? "Expected" : "Did not expect") + " failure between markers: '" + startMarkerName + "', '" + endMarkerName + "'");
+ }
+ };
+ TestState.prototype.raiseError = function (message) {
+ throw new Error(this.messageAtLastKnownMarker(message));
+ };
+ TestState.prototype.messageAtLastKnownMarker = function (message) {
+ var locationDescription = this.lastKnownMarker ? this.lastKnownMarker : this.getLineColStringAtPosition(this.currentCaretPosition);
+ return "At " + locationDescription + ": " + message;
+ };
+ TestState.prototype.assertionMessageAtLastKnownMarker = function (msg) {
+ return "\nMarker: " + this.lastKnownMarker + "\nChecking: " + msg + "\n\n";
+ };
+ TestState.prototype.getDiagnostics = function (fileName, includeSuggestions) {
+ if (includeSuggestions === void 0) { includeSuggestions = false; }
+ return this.languageService.getSyntacticDiagnostics(fileName).concat(this.languageService.getSemanticDiagnostics(fileName), (includeSuggestions ? this.languageService.getSuggestionDiagnostics(fileName) : ts.emptyArray));
+ };
+ TestState.prototype.getAllDiagnostics = function () {
+ var _this = this;
+ return ts.flatMap(this.languageServiceAdapterHost.getFilenames(), function (fileName) {
+ return ts.isAnySupportedFileExtension(fileName) ? _this.getDiagnostics(fileName) : [];
+ });
+ };
+ TestState.prototype.verifyErrorExistsAfterMarker = function (markerName, shouldExist, after) {
+ var marker = this.getMarkerByName(markerName);
+ var predicate;
+ if (after) {
+ predicate = function (errorMinChar, errorLimChar, startPos) {
+ return ((errorMinChar >= startPos) && (errorLimChar >= startPos)) ? true : false;
+ };
+ }
+ else {
+ predicate = function (errorMinChar, errorLimChar, startPos) {
+ return ((errorMinChar <= startPos) && (errorLimChar <= startPos)) ? true : false;
+ };
+ }
+ var exists = this.anyErrorInRange(predicate, marker);
+ var diagnostics = this.getAllDiagnostics();
+ if (exists !== shouldExist) {
+ this.printErrorLog(shouldExist, diagnostics);
+ throw new Error((shouldExist ? "Expected" : "Did not expect") + " failure at marker '" + markerName + "'");
+ }
+ };
+ TestState.prototype.anyErrorInRange = function (predicate, startMarker, endMarker) {
+ return this.getDiagnostics(startMarker.fileName).some(function (_a) {
+ var start = _a.start, length = _a.length;
+ return predicate(start, start + length, startMarker.position, endMarker === undefined ? undefined : endMarker.position);
+ }); // TODO: GH#18217
+ };
+ TestState.prototype.printErrorLog = function (expectErrors, errors) {
+ if (expectErrors) {
+ Harness.IO.log("Expected error not found. Error list is:");
+ }
+ else {
+ Harness.IO.log("Unexpected error(s) found. Error list is:");
+ }
+ for (var _i = 0, errors_1 = errors; _i < errors_1.length; _i++) {
+ var _a = errors_1[_i], start = _a.start, length = _a.length, messageText = _a.messageText, file = _a.file;
+ Harness.IO.log(" " + this.formatRange(file, start, length) + // TODO: GH#18217
+ ", message: " + ts.flattenDiagnosticMessageText(messageText, Harness.IO.newLine()) + "\n");
+ }
+ };
+ TestState.prototype.formatRange = function (file, start, length) {
+ if (file) {
+ return "from: " + this.formatLineAndCharacterOfPosition(file, start) + ", to: " + this.formatLineAndCharacterOfPosition(file, start + length);
+ }
+ return "global";
+ };
+ TestState.prototype.formatLineAndCharacterOfPosition = function (file, pos) {
+ if (file) {
+ var _a = ts.getLineAndCharacterOfPosition(file, pos), line = _a.line, character = _a.character;
+ return line + ":" + character;
+ }
+ return "global";
+ };
+ TestState.prototype.formatPosition = function (file, pos) {
+ if (file) {
+ return file.fileName + "@" + pos;
+ }
+ return "global";
+ };
+ TestState.prototype.verifyNoErrors = function () {
+ var _this = this;
+ ts.forEachKey(this.inputFiles, function (fileName) {
+ if (!ts.isAnySupportedFileExtension(fileName)
+ || !_this.getProgram().getCompilerOptions().allowJs && !ts.extensionIsTypeScript(ts.extensionFromPath(fileName)))
+ return;
+ var errors = _this.getDiagnostics(fileName).filter(function (e) { return e.category !== ts.DiagnosticCategory.Suggestion; });
+ if (errors.length) {
+ _this.printErrorLog(/*expectErrors*/ false, errors);
+ var error = errors[0];
+ _this.raiseError("Found an error: " + _this.formatPosition(error.file, error.start) + ": " + error.messageText);
+ }
+ });
+ };
+ TestState.prototype.verifyNumberOfErrorsInCurrentFile = function (expected) {
+ var errors = this.getDiagnostics(this.activeFile.fileName);
+ var actual = errors.length;
+ if (actual !== expected) {
+ this.printErrorLog(/*expectErrors*/ false, errors);
+ var errorMsg = "Actual number of errors (" + actual + ") does not match expected number (" + expected + ")";
+ Harness.IO.log(errorMsg);
+ this.raiseError(errorMsg);
+ }
+ };
+ TestState.prototype.verifyEval = function (expr, value) {
+ var emit = this.languageService.getEmitOutput(this.activeFile.fileName);
+ if (emit.outputFiles.length !== 1) {
+ throw new Error("Expected exactly one output from emit of " + this.activeFile.fileName);
+ }
+ var evaluation = new Function(emit.outputFiles[0].text + ";\r\nreturn (" + expr + ");")();
+ if (evaluation !== value) {
+ this.raiseError("Expected evaluation of expression \"" + expr + "\" to equal \"" + value + "\", but got \"" + evaluation + "\"");
+ }
+ };
+ TestState.prototype.verifyGoToDefinitionIs = function (endMarker) {
+ var _this = this;
+ this.verifyGoToXWorker(toArray(endMarker), function () { return _this.getGoToDefinition(); });
+ };
+ TestState.prototype.verifyGoToDefinition = function (arg0, endMarkerNames) {
+ var _this = this;
+ this.verifyGoToX(arg0, endMarkerNames, function () { return _this.getGoToDefinitionAndBoundSpan(); });
+ };
+ TestState.prototype.getGoToDefinition = function () {
+ return this.languageService.getDefinitionAtPosition(this.activeFile.fileName, this.currentCaretPosition);
+ };
+ TestState.prototype.getGoToDefinitionAndBoundSpan = function () {
+ return this.languageService.getDefinitionAndBoundSpan(this.activeFile.fileName, this.currentCaretPosition);
+ };
+ TestState.prototype.verifyGoToType = function (arg0, endMarkerNames) {
+ var _this = this;
+ this.verifyGoToX(arg0, endMarkerNames, function () {
+ return _this.languageService.getTypeDefinitionAtPosition(_this.activeFile.fileName, _this.currentCaretPosition);
+ });
+ };
+ TestState.prototype.verifyGoToX = function (arg0, endMarkerNames, getDefs) {
+ if (endMarkerNames) {
+ this.verifyGoToXPlain(arg0, endMarkerNames, getDefs);
+ }
+ else if (ts.isArray(arg0)) {
+ var pairs = arg0;
+ for (var _i = 0, pairs_1 = pairs; _i < pairs_1.length; _i++) {
+ var _a = pairs_1[_i], start = _a[0], end = _a[1];
+ this.verifyGoToXPlain(start, end, getDefs);
+ }
+ }
+ else {
+ var obj = arg0;
+ for (var startMarkerName in obj) {
+ if (ts.hasProperty(obj, startMarkerName)) {
+ this.verifyGoToXPlain(startMarkerName, obj[startMarkerName], getDefs);
+ }
+ }
+ }
+ };
+ TestState.prototype.verifyGoToXPlain = function (startMarkerNames, endMarkerNames, getDefs) {
+ for (var _i = 0, _a = toArray(startMarkerNames); _i < _a.length; _i++) {
+ var start = _a[_i];
+ this.verifyGoToXSingle(start, endMarkerNames, getDefs);
+ }
+ };
+ TestState.prototype.verifyGoToDefinitionForMarkers = function (markerNames) {
+ var _this = this;
+ for (var _i = 0, markerNames_1 = markerNames; _i < markerNames_1.length; _i++) {
+ var markerName = markerNames_1[_i];
+ this.verifyGoToXSingle(markerName + "Reference", markerName + "Definition", function () { return _this.getGoToDefinition(); });
+ }
+ };
+ TestState.prototype.verifyGoToXSingle = function (startMarkerName, endMarkerNames, getDefs) {
+ this.goToMarker(startMarkerName);
+ this.verifyGoToXWorker(toArray(endMarkerNames), getDefs, startMarkerName);
+ };
+ TestState.prototype.verifyGoToXWorker = function (endMarkers, getDefs, startMarkerName) {
+ var _this = this;
+ var defs = getDefs();
+ var definitions;
+ var testName;
+ if (!defs || ts.isArray(defs)) {
+ definitions = defs || [];
+ testName = "goToDefinitions";
+ }
+ else {
+ this.verifyDefinitionTextSpan(defs, startMarkerName);
+ definitions = defs.definitions; // TODO: GH#18217
+ testName = "goToDefinitionsAndBoundSpan";
+ }
+ if (endMarkers.length !== definitions.length) {
+ this.raiseError(testName + " failed - expected to find " + endMarkers.length + " definitions but got " + definitions.length);
+ }
+ ts.zipWith(endMarkers, definitions, function (endMarker, definition, i) {
+ var marker = _this.getMarkerByName(endMarker);
+ if (marker.fileName !== definition.fileName || marker.position !== definition.textSpan.start) {
+ _this.raiseError(testName + " failed for definition " + endMarker + " (" + i + "): expected " + marker.fileName + " at " + marker.position + ", got " + definition.fileName + " at " + definition.textSpan.start);
+ }
+ });
+ };
+ TestState.prototype.verifyDefinitionTextSpan = function (defs, startMarkerName) {
+ var _this = this;
+ var range = this.testData.ranges.find(function (range) { return _this.markerName(range.marker) === startMarkerName; });
+ if (!range && !defs.textSpan) {
+ return;
+ }
+ if (!range) {
+ this.raiseError("goToDefinitionsAndBoundSpan failed - found a TextSpan " + JSON.stringify(defs.textSpan) + " when it wasn't expected.");
+ }
+ else if (defs.textSpan.start !== range.pos || defs.textSpan.length !== range.end - range.pos) {
+ var expected = {
+ start: range.pos, length: range.end - range.pos
+ };
+ this.raiseError("goToDefinitionsAndBoundSpan failed - expected to find TextSpan " + JSON.stringify(expected) + " but got " + JSON.stringify(defs.textSpan));
+ }
+ };
+ TestState.prototype.verifyGetEmitOutputForCurrentFile = function (expected) {
+ var emit = this.languageService.getEmitOutput(this.activeFile.fileName);
+ if (emit.outputFiles.length !== 1) {
+ throw new Error("Expected exactly one output from emit of " + this.activeFile.fileName);
+ }
+ var actual = emit.outputFiles[0].text;
+ if (actual !== expected) {
+ this.raiseError("Expected emit output to be \"" + expected + "\", but got \"" + actual + "\"");
+ }
+ };
+ TestState.prototype.verifyGetEmitOutputContentsForCurrentFile = function (expected) {
+ var emit = this.languageService.getEmitOutput(this.activeFile.fileName);
+ assert.equal(emit.outputFiles.length, expected.length, "Number of emit output files");
+ ts.zipWith(emit.outputFiles, expected, function (outputFile, expected) {
+ assert.equal(outputFile.name, expected.name, "FileName");
+ assert.equal(outputFile.text, expected.text, "Content");
+ });
+ };
+ TestState.prototype.verifyCompletionListCount = function (expectedCount, negative) {
+ if (expectedCount === 0 && negative) {
+ this.verifyCompletionListIsEmpty(/*negative*/ false);
+ return;
+ }
+ var members = this.getCompletionListAtCaret();
+ if (members) {
+ var match = members.entries.length === expectedCount;
+ if ((!match && !negative) || (match && negative)) {
+ this.raiseError("Member list count was " + members.entries.length + ". Expected " + expectedCount);
+ }
+ }
+ else if (expectedCount) {
+ this.raiseError("Member list count was 0. Expected " + expectedCount);
+ }
+ };
+ TestState.prototype.verifyCompletionListItemsCountIsGreaterThan = function (count, negative) {
+ var completions = this.getCompletionListAtCaret();
+ var itemsCount = completions ? completions.entries.length : 0;
+ if (negative) {
+ if (itemsCount > count) {
+ this.raiseError("Expected completion list items count to not be greater than " + count + ", but is actually " + itemsCount);
+ }
+ }
+ else {
+ if (itemsCount <= count) {
+ this.raiseError("Expected completion list items count to be greater than " + count + ", but is actually " + itemsCount);
+ }
+ }
+ };
+ TestState.prototype.verifyCompletionListStartsWithItemsInOrder = function (items) {
+ if (items.length === 0) {
+ return;
+ }
+ var entries = this.getCompletionListAtCaret().entries;
+ assert.isTrue(items.length <= entries.length, "Amount of expected items in completion list [ " + items.length + " ] is greater than actual number of items in list [ " + entries.length + " ]");
+ ts.zipWith(entries, items, function (entry, item) {
+ assert.equal(entry.name, item, "Unexpected item in completion list");
+ });
+ };
+ TestState.prototype.noItemsWithSameNameButDifferentKind = function () {
+ var completions = this.getCompletionListAtCaret();
+ var uniqueItems = ts.createMap();
+ for (var _i = 0, _a = completions.entries; _i < _a.length; _i++) {
+ var item = _a[_i];
+ var uniqueItem = uniqueItems.get(item.name);
+ if (!uniqueItem) {
+ uniqueItems.set(item.name, item.kind);
+ }
+ else {
+ assert.equal(item.kind, uniqueItem, "Items should have the same kind, got " + item.kind + " and " + uniqueItem);
+ }
+ }
+ };
+ TestState.prototype.verifyCompletionListIsEmpty = function (negative) {
+ var completions = this.getCompletionListAtCaret();
+ if ((!completions || completions.entries.length === 0) && negative) {
+ this.raiseError("Completion list is empty at caret at position " + this.activeFile.fileName + " " + this.currentCaretPosition);
+ }
+ else if (completions && completions.entries.length !== 0 && !negative) {
+ this.raiseError("Completion list is not empty at caret at position " + this.activeFile.fileName + " " + this.currentCaretPosition + "\n" +
+ ("Completion List contains: " + stringify(completions.entries.map(function (e) { return e.name; }))));
+ }
+ };
+ TestState.prototype.verifyCompletionListAllowsNewIdentifier = function (negative) {
+ var completions = this.getCompletionListAtCaret();
+ if ((completions && !completions.isNewIdentifierLocation) && !negative) {
+ this.raiseError("Expected builder completion entry");
+ }
+ else if ((completions && completions.isNewIdentifierLocation) && negative) {
+ this.raiseError("Un-expected builder completion entry");
+ }
+ };
+ TestState.prototype.verifyCompletionListIsGlobal = function (expected) {
+ var completions = this.getCompletionListAtCaret();
+ if (completions && completions.isGlobalCompletion !== expected) {
+ this.raiseError("verifyCompletionListIsGlobal failed - expected result to be " + completions.isGlobalCompletion);
+ }
+ };
+ TestState.prototype.verifyCompletions = function (options) {
+ if (options.marker === undefined) {
+ this.verifyCompletionsWorker(options);
+ }
+ else {
+ for (var _i = 0, _a = toArray(options.marker); _i < _a.length; _i++) {
+ var marker = _a[_i];
+ this.goToMarker(marker);
+ this.verifyCompletionsWorker(options);
+ }
+ }
+ };
+ TestState.prototype.verifyCompletionsWorker = function (options) {
+ var actualCompletions = this.getCompletionListAtCaret(__assign({}, options.preferences, { triggerCharacter: options.triggerCharacter }));
+ if (!actualCompletions) {
+ if (options.exact === undefined)
+ return;
+ this.raiseError("No completions at position '" + this.currentCaretPosition + "'.");
+ }
+ if (actualCompletions.isNewIdentifierLocation !== (options.isNewIdentifierLocation || false)) {
+ this.raiseError("Expected 'isNewIdentifierLocation' to be " + (options.isNewIdentifierLocation || false) + ", got " + actualCompletions.isNewIdentifierLocation);
+ }
+ var actualByName = ts.createMap();
+ var _loop_5 = function (entry) {
+ if (actualByName.has(entry.name)) {
+ // TODO: GH#23587
+ if (entry.name !== "undefined" && entry.name !== "require")
+ this_1.raiseError("Duplicate (" + actualCompletions.entries.filter(function (a) { return a.name === entry.name; }).length + ") completions for " + entry.name);
+ }
+ else {
+ actualByName.set(entry.name, entry);
+ }
+ };
+ var this_1 = this;
+ for (var _i = 0, _a = actualCompletions.entries; _i < _a.length; _i++) {
+ var entry = _a[_i];
+ _loop_5(entry);
+ }
+ if ("exact" in options) {
+ ts.Debug.assert(!("includes" in options) && !("excludes" in options));
+ if (options.exact === undefined)
+ throw this.raiseError("Expected no completions");
+ this.verifyCompletionsAreExactly(actualCompletions.entries, toArray(options.exact));
+ }
+ else {
+ if (options.includes) {
+ for (var _b = 0, _c = toArray(options.includes); _b < _c.length; _b++) {
+ var include = _c[_b];
+ var name = typeof include === "string" ? include : include.name;
+ var found = actualByName.get(name);
+ if (!found)
+ throw this.raiseError("No completion " + name + " found");
+ this.verifyCompletionEntry(found, include);
+ }
+ }
+ if (options.excludes) {
+ for (var _d = 0, _e = toArray(options.excludes); _d < _e.length; _d++) {
+ var exclude = _e[_d];
+ if (typeof exclude === "string") {
+ if (actualByName.has(exclude)) {
+ this.raiseError("Did not expect to get a completion named " + exclude);
+ }
+ }
+ else {
+ var found = actualByName.get(exclude.name);
+ if (found && found.source === exclude.source) {
+ this.raiseError("Did not expect to get a completion named " + exclude.name + " with source " + exclude.source);
+ }
+ }
+ }
+ }
+ }
+ };
+ TestState.prototype.verifyCompletionEntry = function (actual, expected) {
+ var _a = typeof expected === "string"
+ ? { insertText: undefined, replacementSpan: undefined, hasAction: undefined, isRecommended: undefined, kind: undefined, text: undefined, documentation: undefined, sourceDisplay: undefined }
+ : expected, insertText = _a.insertText, replacementSpan = _a.replacementSpan, hasAction = _a.hasAction, isRecommended = _a.isRecommended, kind = _a.kind, text = _a.text, documentation = _a.documentation, sourceDisplay = _a.sourceDisplay;
+ if (actual.insertText !== insertText) {
+ this.raiseError("Expected completion insert text to be " + insertText + ", got " + actual.insertText);
+ }
+ var convertedReplacementSpan = replacementSpan && ts.createTextSpanFromRange(replacementSpan);
+ try {
+ assert.deepEqual(actual.replacementSpan, convertedReplacementSpan);
+ }
+ catch (_b) {
+ this.raiseError("Expected completion replacementSpan to be " + stringify(convertedReplacementSpan) + ", got " + stringify(actual.replacementSpan));
+ }
+ if (kind !== undefined)
+ assert.equal(actual.kind, kind);
+ assert.equal(actual.hasAction, hasAction);
+ assert.equal(actual.isRecommended, isRecommended);
+ if (text) {
+ var actualDetails = this.getCompletionEntryDetails(actual.name, actual.source);
+ assert.equal(ts.displayPartsToString(actualDetails.displayParts), text);
+ assert.equal(ts.displayPartsToString(actualDetails.documentation), documentation || "");
+ // TODO: GH#23587
+ // assert.equal(actualDetails.kind, actual.kind);
+ assert.equal(actualDetails.kindModifiers, actual.kindModifiers);
+ assert.equal(actualDetails.source && ts.displayPartsToString(actualDetails.source), sourceDisplay);
+ }
+ else {
+ assert(documentation === undefined && sourceDisplay === undefined, "If specifying completion details, should specify 'text'");
+ }
+ };
+ TestState.prototype.verifyCompletionsAreExactly = function (actual, expected) {
+ var _this = this;
+ if (actual.length !== expected.length) {
+ this.raiseError("Expected " + expected.length + " completions, got " + actual.length + " (" + actual.map(function (a) { return a.name; }) + ").");
+ }
+ ts.zipWith(actual, expected, function (completion, expectedCompletion, index) {
+ var name = typeof expectedCompletion === "string" ? expectedCompletion : expectedCompletion.name;
+ if (completion.name !== name) {
+ _this.raiseError("Expected completion at index " + index + " to be " + name + ", got " + completion.name);
+ }
+ _this.verifyCompletionEntry(completion, expectedCompletion);
+ });
+ };
+ TestState.prototype.verifyCompletionsAt = function (markerName, expected, options) {
+ this.verifyCompletions({
+ marker: markerName,
+ exact: expected,
+ isNewIdentifierLocation: options && options.isNewIdentifierLocation,
+ preferences: options,
+ triggerCharacter: options && options.triggerCharacter,
+ });
+ };
+ TestState.prototype.verifyCompletionListContains = function (entryId, text, documentation, kind, spanIndex, hasAction, options) {
+ var completions = this.getCompletionListAtCaret(options);
+ if (completions) {
+ this.assertItemInCompletionList(completions.entries, entryId, text, documentation, kind, spanIndex, hasAction, options);
+ }
+ else {
+ this.raiseError("No completions at position '" + this.currentCaretPosition + "' when looking for '" + JSON.stringify(entryId) + "'.");
+ }
+ };
+ /**
+ * Verify that the completion list does NOT contain the given symbol.
+ * The symbol is considered matched with the symbol in the list if and only if all given parameters must matched.
+ * When any parameter is omitted, the parameter is ignored during comparison and assumed that the parameter with
+ * that property of the symbol in the list.
+ * @param symbol the name of symbol
+ * @param expectedText the text associated with the symbol
+ * @param expectedDocumentation the documentation text associated with the symbol
+ * @param expectedKind the kind of symbol (see ScriptElementKind)
+ * @param spanIndex the index of the range that the completion item's replacement text span should match
+ */
+ TestState.prototype.verifyCompletionListDoesNotContain = function (entryId, expectedText, expectedDocumentation, expectedKind, spanIndex, options) {
+ var _this = this;
+ var replacementSpan;
+ if (spanIndex !== undefined) {
+ replacementSpan = this.getTextSpanForRangeAtIndex(spanIndex);
+ }
+ var completions = this.getCompletionListAtCaret(options);
+ if (completions) {
+ var filterCompletions = completions.entries.filter(function (e) { return e.name === entryId.name && e.source === entryId.source; });
+ filterCompletions = expectedKind ? filterCompletions.filter(function (e) { return e.kind === expectedKind || (typeof expectedKind === "object" && e.kind === expectedKind.kind); }) : filterCompletions;
+ filterCompletions = filterCompletions.filter(function (entry) {
+ var details = _this.getCompletionEntryDetails(entry.name);
+ var documentation = details && ts.displayPartsToString(details.documentation);
+ var text = details && ts.displayPartsToString(details.displayParts);
+ // If any of the expected values are undefined, assume that users don't
+ // care about them.
+ if (replacementSpan && !TestState.textSpansEqual(replacementSpan, entry.replacementSpan)) {
+ return false;
+ }
+ else if (expectedText && text !== expectedText) {
+ return false;
+ }
+ else if (expectedDocumentation && documentation !== expectedDocumentation) {
+ return false;
+ }
+ return true;
+ });
+ if (filterCompletions.length !== 0) {
+ // After filtered using all present criterion, if there are still symbol left in the list
+ // then these symbols must meet the criterion for Not supposed to be in the list. So we
+ // raise an error
+ var error = "Completion list did contain '" + JSON.stringify(entryId) + "'.";
+ var details = this.getCompletionEntryDetails(filterCompletions[0].name);
+ if (expectedText) {
+ error += "Expected text: " + expectedText + " to equal: " + ts.displayPartsToString(details.displayParts) + ".";
+ }
+ if (expectedDocumentation) {
+ error += "Expected documentation: " + expectedDocumentation + " to equal: " + ts.displayPartsToString(details.documentation) + ".";
+ }
+ if (expectedKind) {
+ error += "Expected kind: " + expectedKind + " to equal: " + filterCompletions[0].kind + ".";
+ }
+ else {
+ error += "kind: " + filterCompletions[0].kind + ".";
+ }
+ if (replacementSpan) {
+ var spanText = filterCompletions[0].replacementSpan ? stringify(filterCompletions[0].replacementSpan) : undefined;
+ error += "Expected replacement span: " + stringify(replacementSpan) + " to equal: " + spanText + ".";
+ }
+ this.raiseError(error);
+ }
+ }
+ };
+ TestState.prototype.verifyCompletionEntryDetails = function (entryName, expectedText, expectedDocumentation, kind, tags) {
+ var _this = this;
+ var details = this.getCompletionEntryDetails(entryName);
+ assert(details, "no completion entry available");
+ assert.equal(ts.displayPartsToString(details.displayParts), expectedText, this.assertionMessageAtLastKnownMarker("completion entry details text"));
+ if (expectedDocumentation !== undefined) {
+ assert.equal(ts.displayPartsToString(details.documentation), expectedDocumentation, this.assertionMessageAtLastKnownMarker("completion entry documentation"));
+ }
+ if (kind !== undefined) {
+ assert.equal(details.kind, kind, this.assertionMessageAtLastKnownMarker("completion entry kind"));
+ }
+ if (tags !== undefined) {
+ assert.equal(details.tags.length, tags.length, this.messageAtLastKnownMarker("QuickInfo tags"));
+ ts.zipWith(tags, details.tags, function (expectedTag, actualTag) {
+ assert.equal(actualTag.name, expectedTag.name);
+ assert.equal(actualTag.text, expectedTag.text, _this.messageAtLastKnownMarker("QuickInfo tag " + actualTag.name));
+ });
+ }
+ };
+ TestState.prototype.getProgram = function () {
+ return this._program || (this._program = this.languageService.getProgram()); // TODO: GH#18217
+ };
+ TestState.prototype.getChecker = function () {
+ return this._checker || (this._checker = this.getProgram().getTypeChecker());
+ };
+ TestState.prototype.getSourceFile = function () {
+ var fileName = this.activeFile.fileName;
+ var result = this.getProgram().getSourceFile(fileName);
+ if (!result) {
+ throw new Error("Could not get source file " + fileName);
+ }
+ return result;
+ };
+ TestState.prototype.getNode = function () {
+ return ts.getTouchingPropertyName(this.getSourceFile(), this.currentCaretPosition);
+ };
+ TestState.prototype.goToAndGetNode = function (range) {
+ this.goToRangeStart(range);
+ var node = this.getNode();
+ this.verifyRange("touching property name", range, node);
+ return node;
+ };
+ TestState.prototype.verifyRange = function (desc, expected, actual) {
+ var actualStart = actual.getStart();
+ var actualEnd = actual.getEnd();
+ if (actualStart !== expected.pos || actualEnd !== expected.end) {
+ this.raiseError(desc + " should be " + expected.pos + "-" + expected.end + ", got " + actualStart + "-" + actualEnd);
+ }
+ };
+ TestState.prototype.verifySymbol = function (symbol, declarationRanges) {
+ var _this = this;
+ var declarations = symbol.declarations;
+ if (declarations.length !== declarationRanges.length) {
+ this.raiseError("Expected to get " + declarationRanges.length + " declarations, got " + declarations.length);
+ }
+ ts.zipWith(declarations, declarationRanges, function (decl, range) {
+ _this.verifyRange("symbol declaration", range, decl);
+ });
+ };
+ TestState.prototype.verifySymbolAtLocation = function (startRange, declarationRanges) {
+ var node = this.goToAndGetNode(startRange);
+ var symbol = this.getChecker().getSymbolAtLocation(node);
+ if (!symbol) {
+ this.raiseError("Could not get symbol at location");
+ }
+ this.verifySymbol(symbol, declarationRanges);
+ };
+ TestState.prototype.symbolsInScope = function (range) {
+ var node = this.goToAndGetNode(range);
+ return this.getChecker().getSymbolsInScope(node, 67216319 /* Value */ | 67901928 /* Type */ | 1920 /* Namespace */);
+ };
+ TestState.prototype.setTypesRegistry = function (map) {
+ this.languageServiceAdapterHost.typesRegistry = ts.createMapFromTemplate(map);
+ };
+ TestState.prototype.verifyTypeOfSymbolAtLocation = function (range, symbol, expected) {
+ var node = this.goToAndGetNode(range);
+ var checker = this.getChecker();
+ var type = checker.getTypeOfSymbolAtLocation(symbol, node);
+ var actual = checker.typeToString(type);
+ if (actual !== expected) {
+ this.raiseError("Expected: '" + expected + "', actual: '" + actual + "'");
+ }
+ };
+ TestState.prototype.verifyDocumentHighlightsRespectFilesList = function (files) {
+ var startFile = this.activeFile.fileName;
+ var _loop_6 = function (fileName) {
+ var searchFileNames = startFile === fileName ? [startFile] : [startFile, fileName];
+ var highlights = this_2.getDocumentHighlightsAtCurrentPosition(searchFileNames);
+ if (!highlights.every(function (dh) { return ts.contains(searchFileNames, dh.fileName); })) {
+ this_2.raiseError("When asking for document highlights only in files " + searchFileNames + ", got document highlights in " + unique(highlights, function (dh) { return dh.fileName; }));
+ }
+ };
+ var this_2 = this;
+ for (var _i = 0, files_3 = files; _i < files_3.length; _i++) {
+ var fileName = files_3[_i];
+ _loop_6(fileName);
+ }
+ };
+ TestState.prototype.verifyReferenceGroups = function (starts, parts) {
+ var fullExpected = ts.map(parts, function (_a) {
+ var definition = _a.definition, ranges = _a.ranges;
+ return ({
+ definition: typeof definition === "string" ? definition : __assign({}, definition, { range: ts.createTextSpanFromRange(definition.range) }),
+ references: ranges.map(function (r) {
+ var _a = (r.marker && r.marker.data || {}), _b = _a.isWriteAccess, isWriteAccess = _b === void 0 ? false : _b, _c = _a.isDefinition, isDefinition = _c === void 0 ? false : _c, isInString = _a.isInString;
+ return __assign({ fileName: r.fileName, textSpan: ts.createTextSpanFromRange(r), isWriteAccess: isWriteAccess,
+ isDefinition: isDefinition }, (isInString ? { isInString: true } : undefined));
+ }),
+ });
+ });
+ for (var _i = 0, _a = toArray(starts); _i < _a.length; _i++) {
+ var start = _a[_i];
+ if (typeof start === "string") {
+ this.goToMarker(start);
+ }
+ else {
+ this.goToRangeStart(start);
+ }
+ var fullActual = ts.map(this.findReferencesAtCaret(), function (_a, i) {
+ var definition = _a.definition, references = _a.references;
+ var text = definition.displayParts.map(function (d) { return d.text; }).join("");
+ return {
+ definition: fullExpected.length > i && typeof fullExpected[i].definition === "string" ? text : { text: text, range: definition.textSpan },
+ references: references,
+ };
+ });
+ this.assertObjectsEqual(fullActual, fullExpected);
+ if (parts) {
+ this.verifyDocumentHighlightsRespectFilesList(unique(ts.flatMap(parts, function (p) { return p.ranges; }), function (r) { return r.fileName; }));
+ }
+ }
+ };
+ TestState.prototype.verifyNoReferences = function (markerNameOrRange) {
+ if (markerNameOrRange) {
+ if (ts.isString(markerNameOrRange)) {
+ this.goToMarker(markerNameOrRange);
+ }
+ else {
+ this.goToRangeStart(markerNameOrRange);
+ }
+ }
+ var refs = this.getReferencesAtCaret();
+ if (refs && refs.length) {
+ this.raiseError("Expected getReferences to fail, but saw references: " + stringify(refs));
+ }
+ };
+ // Necessary to have this function since `findReferences` isn't implemented in `client.ts`
+ TestState.prototype.verifyGetReferencesForServerTest = function (expected) {
+ var refs = this.getReferencesAtCaret();
+ assert.deepEqual(refs, expected);
+ };
+ TestState.prototype.verifySingleReferenceGroup = function (definition, ranges) {
+ ranges = ranges || this.getRanges();
+ this.verifyReferenceGroups(ranges, [{ definition: definition, ranges: ranges }]);
+ };
+ TestState.prototype.assertObjectsEqual = function (fullActual, fullExpected, msgPrefix) {
+ var _this = this;
+ if (msgPrefix === void 0) { msgPrefix = ""; }
+ var recur = function (actual, expected, path) {
+ var fail = function (msg) {
+ _this.raiseError(msgPrefix + " At " + path + ": " + msg + "\nExpected: " + stringify(fullExpected) + "\nActual: " + stringify(fullActual));
+ };
+ if ((actual === undefined) !== (expected === undefined)) {
+ fail("Expected " + expected + ", got " + actual);
+ }
+ for (var key in actual) {
+ if (ts.hasProperty(actual, key)) {
+ var ak = actual[key], ek = expected[key];
+ if (typeof ak === "object" && typeof ek === "object") {
+ recur(ak, ek, path ? path + "." + key : key);
+ }
+ else if (ak !== ek) {
+ fail("Expected '" + key + "' to be '" + ek + "', got '" + ak + "'");
+ }
+ }
+ }
+ for (var key in expected) {
+ if (ts.hasProperty(expected, key)) {
+ if (!ts.hasProperty(actual, key)) {
+ fail(msgPrefix + "Missing property '" + key + "'");
+ }
+ }
+ }
+ };
+ if (fullActual === undefined || fullExpected === undefined) {
+ if (fullActual === fullExpected) {
+ return;
+ }
+ this.raiseError(msgPrefix + "\nExpected: " + stringify(fullExpected) + "\nActual: " + stringify(fullActual));
+ }
+ recur(fullActual, fullExpected, "");
+ };
+ TestState.prototype.verifyDisplayPartsOfReferencedSymbol = function (expected) {
+ var referencedSymbols = this.findReferencesAtCaret();
+ if (referencedSymbols.length === 0) {
+ this.raiseError("No referenced symbols found at current caret position");
+ }
+ else if (referencedSymbols.length > 1) {
+ this.raiseError("More than one referenced symbol found");
+ }
+ assert.equal(TestState.getDisplayPartsJson(referencedSymbols[0].definition.displayParts), TestState.getDisplayPartsJson(expected), this.messageAtLastKnownMarker("referenced symbol definition display parts"));
+ };
+ TestState.prototype.getCompletionListAtCaret = function (options) {
+ return this.languageService.getCompletionsAtPosition(this.activeFile.fileName, this.currentCaretPosition, options);
+ };
+ TestState.prototype.getCompletionEntryDetails = function (entryName, source, preferences) {
+ return this.languageService.getCompletionEntryDetails(this.activeFile.fileName, this.currentCaretPosition, entryName, this.formatCodeSettings, source, preferences);
+ };
+ TestState.prototype.getReferencesAtCaret = function () {
+ return this.languageService.getReferencesAtPosition(this.activeFile.fileName, this.currentCaretPosition);
+ };
+ TestState.prototype.findReferencesAtCaret = function () {
+ return this.languageService.findReferences(this.activeFile.fileName, this.currentCaretPosition);
+ };
+ TestState.prototype.getSyntacticDiagnostics = function (expected) {
+ var diagnostics = this.languageService.getSyntacticDiagnostics(this.activeFile.fileName);
+ this.testDiagnostics(expected, diagnostics, "error");
+ };
+ TestState.prototype.getSemanticDiagnostics = function (expected) {
+ var diagnostics = this.languageService.getSemanticDiagnostics(this.activeFile.fileName);
+ this.testDiagnostics(expected, diagnostics, "error");
+ };
+ TestState.prototype.getSuggestionDiagnostics = function (expected) {
+ this.testDiagnostics(expected, this.languageService.getSuggestionDiagnostics(this.activeFile.fileName), "suggestion");
+ };
+ TestState.prototype.testDiagnostics = function (expected, diagnostics, category) {
+ var _this = this;
+ assert.deepEqual(ts.realizeDiagnostics(diagnostics, "\n"), expected.map(function (e) { return (__assign({ message: e.message, category: category, code: e.code }, ts.createTextSpanFromRange(e.range || _this.getRanges()[0]), { reportsUnnecessary: e.reportsUnnecessary })); }));
+ };
+ TestState.prototype.verifyQuickInfoAt = function (markerName, expectedText, expectedDocumentation) {
+ this.goToMarker(markerName);
+ this.verifyQuickInfoString(expectedText, expectedDocumentation);
+ };
+ TestState.prototype.verifyQuickInfos = function (namesAndTexts) {
+ for (var name in namesAndTexts) {
+ if (ts.hasProperty(namesAndTexts, name)) {
+ var text = namesAndTexts[name];
+ if (ts.isArray(text)) {
+ assert(text.length === 2);
+ var expectedText = text[0], expectedDocumentation = text[1];
+ this.verifyQuickInfoAt(name, expectedText, expectedDocumentation);
+ }
+ else {
+ this.verifyQuickInfoAt(name, text);
+ }
+ }
+ }
+ };
+ TestState.prototype.verifyQuickInfoString = function (expectedText, expectedDocumentation) {
+ if (expectedDocumentation === "") {
+ throw new Error("Use 'undefined' instead");
+ }
+ var actualQuickInfo = this.languageService.getQuickInfoAtPosition(this.activeFile.fileName, this.currentCaretPosition);
+ var actualQuickInfoText = actualQuickInfo ? ts.displayPartsToString(actualQuickInfo.displayParts) : "";
+ var actualQuickInfoDocumentation = actualQuickInfo ? ts.displayPartsToString(actualQuickInfo.documentation) : "";
+ assert.equal(actualQuickInfoText, expectedText, this.messageAtLastKnownMarker("quick info text"));
+ assert.equal(actualQuickInfoDocumentation, expectedDocumentation || "", this.assertionMessageAtLastKnownMarker("quick info doc"));
+ };
+ TestState.prototype.verifyQuickInfoDisplayParts = function (kind, kindModifiers, textSpan, displayParts, documentation, tags) {
+ var _this = this;
+ var actualQuickInfo = this.languageService.getQuickInfoAtPosition(this.activeFile.fileName, this.currentCaretPosition);
+ assert.equal(actualQuickInfo.kind, kind, this.messageAtLastKnownMarker("QuickInfo kind"));
+ assert.equal(actualQuickInfo.kindModifiers, kindModifiers, this.messageAtLastKnownMarker("QuickInfo kindModifiers"));
+ assert.equal(JSON.stringify(actualQuickInfo.textSpan), JSON.stringify(textSpan), this.messageAtLastKnownMarker("QuickInfo textSpan"));
+ assert.equal(TestState.getDisplayPartsJson(actualQuickInfo.displayParts), TestState.getDisplayPartsJson(displayParts), this.messageAtLastKnownMarker("QuickInfo displayParts"));
+ assert.equal(TestState.getDisplayPartsJson(actualQuickInfo.documentation), TestState.getDisplayPartsJson(documentation), this.messageAtLastKnownMarker("QuickInfo documentation"));
+ assert.equal(actualQuickInfo.tags.length, tags.length, this.messageAtLastKnownMarker("QuickInfo tags"));
+ ts.zipWith(tags, actualQuickInfo.tags, function (expectedTag, actualTag) {
+ assert.equal(expectedTag.name, actualTag.name);
+ assert.equal(expectedTag.text, actualTag.text, _this.messageAtLastKnownMarker("QuickInfo tag " + actualTag.name));
+ });
+ };
+ TestState.prototype.verifyRangesAreRenameLocations = function (options) {
+ if (ts.isArray(options)) {
+ this.verifyRenameLocations(options, options);
+ }
+ else {
+ var ranges = options && options.ranges || this.getRanges();
+ this.verifyRenameLocations(ranges, __assign({ ranges: ranges }, options));
+ }
+ };
+ TestState.prototype.verifyRenameLocations = function (startRanges, options) {
+ var _this = this;
+ var findInStrings, findInComments, ranges;
+ if (ts.isArray(options)) {
+ findInStrings = findInComments = false;
+ ranges = options;
+ }
+ else {
+ findInStrings = !!options.findInStrings;
+ findInComments = !!options.findInComments;
+ ranges = options.ranges;
+ }
+ var _loop_7 = function (startRange) {
+ this_3.goToRangeStart(startRange);
+ var renameInfo = this_3.languageService.getRenameInfo(this_3.activeFile.fileName, this_3.currentCaretPosition);
+ if (!renameInfo.canRename) {
+ this_3.raiseError("Expected rename to succeed, but it actually failed.");
+ return "break";
+ }
+ var references = this_3.languageService.findRenameLocations(this_3.activeFile.fileName, this_3.currentCaretPosition, findInStrings, findInComments);
+ ranges = ranges || this_3.getRanges();
+ if (!references) {
+ if (ranges.length !== 0) {
+ this_3.raiseError("Expected " + ranges.length + " rename locations; got none.");
+ }
+ return { value: void 0 };
+ }
+ if (ranges.length !== references.length) {
+ this_3.raiseError("Rename location count does not match result.\n\nExpected: " + stringify(ranges) + "\n\nActual:" + stringify(references));
+ }
+ ranges = ranges.sort(function (r1, r2) { return r1.pos - r2.pos; });
+ references = references.sort(function (r1, r2) { return r1.textSpan.start - r2.textSpan.start; });
+ ts.zipWith(references, ranges, function (reference, range) {
+ if (reference.textSpan.start !== range.pos || ts.textSpanEnd(reference.textSpan) !== range.end) {
+ _this.raiseError("Rename location results do not match.\n\nExpected: " + stringify(ranges) + "\n\nActual:" + stringify(references));
+ }
+ });
+ };
+ var this_3 = this;
+ for (var _i = 0, _a = toArray(startRanges); _i < _a.length; _i++) {
+ var startRange = _a[_i];
+ var state_1 = _loop_7(startRange);
+ if (typeof state_1 === "object")
+ return state_1.value;
+ if (state_1 === "break")
+ break;
+ }
+ };
+ TestState.prototype.verifyQuickInfoExists = function (negative) {
+ var actualQuickInfo = this.languageService.getQuickInfoAtPosition(this.activeFile.fileName, this.currentCaretPosition);
+ if (negative) {
+ if (actualQuickInfo) {
+ this.raiseError("verifyQuickInfoExists failed. Expected quick info NOT to exist");
+ }
+ }
+ else {
+ if (!actualQuickInfo) {
+ this.raiseError("verifyQuickInfoExists failed. Expected quick info to exist");
+ }
+ }
+ };
+ TestState.prototype.verifyNoSignatureHelp = function (markers) {
+ if (markers.length) {
+ for (var _i = 0, markers_1 = markers; _i < markers_1.length; _i++) {
+ var marker = markers_1[_i];
+ this.goToMarker(marker);
+ this.verifyNoSignatureHelp(ts.emptyArray);
+ }
+ return;
+ }
+ var actual = this.getSignatureHelp();
+ if (actual) {
+ this.raiseError("Expected no signature help, but got \"" + stringify(actual) + "\"");
+ }
+ };
+ TestState.prototype.verifySignatureHelp = function (optionses) {
+ for (var _i = 0, optionses_1 = optionses; _i < optionses_1.length; _i++) {
+ var options = optionses_1[_i];
+ if (options.marker === undefined) {
+ this.verifySignatureHelpWorker(options);
+ }
+ else {
+ for (var _a = 0, _b = toArray(options.marker); _a < _b.length; _a++) {
+ var marker = _b[_a];
+ this.goToMarker(marker);
+ this.verifySignatureHelpWorker(options);
+ }
+ }
+ }
+ };
+ TestState.prototype.verifySignatureHelpWorker = function (options) {
+ var _this = this;
+ var help = this.getSignatureHelp();
+ var selectedItem = help.items[help.selectedItemIndex];
+ // Argument index may exceed number of parameters
+ var currentParameter = selectedItem.parameters[help.argumentIndex];
+ assert.equal(help.items.length, options.overloadsCount || 1, this.assertionMessageAtLastKnownMarker("signature help overloads count"));
+ assert.equal(ts.displayPartsToString(selectedItem.documentation), options.docComment || "", this.assertionMessageAtLastKnownMarker("current signature help doc comment"));
+ if (options.text !== undefined) {
+ assert.equal(ts.displayPartsToString(selectedItem.prefixDisplayParts) +
+ selectedItem.parameters.map(function (p) { return ts.displayPartsToString(p.displayParts); }).join(ts.displayPartsToString(selectedItem.separatorDisplayParts)) +
+ ts.displayPartsToString(selectedItem.suffixDisplayParts), options.text);
+ }
+ if (options.parameterName !== undefined) {
+ assert.equal(currentParameter.name, options.parameterName);
+ }
+ if (options.parameterSpan !== undefined) {
+ assert.equal(ts.displayPartsToString(currentParameter.displayParts), options.parameterSpan);
+ }
+ if (currentParameter) {
+ assert.equal(ts.displayPartsToString(currentParameter.documentation), options.parameterDocComment || "", this.assertionMessageAtLastKnownMarker("current parameter Help DocComment"));
+ }
+ if (options.parameterCount !== undefined) {
+ assert.equal(selectedItem.parameters.length, options.parameterCount);
+ }
+ if (options.argumentCount !== undefined) {
+ assert.equal(help.argumentCount, options.argumentCount);
+ }
+ assert.equal(selectedItem.isVariadic, !!options.isVariadic);
+ var actualTags = selectedItem.tags;
+ assert.equal(actualTags.length, (options.tags || ts.emptyArray).length, this.assertionMessageAtLastKnownMarker("signature help tags"));
+ ts.zipWith((options.tags || ts.emptyArray), actualTags, function (expectedTag, actualTag) {
+ assert.equal(expectedTag.name, actualTag.name);
+ assert.equal(expectedTag.text, actualTag.text, _this.assertionMessageAtLastKnownMarker("signature help tag " + actualTag.name));
+ });
+ var allKeys = [
+ "marker",
+ "overloadsCount",
+ "docComment",
+ "text",
+ "parameterName",
+ "parameterSpan",
+ "parameterDocComment",
+ "parameterCount",
+ "isVariadic",
+ "tags",
+ "argumentCount",
+ ];
+ for (var key in options) {
+ ts.Debug.assert(ts.contains(allKeys, key));
+ }
+ };
+ TestState.prototype.validate = function (name, expected, actual) {
+ if (expected && expected !== actual) {
+ this.raiseError("Expected " + name + " '" + expected + "'. Got '" + actual + "' instead.");
+ }
+ };
+ TestState.prototype.verifyRenameInfoSucceeded = function (displayName, fullDisplayName, kind, kindModifiers) {
+ var renameInfo = this.languageService.getRenameInfo(this.activeFile.fileName, this.currentCaretPosition);
+ if (!renameInfo.canRename) {
+ this.raiseError("Rename did not succeed");
+ }
+ this.validate("displayName", displayName, renameInfo.displayName);
+ this.validate("fullDisplayName", fullDisplayName, renameInfo.fullDisplayName);
+ this.validate("kind", kind, renameInfo.kind);
+ this.validate("kindModifiers", kindModifiers, renameInfo.kindModifiers);
+ if (this.getRanges().length !== 1) {
+ this.raiseError("Expected a single range to be selected in the test file.");
+ }
+ var expectedRange = this.getRanges()[0];
+ if (renameInfo.triggerSpan.start !== expectedRange.pos ||
+ ts.textSpanEnd(renameInfo.triggerSpan) !== expectedRange.end) {
+ this.raiseError("Expected triggerSpan [" + expectedRange.pos + "," + expectedRange.end + "). Got [" +
+ renameInfo.triggerSpan.start + "," + ts.textSpanEnd(renameInfo.triggerSpan) + ") instead.");
+ }
+ };
+ TestState.prototype.verifyRenameInfoFailed = function (message) {
+ var renameInfo = this.languageService.getRenameInfo(this.activeFile.fileName, this.currentCaretPosition);
+ if (renameInfo.canRename) {
+ this.raiseError("Rename was expected to fail");
+ }
+ this.validate("error", message, renameInfo.localizedErrorMessage);
+ };
+ TestState.prototype.spanInfoToString = function (spanInfo, prefixString) {
+ var resultString = "SpanInfo: " + JSON.stringify(spanInfo);
+ if (spanInfo) {
+ var spanString = this.activeFile.content.substr(spanInfo.start, spanInfo.length);
+ var spanLineMap = ts.computeLineStarts(spanString);
+ for (var i = 0; i < spanLineMap.length; i++) {
+ if (!i) {
+ resultString += "\n";
+ }
+ resultString += prefixString + spanString.substring(spanLineMap[i], spanLineMap[i + 1]);
+ }
+ resultString += "\n" + prefixString + ":=> (" + this.getLineColStringAtPosition(spanInfo.start) + ") to (" + this.getLineColStringAtPosition(ts.textSpanEnd(spanInfo)) + ")";
+ }
+ return resultString;
+ };
+ TestState.prototype.baselineCurrentFileLocations = function (getSpanAtPos) {
+ var _this = this;
+ var fileLineMap = ts.computeLineStarts(this.activeFile.content);
+ var nextLine = 0;
+ var resultString = "";
+ var currentLine;
+ var previousSpanInfo;
+ var startColumn;
+ var length;
+ var prefixString = " >";
+ var pos = 0;
+ var addSpanInfoString = function () {
+ if (previousSpanInfo) {
+ resultString += currentLine;
+ var thisLineMarker = ts.repeatString(" ", startColumn) + ts.repeatString("~", length);
+ thisLineMarker += ts.repeatString(" ", _this.alignmentForExtraInfo - thisLineMarker.length - prefixString.length + 1);
+ resultString += thisLineMarker;
+ resultString += "=> Pos: (" + (pos - length) + " to " + (pos - 1) + ") ";
+ resultString += " " + previousSpanInfo;
+ previousSpanInfo = undefined;
+ }
+ };
+ for (; pos < this.activeFile.content.length; pos++) {
+ if (pos === 0 || pos === fileLineMap[nextLine]) {
+ nextLine++;
+ addSpanInfoString();
+ if (resultString.length) {
+ resultString += "\n--------------------------------";
+ }
+ currentLine = "\n" + nextLine.toString() + ts.repeatString(" ", 3 - nextLine.toString().length) + ">" + this.activeFile.content.substring(pos, fileLineMap[nextLine]) + "\n ";
+ startColumn = 0;
+ length = 0;
+ }
+ var spanInfo = this.spanInfoToString(getSpanAtPos(pos), prefixString);
+ if (previousSpanInfo && previousSpanInfo !== spanInfo) {
+ addSpanInfoString();
+ previousSpanInfo = spanInfo;
+ startColumn = startColumn + length;
+ length = 1;
+ }
+ else {
+ previousSpanInfo = spanInfo;
+ length++;
+ }
+ }
+ addSpanInfoString();
+ return resultString;
+ };
+ TestState.prototype.getBreakpointStatementLocation = function (pos) {
+ return this.languageService.getBreakpointStatementAtPosition(this.activeFile.fileName, pos);
+ };
+ TestState.prototype.baselineCurrentFileBreakpointLocations = function () {
+ var _this = this;
+ var baselineFile = this.testData.globalOptions["BaselineFile" /* baselineFile */];
+ if (!baselineFile) {
+ baselineFile = this.activeFile.fileName.replace(this.basePath + "/breakpointValidation", "bpSpan");
+ baselineFile = baselineFile.replace(".ts" /* Ts */, ".baseline");
+ }
+ Harness.Baseline.runBaseline(baselineFile, function () {
+ return _this.baselineCurrentFileLocations(function (pos) { return _this.getBreakpointStatementLocation(pos); });
+ });
+ };
+ TestState.prototype.baselineGetEmitOutput = function (insertResultsIntoVfs) {
+ var _this = this;
+ // Find file to be emitted
+ var emitFiles = []; // List of FourSlashFile that has emitThisFile flag on
+ var allFourSlashFiles = this.testData.files;
+ for (var _i = 0, allFourSlashFiles_1 = allFourSlashFiles; _i < allFourSlashFiles_1.length; _i++) {
+ var file = allFourSlashFiles_1[_i];
+ if (file.fileOptions["emitThisFile" /* emitThisFile */] === "true") {
+ // Find a file with the flag emitThisFile turned on
+ emitFiles.push(file);
+ }
+ }
+ // If there is not emiThisFile flag specified in the test file, throw an error
+ if (emitFiles.length === 0) {
+ this.raiseError("No emitThisFile is specified in the test file");
+ }
+ Harness.Baseline.runBaseline(this.testData.globalOptions["BaselineFile" /* baselineFile */], function () {
+ var resultString = "";
+ // Loop through all the emittedFiles and emit them one by one
+ emitFiles.forEach(function (emitFile) {
+ var emitOutput = _this.languageService.getEmitOutput(emitFile.fileName);
+ // Print emitOutputStatus in readable format
+ resultString += "EmitSkipped: " + emitOutput.emitSkipped + Harness.IO.newLine();
+ if (emitOutput.emitSkipped) {
+ resultString += "Diagnostics:" + Harness.IO.newLine();
+ var diagnostics = ts.getPreEmitDiagnostics(_this.languageService.getProgram()); // TODO: GH#18217
+ for (var _i = 0, diagnostics_1 = diagnostics; _i < diagnostics_1.length; _i++) {
+ var diagnostic = diagnostics_1[_i];
+ if (!ts.isString(diagnostic.messageText)) {
+ var chainedMessage = diagnostic.messageText;
+ var indentation = " ";
+ while (chainedMessage) {
+ resultString += indentation + chainedMessage.messageText + Harness.IO.newLine();
+ chainedMessage = chainedMessage.next;
+ indentation = indentation + " ";
+ }
+ }
+ else {
+ resultString += " " + diagnostic.messageText + Harness.IO.newLine();
+ }
+ }
+ }
+ for (var _a = 0, _b = emitOutput.outputFiles; _a < _b.length; _a++) {
+ var outputFile = _b[_a];
+ var fileName = "FileName : " + outputFile.name + Harness.IO.newLine();
+ resultString = resultString + fileName + outputFile.text;
+ if (insertResultsIntoVfs) {
+ _this.languageServiceAdapterHost.addScript(ts.getNormalizedAbsolutePath(outputFile.name, "/"), outputFile.text, /*isRootFile*/ true);
+ }
+ }
+ resultString += Harness.IO.newLine();
+ });
+ return resultString;
+ });
+ };
+ TestState.prototype.baselineQuickInfo = function () {
+ var _this = this;
+ var baselineFile = this.testData.globalOptions["BaselineFile" /* baselineFile */];
+ if (!baselineFile) {
+ baselineFile = ts.getBaseFileName(this.activeFile.fileName).replace(".ts" /* Ts */, ".baseline");
+ }
+ Harness.Baseline.runBaseline(baselineFile, function () { return stringify(_this.testData.markers.map(function (marker) { return ({
+ marker: marker,
+ quickInfo: _this.languageService.getQuickInfoAtPosition(marker.fileName, marker.position)
+ }); })); });
+ };
+ TestState.prototype.printBreakpointLocation = function (pos) {
+ Harness.IO.log("\n**Pos: " + pos + " " + this.spanInfoToString(this.getBreakpointStatementLocation(pos), " "));
+ };
+ TestState.prototype.printBreakpointAtCurrentLocation = function () {
+ this.printBreakpointLocation(this.currentCaretPosition);
+ };
+ TestState.prototype.printCurrentParameterHelp = function () {
+ var help = this.languageService.getSignatureHelpItems(this.activeFile.fileName, this.currentCaretPosition);
+ Harness.IO.log(stringify(help));
+ };
+ TestState.prototype.printCurrentQuickInfo = function () {
+ var quickInfo = this.languageService.getQuickInfoAtPosition(this.activeFile.fileName, this.currentCaretPosition);
+ Harness.IO.log("Quick Info: " + quickInfo.displayParts.map(function (part) { return part.text; }).join(""));
+ };
+ TestState.prototype.printErrorList = function () {
+ var syntacticErrors = this.languageService.getSyntacticDiagnostics(this.activeFile.fileName);
+ var semanticErrors = this.languageService.getSemanticDiagnostics(this.activeFile.fileName);
+ var errorList = ts.concatenate(syntacticErrors, semanticErrors);
+ Harness.IO.log("Error list (" + errorList.length + " errors)");
+ if (errorList.length) {
+ errorList.forEach(function (err) {
+ Harness.IO.log("start: " + err.start +
+ ", length: " + err.length +
+ ", message: " + ts.flattenDiagnosticMessageText(err.messageText, Harness.IO.newLine()));
+ });
+ }
+ };
+ TestState.prototype.printCurrentFileState = function (showWhitespace, makeCaretVisible) {
+ for (var _i = 0, _a = this.testData.files; _i < _a.length; _i++) {
+ var file = _a[_i];
+ var active = (this.activeFile === file);
+ Harness.IO.log("=== Script (" + file.fileName + ") " + (active ? "(active, cursor at |)" : "") + " ===");
+ var content = this.getFileContent(file.fileName);
+ if (active) {
+ content = content.substr(0, this.currentCaretPosition) + (makeCaretVisible ? "|" : "") + content.substr(this.currentCaretPosition);
+ }
+ if (showWhitespace) {
+ content = makeWhitespaceVisible(content);
+ }
+ Harness.IO.log(content);
+ }
+ };
+ TestState.prototype.printCurrentSignatureHelp = function () {
+ var help = this.getSignatureHelp();
+ Harness.IO.log(stringify(help.items[help.selectedItemIndex]));
+ };
+ TestState.prototype.getSignatureHelp = function () {
+ return this.languageService.getSignatureHelpItems(this.activeFile.fileName, this.currentCaretPosition);
+ };
+ TestState.prototype.printCompletionListMembers = function (preferences) {
+ var completions = this.getCompletionListAtCaret(preferences);
+ this.printMembersOrCompletions(completions);
+ };
+ TestState.prototype.printMembersOrCompletions = function (info) {
+ if (info === undefined) {
+ return "No completion info.";
+ }
+ var entries = info.entries;
+ function pad(s, length) {
+ return s + new Array(length - s.length + 1).join(" ");
+ }
+ function max(arr, selector) {
+ return arr.reduce(function (prev, x) { return Math.max(prev, selector(x)); }, 0);
+ }
+ var longestNameLength = max(entries, function (m) { return m.name.length; });
+ var longestKindLength = max(entries, function (m) { return m.kind.length; });
+ entries.sort(function (m, n) { return m.sortText > n.sortText ? 1 : m.sortText < n.sortText ? -1 : m.name > n.name ? 1 : m.name < n.name ? -1 : 0; });
+ var membersString = entries.map(function (m) { return pad(m.name, longestNameLength) + " " + pad(m.kind, longestKindLength) + " " + m.kindModifiers + " " + (m.isRecommended ? "recommended " : "") + (m.source === undefined ? "" : m.source); }).join("\n");
+ Harness.IO.log(membersString);
+ };
+ TestState.prototype.printContext = function () {
+ ts.forEach(this.languageServiceAdapterHost.getFilenames(), Harness.IO.log);
+ };
+ TestState.prototype.deleteChar = function (count) {
+ if (count === void 0) { count = 1; }
+ var offset = this.currentCaretPosition;
+ var ch = "";
+ var checkCadence = (count >> 2) + 1;
+ for (var i = 0; i < count; i++) {
+ this.editScriptAndUpdateMarkers(this.activeFile.fileName, offset, offset + 1, ch);
+ if (i % checkCadence === 0) {
+ this.checkPostEditInvariants();
+ }
+ // Handle post-keystroke formatting
+ if (this.enableFormatting) {
+ var edits = this.languageService.getFormattingEditsAfterKeystroke(this.activeFile.fileName, offset, ch, this.formatCodeSettings);
+ if (edits.length) {
+ offset += this.applyEdits(this.activeFile.fileName, edits, /*isFormattingEdit*/ true);
+ }
+ }
+ }
+ this.checkPostEditInvariants();
+ };
+ TestState.prototype.replace = function (start, length, text) {
+ this.editScriptAndUpdateMarkers(this.activeFile.fileName, start, start + length, text);
+ this.checkPostEditInvariants();
+ };
+ TestState.prototype.deleteCharBehindMarker = function (count) {
+ if (count === void 0) { count = 1; }
+ var offset = this.currentCaretPosition;
+ var ch = "";
+ var checkCadence = (count >> 2) + 1;
+ for (var i = 0; i < count; i++) {
+ this.currentCaretPosition--;
+ offset--;
+ this.editScriptAndUpdateMarkers(this.activeFile.fileName, offset, offset + 1, ch);
+ if (i % checkCadence === 0) {
+ this.checkPostEditInvariants();
+ }
+ // Don't need to examine formatting because there are no formatting changes on backspace.
+ }
+ this.checkPostEditInvariants();
+ };
+ // Enters lines of text at the current caret position
+ TestState.prototype.type = function (text, highFidelity) {
+ if (highFidelity === void 0) { highFidelity = false; }
+ var offset = this.currentCaretPosition;
+ var prevChar = " ";
+ var checkCadence = (text.length >> 2) + 1;
+ for (var i = 0; i < text.length; i++) {
+ var ch = text.charAt(i);
+ this.editScriptAndUpdateMarkers(this.activeFile.fileName, offset, offset, ch);
+ if (highFidelity) {
+ this.languageService.getBraceMatchingAtPosition(this.activeFile.fileName, offset);
+ }
+ this.currentCaretPosition++;
+ offset++;
+ if (highFidelity) {
+ if (ch === "(" || ch === ",") {
+ /* Signature help*/
+ this.languageService.getSignatureHelpItems(this.activeFile.fileName, offset);
+ }
+ else if (prevChar === " " && /A-Za-z_/.test(ch)) {
+ /* Completions */
+ this.languageService.getCompletionsAtPosition(this.activeFile.fileName, offset, ts.defaultPreferences);
+ }
+ if (i % checkCadence === 0) {
+ this.checkPostEditInvariants();
+ }
+ }
+ // Handle post-keystroke formatting
+ if (this.enableFormatting) {
+ var edits = this.languageService.getFormattingEditsAfterKeystroke(this.activeFile.fileName, offset, ch, this.formatCodeSettings);
+ if (edits.length) {
+ offset += this.applyEdits(this.activeFile.fileName, edits, /*isFormattingEdit*/ true);
+ }
+ }
+ }
+ this.checkPostEditInvariants();
+ };
+ // Enters text as if the user had pasted it
+ TestState.prototype.paste = function (text) {
+ var start = this.currentCaretPosition;
+ this.editScriptAndUpdateMarkers(this.activeFile.fileName, this.currentCaretPosition, this.currentCaretPosition, text);
+ this.checkPostEditInvariants();
+ var offset = this.currentCaretPosition += text.length;
+ // Handle formatting
+ if (this.enableFormatting) {
+ var edits = this.languageService.getFormattingEditsForRange(this.activeFile.fileName, start, offset, this.formatCodeSettings);
+ if (edits.length) {
+ this.applyEdits(this.activeFile.fileName, edits, /*isFormattingEdit*/ true);
+ }
+ }
+ this.checkPostEditInvariants();
+ };
+ TestState.prototype.checkPostEditInvariants = function () {
+ if (this.testType !== 0 /* Native */) {
+ // getSourcefile() results can not be serialized. Only perform these verifications
+ // if running against a native LS object.
+ return;
+ }
+ var incrementalSourceFile = this.languageService.getNonBoundSourceFile(this.activeFile.fileName);
+ Utils.assertInvariants(incrementalSourceFile, /*parent:*/ undefined);
+ var incrementalSyntaxDiagnostics = incrementalSourceFile.parseDiagnostics;
+ // Check syntactic structure
+ var content = this.getFileContent(this.activeFile.fileName);
+ var referenceSourceFile = ts.createLanguageServiceSourceFile(this.activeFile.fileName, createScriptSnapShot(content), 6 /* Latest */, /*version:*/ "0", /*setNodeParents:*/ false);
+ var referenceSyntaxDiagnostics = referenceSourceFile.parseDiagnostics;
+ Utils.assertDiagnosticsEquals(incrementalSyntaxDiagnostics, referenceSyntaxDiagnostics);
+ Utils.assertStructuralEquals(incrementalSourceFile, referenceSourceFile);
+ };
+ /**
+ * @returns The number of characters added to the file as a result of the edits.
+ * May be negative.
+ */
+ TestState.prototype.applyEdits = function (fileName, edits, isFormattingEdit) {
+ // We get back a set of edits, but langSvc.editScript only accepts one at a time. Use this to keep track
+ // of the incremental offset from each edit to the next. We assume these edit ranges don't overlap
+ // Copy this so we don't ruin someone else's copy
+ edits = JSON.parse(JSON.stringify(edits));
+ // Get a snapshot of the content of the file so we can make sure any formatting edits didn't destroy non-whitespace characters
+ var oldContent = this.getFileContent(fileName);
+ var runningOffset = 0;
+ for (var i = 0; i < edits.length; i++) {
+ var edit = edits[i];
+ var offsetStart = edit.span.start;
+ var offsetEnd = offsetStart + edit.span.length;
+ this.editScriptAndUpdateMarkers(fileName, offsetStart, offsetEnd, edit.newText);
+ var editDelta = edit.newText.length - edit.span.length;
+ if (offsetStart <= this.currentCaretPosition) {
+ if (offsetEnd <= this.currentCaretPosition) {
+ // The entirety of the edit span falls before the caret position, shift the caret accordingly
+ this.currentCaretPosition += editDelta;
+ }
+ else {
+ // The span being replaced includes the caret position, place the caret at the beginning of the span
+ this.currentCaretPosition = offsetStart;
+ }
+ }
+ runningOffset += editDelta;
+ // Update positions of any future edits affected by this change
+ for (var j = i + 1; j < edits.length; j++) {
+ if (edits[j].span.start >= edits[i].span.start) {
+ edits[j].span.start += editDelta;
+ }
+ }
+ }
+ if (isFormattingEdit) {
+ var newContent = this.getFileContent(fileName);
+ if (this.removeWhitespace(newContent) !== this.removeWhitespace(oldContent)) {
+ this.raiseError("Formatting operation destroyed non-whitespace content");
+ }
+ }
+ return runningOffset;
+ };
+ TestState.prototype.copyFormatOptions = function () {
+ return ts.clone(this.formatCodeSettings);
+ };
+ TestState.prototype.setFormatOptions = function (formatCodeOptions) {
+ var oldFormatCodeOptions = this.formatCodeSettings;
+ this.formatCodeSettings = ts.toEditorSettings(formatCodeOptions);
+ return oldFormatCodeOptions;
+ };
+ TestState.prototype.formatDocument = function () {
+ var edits = this.languageService.getFormattingEditsForDocument(this.activeFile.fileName, this.formatCodeSettings);
+ this.applyEdits(this.activeFile.fileName, edits, /*isFormattingEdit*/ true);
+ };
+ TestState.prototype.formatSelection = function (start, end) {
+ var edits = this.languageService.getFormattingEditsForRange(this.activeFile.fileName, start, end, this.formatCodeSettings);
+ this.applyEdits(this.activeFile.fileName, edits, /*isFormattingEdit*/ true);
+ };
+ TestState.prototype.formatOnType = function (pos, key) {
+ var edits = this.languageService.getFormattingEditsAfterKeystroke(this.activeFile.fileName, pos, key, this.formatCodeSettings);
+ this.applyEdits(this.activeFile.fileName, edits, /*isFormattingEdit*/ true);
+ };
+ TestState.prototype.editScriptAndUpdateMarkers = function (fileName, editStart, editEnd, newText) {
+ this.languageServiceAdapterHost.editScript(fileName, editStart, editEnd, newText);
+ for (var _i = 0, _a = this.testData.markers; _i < _a.length; _i++) {
+ var marker = _a[_i];
+ if (marker.fileName === fileName) {
+ marker.position = updatePosition(marker.position);
+ }
+ }
+ for (var _b = 0, _c = this.testData.ranges; _b < _c.length; _b++) {
+ var range = _c[_b];
+ if (range.fileName === fileName) {
+ range.pos = updatePosition(range.pos);
+ range.end = updatePosition(range.end);
+ }
+ }
+ function updatePosition(position) {
+ if (position > editStart) {
+ if (position < editEnd) {
+ // Inside the edit - mark it as invalidated (?)
+ return -1;
+ }
+ else {
+ // Move marker back/forward by the appropriate amount
+ return position + (editStart - editEnd) + newText.length;
+ }
+ }
+ else {
+ return position;
+ }
+ }
+ };
+ TestState.prototype.removeWhitespace = function (text) {
+ return text.replace(/\s/g, "");
+ };
+ TestState.prototype.goToBOF = function () {
+ this.goToPosition(0);
+ };
+ TestState.prototype.goToEOF = function () {
+ var len = this.getFileContent(this.activeFile.fileName).length;
+ this.goToPosition(len);
+ };
+ TestState.prototype.goToRangeStart = function (_a) {
+ var fileName = _a.fileName, pos = _a.pos;
+ this.openFile(fileName);
+ this.goToPosition(pos);
+ };
+ TestState.prototype.goToTypeDefinition = function (definitionIndex) {
+ var definitions = this.languageService.getTypeDefinitionAtPosition(this.activeFile.fileName, this.currentCaretPosition);
+ if (!definitions || !definitions.length) {
+ this.raiseError("goToTypeDefinition failed - expected to find at least one definition location but got 0");
+ }
+ if (definitionIndex >= definitions.length) {
+ this.raiseError("goToTypeDefinition failed - definitionIndex value (" + definitionIndex + ") exceeds definition list size (" + definitions.length + ")");
+ }
+ var definition = definitions[definitionIndex];
+ this.openFile(definition.fileName);
+ this.currentCaretPosition = definition.textSpan.start;
+ };
+ TestState.prototype.verifyTypeDefinitionsCount = function (negative, expectedCount) {
+ var assertFn = negative ? assert.notEqual : assert.equal;
+ var definitions = this.languageService.getTypeDefinitionAtPosition(this.activeFile.fileName, this.currentCaretPosition);
+ var actualCount = definitions && definitions.length || 0;
+ assertFn(actualCount, expectedCount, this.messageAtLastKnownMarker("Type definitions Count"));
+ };
+ TestState.prototype.verifyImplementationListIsEmpty = function (negative) {
+ var implementations = this.languageService.getImplementationAtPosition(this.activeFile.fileName, this.currentCaretPosition);
+ if (negative) {
+ assert.isTrue(implementations && implementations.length > 0, "Expected at least one implementation but got 0");
+ }
+ else {
+ assert.isUndefined(implementations, "Expected implementation list to be empty but implementations returned");
+ }
+ };
+ TestState.prototype.verifyGoToDefinitionName = function (expectedName, expectedContainerName) {
+ var definitions = this.languageService.getDefinitionAtPosition(this.activeFile.fileName, this.currentCaretPosition);
+ var actualDefinitionName = definitions && definitions.length ? definitions[0].name : "";
+ var actualDefinitionContainerName = definitions && definitions.length ? definitions[0].containerName : "";
+ assert.equal(actualDefinitionName, expectedName, this.messageAtLastKnownMarker("Definition Info Name"));
+ assert.equal(actualDefinitionContainerName, expectedContainerName, this.messageAtLastKnownMarker("Definition Info Container Name"));
+ };
+ TestState.prototype.goToImplementation = function () {
+ var implementations = this.languageService.getImplementationAtPosition(this.activeFile.fileName, this.currentCaretPosition);
+ if (!implementations || !implementations.length) {
+ this.raiseError("goToImplementation failed - expected to find at least one implementation location but got 0");
+ }
+ if (implementations.length > 1) {
+ this.raiseError("goToImplementation failed - more than 1 implementation returned (" + implementations.length + ")");
+ }
+ var implementation = implementations[0];
+ this.openFile(implementation.fileName);
+ this.currentCaretPosition = implementation.textSpan.start;
+ };
+ TestState.prototype.verifyRangesInImplementationList = function (markerName) {
+ this.goToMarker(markerName);
+ var implementations = this.languageService.getImplementationAtPosition(this.activeFile.fileName, this.currentCaretPosition);
+ if (!implementations || !implementations.length) {
+ this.raiseError("verifyRangesInImplementationList failed - expected to find at least one implementation location but got 0");
+ }
+ var duplicate = findDuplicatedElement(implementations, implementationsAreEqual);
+ if (duplicate) {
+ var textSpan = duplicate.textSpan, fileName = duplicate.fileName;
+ var end = textSpan.start + textSpan.length;
+ this.raiseError("Duplicate implementations returned for range (" + textSpan.start + ", " + end + ") in " + fileName);
+ }
+ var ranges = this.getRanges();
+ if (!ranges || !ranges.length) {
+ this.raiseError("verifyRangesInImplementationList failed - expected to find at least one range in test source");
+ }
+ var unsatisfiedRanges = [];
+ var delayedErrors = [];
+ var _loop_8 = function (range) {
+ var length = range.end - range.pos;
+ var matchingImpl = ts.find(implementations, function (impl) {
+ return range.fileName === impl.fileName && range.pos === impl.textSpan.start && length === impl.textSpan.length;
+ });
+ if (matchingImpl) {
+ if (range.marker && range.marker.data) {
+ var expected = range.marker.data;
+ if (expected.displayParts) {
+ if (!ts.arrayIsEqualTo(expected.displayParts, matchingImpl.displayParts, displayPartIsEqualTo)) {
+ delayedErrors.push("Mismatched display parts: expected " + JSON.stringify(expected.displayParts) + ", actual " + JSON.stringify(matchingImpl.displayParts));
+ }
+ }
+ else if (expected.parts) {
+ var actualParts = matchingImpl.displayParts.map(function (p) { return p.text; });
+ if (!ts.arrayIsEqualTo(expected.parts, actualParts)) {
+ delayedErrors.push("Mismatched non-tagged display parts: expected " + JSON.stringify(expected.parts) + ", actual " + JSON.stringify(actualParts));
+ }
+ }
+ if (expected.kind !== undefined) {
+ if (expected.kind !== matchingImpl.kind) {
+ delayedErrors.push("Mismatched kind: expected " + JSON.stringify(expected.kind) + ", actual " + JSON.stringify(matchingImpl.kind));
+ }
+ }
+ }
+ matchingImpl.matched = true;
+ }
+ else {
+ unsatisfiedRanges.push(range);
+ }
+ };
+ for (var _i = 0, ranges_2 = ranges; _i < ranges_2.length; _i++) {
+ var range = ranges_2[_i];
+ _loop_8(range);
+ }
+ if (delayedErrors.length) {
+ this.raiseError(delayedErrors.join("\n"));
+ }
+ var unmatchedImplementations = implementations.filter(function (impl) { return !impl.matched; });
+ if (unmatchedImplementations.length || unsatisfiedRanges.length) {
+ var error = "Not all ranges or implementations are satisfied";
+ if (unsatisfiedRanges.length) {
+ error += "\nUnsatisfied ranges:";
+ for (var _a = 0, unsatisfiedRanges_1 = unsatisfiedRanges; _a < unsatisfiedRanges_1.length; _a++) {
+ var range = unsatisfiedRanges_1[_a];
+ error += "\n (" + range.pos + ", " + range.end + ") in " + range.fileName + ": " + this.rangeText(range);
+ }
+ }
+ if (unmatchedImplementations.length) {
+ error += "\nUnmatched implementations:";
+ for (var _b = 0, unmatchedImplementations_1 = unmatchedImplementations; _b < unmatchedImplementations_1.length; _b++) {
+ var impl = unmatchedImplementations_1[_b];
+ var end = impl.textSpan.start + impl.textSpan.length;
+ error += "\n (" + impl.textSpan.start + ", " + end + ") in " + impl.fileName + ": " + this.getFileContent(impl.fileName).slice(impl.textSpan.start, end);
+ }
+ }
+ this.raiseError(error);
+ }
+ function implementationsAreEqual(a, b) {
+ return a.fileName === b.fileName && TestState.textSpansEqual(a.textSpan, b.textSpan);
+ }
+ function displayPartIsEqualTo(a, b) {
+ return a.kind === b.kind && a.text === b.text;
+ }
+ };
+ TestState.prototype.getMarkers = function () {
+ // Return a copy of the list
+ return this.testData.markers.slice(0);
+ };
+ TestState.prototype.getMarkerNames = function () {
+ return ts.arrayFrom(this.testData.markerPositions.keys());
+ };
+ TestState.prototype.getRanges = function () {
+ return this.testData.ranges;
+ };
+ TestState.prototype.rangesByText = function () {
+ var result = ts.createMultiMap();
+ for (var _i = 0, _a = this.getRanges(); _i < _a.length; _i++) {
+ var range = _a[_i];
+ var text = this.rangeText(range);
+ result.add(text, range);
+ }
+ return result;
+ };
+ TestState.prototype.rangeText = function (_a) {
+ var fileName = _a.fileName, pos = _a.pos, end = _a.end;
+ return this.getFileContent(fileName).slice(pos, end);
+ };
+ TestState.prototype.verifyCaretAtMarker = function (markerName) {
+ if (markerName === void 0) { markerName = ""; }
+ var pos = this.getMarkerByName(markerName);
+ if (pos.fileName !== this.activeFile.fileName) {
+ throw new Error("verifyCaretAtMarker failed - expected to be in file \"" + pos.fileName + "\", but was in file \"" + this.activeFile.fileName + "\"");
+ }
+ if (pos.position !== this.currentCaretPosition) {
+ throw new Error("verifyCaretAtMarker failed - expected to be at marker \"/*" + markerName + "*/, but was at position " + this.currentCaretPosition + "(" + this.getLineColStringAtPosition(this.currentCaretPosition) + ")");
+ }
+ };
+ TestState.prototype.getIndentation = function (fileName, position, indentStyle, baseIndentSize) {
+ var formatOptions = ts.clone(this.formatCodeSettings);
+ formatOptions.indentStyle = indentStyle;
+ formatOptions.baseIndentSize = baseIndentSize;
+ return this.languageService.getIndentationAtPosition(fileName, position, formatOptions);
+ };
+ TestState.prototype.verifyIndentationAtCurrentPosition = function (numberOfSpaces, indentStyle, baseIndentSize) {
+ if (indentStyle === void 0) { indentStyle = ts.IndentStyle.Smart; }
+ if (baseIndentSize === void 0) { baseIndentSize = 0; }
+ var actual = this.getIndentation(this.activeFile.fileName, this.currentCaretPosition, indentStyle, baseIndentSize);
+ var lineCol = this.getLineColStringAtPosition(this.currentCaretPosition);
+ if (actual !== numberOfSpaces) {
+ this.raiseError("verifyIndentationAtCurrentPosition failed at " + lineCol + " - expected: " + numberOfSpaces + ", actual: " + actual);
+ }
+ };
+ TestState.prototype.verifyIndentationAtPosition = function (fileName, position, numberOfSpaces, indentStyle, baseIndentSize) {
+ if (indentStyle === void 0) { indentStyle = ts.IndentStyle.Smart; }
+ if (baseIndentSize === void 0) { baseIndentSize = 0; }
+ var actual = this.getIndentation(fileName, position, indentStyle, baseIndentSize);
+ var lineCol = this.getLineColStringAtPosition(position);
+ if (actual !== numberOfSpaces) {
+ this.raiseError("verifyIndentationAtPosition failed at " + lineCol + " - expected: " + numberOfSpaces + ", actual: " + actual);
+ }
+ };
+ TestState.prototype.verifyCurrentLineContent = function (text) {
+ var actual = this.getCurrentLineContent();
+ if (actual !== text) {
+ throw new Error("verifyCurrentLineContent\n" +
+ "\tExpected: \"" + text + "\"\n" +
+ "\t Actual: \"" + actual + "\"");
+ }
+ };
+ TestState.prototype.verifyCurrentFileContent = function (text) {
+ this.verifyFileContent(this.activeFile.fileName, text);
+ };
+ TestState.prototype.verifyFileContent = function (fileName, text) {
+ var actual = this.getFileContent(fileName);
+ if (actual !== text) {
+ throw new Error("verifyFileContent failed:\n" + showTextDiff(text, actual));
+ }
+ };
+ TestState.prototype.verifyTextAtCaretIs = function (text) {
+ var actual = this.getFileContent(this.activeFile.fileName).substring(this.currentCaretPosition, this.currentCaretPosition + text.length);
+ if (actual !== text) {
+ throw new Error("verifyTextAtCaretIs\n" +
+ "\tExpected: \"" + text + "\"\n" +
+ "\t Actual: \"" + actual + "\"");
+ }
+ };
+ TestState.prototype.verifyCurrentNameOrDottedNameSpanText = function (text) {
+ var span = this.languageService.getNameOrDottedNameSpan(this.activeFile.fileName, this.currentCaretPosition, this.currentCaretPosition);
+ if (!span) {
+ return this.raiseError("verifyCurrentNameOrDottedNameSpanText\n" +
+ "\tExpected: \"" + text + "\"\n" +
+ "\t Actual: undefined");
+ }
+ var actual = this.getFileContent(this.activeFile.fileName).substring(span.start, ts.textSpanEnd(span));
+ if (actual !== text) {
+ this.raiseError("verifyCurrentNameOrDottedNameSpanText\n" +
+ "\tExpected: \"" + text + "\"\n" +
+ "\t Actual: \"" + actual + "\"");
+ }
+ };
+ TestState.prototype.getNameOrDottedNameSpan = function (pos) {
+ return this.languageService.getNameOrDottedNameSpan(this.activeFile.fileName, pos, pos);
+ };
+ TestState.prototype.baselineCurrentFileNameOrDottedNameSpans = function () {
+ var _this = this;
+ Harness.Baseline.runBaseline(this.testData.globalOptions["BaselineFile" /* baselineFile */], function () {
+ return _this.baselineCurrentFileLocations(function (pos) {
+ return _this.getNameOrDottedNameSpan(pos);
+ });
+ });
+ };
+ TestState.prototype.printNameOrDottedNameSpans = function (pos) {
+ Harness.IO.log(this.spanInfoToString(this.getNameOrDottedNameSpan(pos), "**"));
+ };
+ TestState.prototype.verifyClassifications = function (expected, actual, sourceFileText) {
+ var _this = this;
+ if (actual.length !== expected.length) {
+ this.raiseError("verifyClassifications failed - expected total classifications to be " + expected.length +
+ ", but was " + actual.length +
+ jsonMismatchString());
+ }
+ ts.zipWith(expected, actual, function (expectedClassification, actualClassification) {
+ var expectedType = expectedClassification.classificationType;
+ if (expectedType !== actualClassification.classificationType) {
+ _this.raiseError("verifyClassifications failed - expected classifications type to be " +
+ expectedType + ", but was " +
+ actualClassification.classificationType +
+ jsonMismatchString());
+ }
+ var expectedSpan = expectedClassification.textSpan;
+ var actualSpan = actualClassification.textSpan;
+ if (expectedSpan) {
+ var expectedLength = expectedSpan.end - expectedSpan.start;
+ if (expectedSpan.start !== actualSpan.start || expectedLength !== actualSpan.length) {
+ _this.raiseError("verifyClassifications failed - expected span of text to be " +
+ "{start=" + expectedSpan.start + ", length=" + expectedLength + "}, but was " +
+ "{start=" + actualSpan.start + ", length=" + actualSpan.length + "}" +
+ jsonMismatchString());
+ }
+ }
+ var actualText = _this.activeFile.content.substr(actualSpan.start, actualSpan.length);
+ if (expectedClassification.text !== actualText) {
+ _this.raiseError("verifyClassifications failed - expected classified text to be " +
+ expectedClassification.text + ", but was " +
+ actualText +
+ jsonMismatchString());
+ }
+ });
+ function jsonMismatchString() {
+ var showActual = actual.map(function (_a) {
+ var classificationType = _a.classificationType, textSpan = _a.textSpan;
+ return ({ classificationType: classificationType, text: sourceFileText.slice(textSpan.start, textSpan.start + textSpan.length) });
+ });
+ return Harness.IO.newLine() +
+ "expected: '" + Harness.IO.newLine() + stringify(expected) + "'" + Harness.IO.newLine() +
+ "actual: '" + Harness.IO.newLine() + stringify(showActual) + "'";
+ }
+ };
+ TestState.prototype.verifyProjectInfo = function (expected) {
+ var _this = this;
+ if (this.testType === 3 /* Server */) {
+ var actual = this.languageService.getProjectInfo(this.activeFile.fileName,
+ /* needFileNameList */ true);
+ assert.equal(expected.join(","), actual.fileNames.map(function (file) {
+ return file.replace(_this.basePath + "/", "");
+ }).join(","));
+ }
+ };
+ TestState.prototype.verifySemanticClassifications = function (expected) {
+ var actual = this.languageService.getSemanticClassifications(this.activeFile.fileName, ts.createTextSpan(0, this.activeFile.content.length));
+ this.verifyClassifications(expected, actual, this.activeFile.content);
+ };
+ TestState.prototype.verifySyntacticClassifications = function (expected) {
+ var actual = this.languageService.getSyntacticClassifications(this.activeFile.fileName, ts.createTextSpan(0, this.activeFile.content.length));
+ this.verifyClassifications(expected, actual, this.activeFile.content);
+ };
+ TestState.prototype.printOutliningSpans = function () {
+ var spans = this.languageService.getOutliningSpans(this.activeFile.fileName);
+ Harness.IO.log("Outlining spans (" + spans.length + " items)");
+ Harness.IO.log(stringify(spans));
+ };
+ TestState.prototype.verifyOutliningSpans = function (spans, kind) {
+ var _this = this;
+ var actual = this.languageService.getOutliningSpans(this.activeFile.fileName);
+ if (actual.length !== spans.length) {
+ this.raiseError("verifyOutliningSpans failed - expected total spans to be " + spans.length + ", but was " + actual.length);
+ }
+ ts.zipWith(spans, actual, function (expectedSpan, actualSpan, i) {
+ if (expectedSpan.pos !== actualSpan.textSpan.start || expectedSpan.end !== ts.textSpanEnd(actualSpan.textSpan)) {
+ return _this.raiseError("verifyOutliningSpans failed - span " + (i + 1) + " expected: (" + expectedSpan.pos + "," + expectedSpan.end + "), actual: (" + actualSpan.textSpan.start + "," + ts.textSpanEnd(actualSpan.textSpan) + ")");
+ }
+ if (kind !== undefined && actualSpan.kind !== kind) {
+ return _this.raiseError("verifyOutliningSpans failed - span " + (i + 1) + " expected kind: ('" + kind + "'), actual: ('" + actualSpan.kind + "')");
+ }
+ });
+ };
+ TestState.prototype.verifyTodoComments = function (descriptors, spans) {
+ var _this = this;
+ var actual = this.languageService.getTodoComments(this.activeFile.fileName, descriptors.map(function (d) { return { text: d, priority: 0 }; }));
+ if (actual.length !== spans.length) {
+ this.raiseError("verifyTodoComments failed - expected total spans to be " + spans.length + ", but was " + actual.length);
+ }
+ ts.zipWith(spans, actual, function (expectedSpan, actualComment, i) {
+ var actualCommentSpan = ts.createTextSpan(actualComment.position, actualComment.message.length);
+ if (expectedSpan.pos !== actualCommentSpan.start || expectedSpan.end !== ts.textSpanEnd(actualCommentSpan)) {
+ _this.raiseError("verifyOutliningSpans failed - span " + (i + 1) + " expected: (" + expectedSpan.pos + "," + expectedSpan.end + "), actual: (" + actualCommentSpan.start + "," + ts.textSpanEnd(actualCommentSpan) + ")");
+ }
+ });
+ };
+ /**
+ * Finds and applies a code action corresponding to the supplied parameters.
+ * If index is undefined, applies the unique code action available.
+ * @param errorCode The error code that generated the code action.
+ * @param index The nth (0-index-based) codeaction available generated by errorCode.
+ */
+ TestState.prototype.getAndApplyCodeActions = function (errorCode, index) {
+ var fileName = this.activeFile.fileName;
+ this.applyCodeActions(this.getCodeFixes(fileName, errorCode), index);
+ };
+ TestState.prototype.applyCodeActionFromCompletion = function (markerName, options) {
+ this.goToMarker(markerName);
+ var details = this.getCompletionEntryDetails(options.name, options.source, options.preferences);
+ var codeActions = details.codeActions;
+ if (codeActions.length !== 1) {
+ this.raiseError("Expected one code action, got " + codeActions.length);
+ }
+ if (codeActions[0].description !== options.description) {
+ this.raiseError("Expected description to be:\n" + options.description + "\ngot:\n" + codeActions[0].description);
+ }
+ this.applyCodeActions(codeActions);
+ this.verifyNewContent(options, ts.flatMap(codeActions, function (a) { return a.changes.map(function (c) { return c.fileName; }); }));
+ };
+ TestState.prototype.verifyRangeIs = function (expectedText, includeWhiteSpace) {
+ var ranges = this.getRanges();
+ if (ranges.length !== 1) {
+ this.raiseError("Exactly one range should be specified in the testfile.");
+ }
+ var actualText = this.rangeText(ranges[0]);
+ var result = includeWhiteSpace
+ ? actualText === expectedText
+ : this.removeWhitespace(actualText) === this.removeWhitespace(expectedText);
+ if (!result) {
+ this.raiseError("Actual range text doesn't match expected text.\n" + showTextDiff(expectedText, actualText));
+ }
+ };
+ /**
+ * Compares expected text to the text that would be in the sole range
+ * (ie: [|...|]) in the file after applying the codefix sole codefix
+ * in the source file.
+ */
+ TestState.prototype.verifyRangeAfterCodeFix = function (expectedText, includeWhiteSpace, errorCode, index) {
+ this.getAndApplyCodeActions(errorCode, index);
+ this.verifyRangeIs(expectedText, includeWhiteSpace);
+ };
+ TestState.prototype.verifyCodeFixAll = function (_a) {
+ var _this = this;
+ var fixId = _a.fixId, fixAllDescription = _a.fixAllDescription, newFileContent = _a.newFileContent, expectedCommands = _a.commands;
+ var fixWithId = ts.find(this.getCodeFixes(this.activeFile.fileName), function (a) { return a.fixId === fixId; });
+ ts.Debug.assert(fixWithId !== undefined, "No available code fix has that group id.", function () {
+ return "Expected '" + fixId + "'. Available action ids: " + ts.mapDefined(_this.getCodeFixes(_this.activeFile.fileName), function (a) { return a.fixId; });
+ });
+ ts.Debug.assertEqual(fixWithId.fixAllDescription, fixAllDescription);
+ var _b = this.languageService.getCombinedCodeFix({ type: "file", fileName: this.activeFile.fileName }, fixId, this.formatCodeSettings, ts.defaultPreferences), changes = _b.changes, commands = _b.commands;
+ assert.deepEqual(commands, expectedCommands);
+ assert(changes.every(function (c) { return c.fileName === _this.activeFile.fileName; }), "TODO: support testing codefixes that touch multiple files");
+ this.applyChanges(changes);
+ this.verifyCurrentFileContent(newFileContent);
+ };
+ /**
+ * Applies fixes for the errors in fileName and compares the results to
+ * expectedContents after all fixes have been applied.
+ *
+ * Note: applying one codefix may generate another (eg: remove duplicate implements
+ * may generate an extends -> interface conversion fix).
+ * @param expectedContents The contents of the file after the fixes are applied.
+ * @param fileName The file to check. If not supplied, the current open file is used.
+ */
+ TestState.prototype.verifyFileAfterCodeFix = function (expectedContents, fileName) {
+ fileName = fileName ? fileName : this.activeFile.fileName;
+ this.applyCodeActions(this.getCodeFixes(fileName));
+ var actualContents = this.getFileContent(fileName);
+ if (this.removeWhitespace(actualContents) !== this.removeWhitespace(expectedContents)) {
+ this.raiseError("Actual text doesn't match expected text. Actual:\n" + actualContents + "\n\nExpected:\n" + expectedContents);
+ }
+ };
+ TestState.prototype.verifyCodeFix = function (options) {
+ var fileName = this.activeFile.fileName;
+ var actions = this.getCodeFixes(fileName, options.errorCode, options.preferences);
+ var index = options.index;
+ if (index === undefined) {
+ if (!(actions && actions.length === 1)) {
+ this.raiseError("Should find exactly one codefix, but " + (actions ? actions.length : "none") + " found. " + (actions ? actions.map(function (a) { return Harness.IO.newLine() + " \"" + a.description + "\""; }) : ""));
+ }
+ index = 0;
+ }
+ else {
+ if (!(actions && actions.length >= index + 1)) {
+ this.raiseError("Should find at least " + (index + 1) + " codefix(es), but " + (actions ? actions.length : "none") + " found.");
+ }
+ }
+ var action = actions[index];
+ assert.equal(action.description, options.description);
+ for (var _i = 0, _a = action.changes; _i < _a.length; _i++) {
+ var change = _a[_i];
+ this.applyEdits(change.fileName, change.textChanges, /*isFormattingEdit*/ false);
+ }
+ this.verifyNewContent(options, action.changes.map(function (c) { return c.fileName; }));
+ };
+ TestState.prototype.verifyNewContent = function (options, changedFiles) {
+ var assertedChangedFiles = !options.newFileContent || typeof options.newFileContent === "string"
+ ? [this.activeFile.fileName]
+ : ts.getOwnKeys(options.newFileContent);
+ assert.deepEqual(assertedChangedFiles, changedFiles);
+ if (options.newFileContent !== undefined) {
+ assert(!options.newRangeContent);
+ if (typeof options.newFileContent === "string") {
+ this.verifyCurrentFileContent(options.newFileContent);
+ }
+ else {
+ for (var fileName in options.newFileContent) {
+ this.verifyFileContent(fileName, options.newFileContent[fileName]);
+ }
+ }
+ }
+ else {
+ this.verifyRangeIs(options.newRangeContent, /*includeWhitespace*/ true);
+ }
+ };
+ /**
+ * Rerieves a codefix satisfying the parameters, or undefined if no such codefix is found.
+ * @param fileName Path to file where error should be retrieved from.
+ */
+ TestState.prototype.getCodeFixes = function (fileName, errorCode, preferences) {
+ var _this = this;
+ if (preferences === void 0) { preferences = ts.defaultPreferences; }
+ var diagnosticsForCodeFix = this.getDiagnostics(fileName, /*includeSuggestions*/ true).map(function (diagnostic) { return ({
+ start: diagnostic.start,
+ length: diagnostic.length,
+ code: diagnostic.code
+ }); });
+ return ts.flatMap(ts.deduplicate(diagnosticsForCodeFix, ts.equalOwnProperties), function (diagnostic) {
+ if (errorCode !== undefined && errorCode !== diagnostic.code) {
+ return;
+ }
+ return _this.languageService.getCodeFixesAtPosition(fileName, diagnostic.start, diagnostic.start + diagnostic.length, [diagnostic.code], _this.formatCodeSettings, preferences);
+ });
+ };
+ TestState.prototype.applyCodeActions = function (actions, index) {
+ if (index === undefined) {
+ if (!(actions && actions.length === 1)) {
+ this.raiseError("Should find exactly one codefix, but " + (actions ? actions.length : "none") + " found. " + (actions ? actions.map(function (a) { return Harness.IO.newLine() + " \"" + a.description + "\""; }) : ""));
+ }
+ index = 0;
+ }
+ else {
+ if (!(actions && actions.length >= index + 1)) {
+ this.raiseError("Should find at least " + (index + 1) + " codefix(es), but " + (actions ? actions.length : "none") + " found.");
+ }
+ }
+ this.applyChanges(actions[index].changes);
+ };
+ TestState.prototype.applyChanges = function (changes) {
+ for (var _i = 0, changes_1 = changes; _i < changes_1.length; _i++) {
+ var change = changes_1[_i];
+ this.applyEdits(change.fileName, change.textChanges, /*isFormattingEdit*/ false);
+ }
+ };
+ TestState.prototype.verifyImportFixAtPosition = function (expectedTextArray, errorCode, preferences) {
+ var _this = this;
+ var fileName = this.activeFile.fileName;
+ var ranges = this.getRanges().filter(function (r) { return r.fileName === fileName; });
+ if (ranges.length > 1) {
+ this.raiseError("Exactly one range should be specified in the testfile.");
+ }
+ var range = ts.firstOrUndefined(ranges);
+ var codeFixes = this.getCodeFixes(fileName, errorCode, preferences).filter(function (f) { return f.fixId === undefined; }); // TODO: GH#20315 filter out those that use the import fix ID;
+ if (codeFixes.length === 0) {
+ if (expectedTextArray.length !== 0) {
+ this.raiseError("No codefixes returned.");
+ }
+ return;
+ }
+ var actualTextArray = [];
+ var scriptInfo = this.languageServiceAdapterHost.getScriptInfo(fileName);
+ var originalContent = scriptInfo.content;
+ for (var _i = 0, codeFixes_1 = codeFixes; _i < codeFixes_1.length; _i++) {
+ var codeFix = codeFixes_1[_i];
+ ts.Debug.assert(codeFix.changes.length === 1);
+ var change = ts.first(codeFix.changes);
+ ts.Debug.assert(change.fileName === fileName);
+ this.applyEdits(change.fileName, change.textChanges, /*isFormattingEdit*/ false);
+ var text = range ? this.rangeText(range) : this.getFileContent(this.activeFile.fileName);
+ actualTextArray.push(text);
+ scriptInfo.updateContent(originalContent);
+ }
+ if (expectedTextArray.length !== actualTextArray.length) {
+ this.raiseError("Expected " + expectedTextArray.length + " import fixes, got " + actualTextArray.length);
+ }
+ ts.zipWith(expectedTextArray, actualTextArray, function (expected, actual, index) {
+ if (expected !== actual) {
+ _this.raiseError("Import fix at index " + index + " doesn't match.\n" + showTextDiff(expected, actual));
+ }
+ });
+ };
+ TestState.prototype.verifyDocCommentTemplate = function (expected) {
+ var name = "verifyDocCommentTemplate";
+ var actual = this.languageService.getDocCommentTemplateAtPosition(this.activeFile.fileName, this.currentCaretPosition);
+ if (expected === undefined) {
+ if (actual) {
+ this.raiseError(name + " failed - expected no template but got {newText: \"" + actual.newText + "\", caretOffset: " + actual.caretOffset + "}");
+ }
+ return;
+ }
+ else {
+ if (actual === undefined) {
+ this.raiseError(name + " failed - expected the template {newText: \"" + expected.newText + "\", caretOffset: \"" + expected.caretOffset + "\"} but got nothing instead");
+ }
+ if (actual.newText !== expected.newText) {
+ this.raiseError(name + " failed for expected insertion.\n" + showTextDiff(expected.newText, actual.newText));
+ }
+ if (actual.caretOffset !== expected.caretOffset) {
+ this.raiseError(name + " failed - expected caretOffset: " + expected.caretOffset + "\nactual caretOffset:" + actual.caretOffset);
+ }
+ }
+ };
+ TestState.prototype.verifyBraceCompletionAtPosition = function (negative, openingBrace) {
+ var openBraceMap = ts.createMapFromTemplate({
+ "(": 40 /* openParen */,
+ "{": 123 /* openBrace */,
+ "[": 91 /* openBracket */,
+ "'": 39 /* singleQuote */,
+ '"': 34 /* doubleQuote */,
+ "`": 96 /* backtick */,
+ "<": 60 /* lessThan */
+ });
+ var charCode = openBraceMap.get(openingBrace);
+ if (!charCode) {
+ throw this.raiseError("Invalid openingBrace '" + openingBrace + "' specified.");
+ }
+ var position = this.currentCaretPosition;
+ var validBraceCompletion = this.languageService.isValidBraceCompletionAtPosition(this.activeFile.fileName, position, charCode);
+ if (!negative && !validBraceCompletion) {
+ this.raiseError(position + " is not a valid brace completion position for " + openingBrace);
+ }
+ if (negative && validBraceCompletion) {
+ this.raiseError(position + " is a valid brace completion position for " + openingBrace);
+ }
+ };
+ TestState.prototype.verifyJsxClosingTag = function (map) {
+ for (var markerName in map) {
+ this.goToMarker(markerName);
+ var actual = this.languageService.getJsxClosingTagAtPosition(this.activeFile.fileName, this.currentCaretPosition);
+ assert.deepEqual(actual, map[markerName]);
+ }
+ };
+ TestState.prototype.verifyMatchingBracePosition = function (bracePosition, expectedMatchPosition) {
+ var actual = this.languageService.getBraceMatchingAtPosition(this.activeFile.fileName, bracePosition);
+ if (actual.length !== 2) {
+ this.raiseError("verifyMatchingBracePosition failed - expected result to contain 2 spans, but it had " + actual.length);
+ }
+ var actualMatchPosition = -1;
+ if (bracePosition === actual[0].start) {
+ actualMatchPosition = actual[1].start;
+ }
+ else if (bracePosition === actual[1].start) {
+ actualMatchPosition = actual[0].start;
+ }
+ else {
+ this.raiseError("verifyMatchingBracePosition failed - could not find the brace position: " + bracePosition + " in the returned list: (" + actual[0].start + "," + ts.textSpanEnd(actual[0]) + ") and (" + actual[1].start + "," + ts.textSpanEnd(actual[1]) + ")");
+ }
+ if (actualMatchPosition !== expectedMatchPosition) {
+ this.raiseError("verifyMatchingBracePosition failed - expected: " + actualMatchPosition + ", actual: " + expectedMatchPosition);
+ }
+ };
+ TestState.prototype.verifyNoMatchingBracePosition = function (bracePosition) {
+ var actual = this.languageService.getBraceMatchingAtPosition(this.activeFile.fileName, bracePosition);
+ if (actual.length !== 0) {
+ this.raiseError("verifyNoMatchingBracePosition failed - expected: 0 spans, actual: " + actual.length);
+ }
+ };
+ TestState.prototype.verifySpanOfEnclosingComment = function (negative, onlyMultiLineDiverges) {
+ var expected = !negative;
+ var position = this.currentCaretPosition;
+ var fileName = this.activeFile.fileName;
+ var actual = !!this.languageService.getSpanOfEnclosingComment(fileName, position, /*onlyMultiLine*/ false);
+ var actualOnlyMultiLine = !!this.languageService.getSpanOfEnclosingComment(fileName, position, /*onlyMultiLine*/ true);
+ if (expected !== actual || onlyMultiLineDiverges === (actual === actualOnlyMultiLine)) {
+ this.raiseError("verifySpanOfEnclosingComment failed:\n position: '" + position + "'\n fileName: '" + fileName + "'\n onlyMultiLineDiverges: '" + onlyMultiLineDiverges + "'\n actual: '" + actual + "'\n actualOnlyMultiLine: '" + actualOnlyMultiLine + "'\n expected: '" + expected + "'.");
+ }
+ };
+ /*
+ Check number of navigationItems which match both searchValue and matchKind,
+ if a filename is passed in, limit the results to that file.
+ Report an error if expected value and actual value do not match.
+ */
+ TestState.prototype.verifyNavigationItemsCount = function (expected, searchValue, matchKind, fileName) {
+ var items = this.languageService.getNavigateToItems(searchValue, /*maxResultCount*/ undefined, fileName);
+ var actual = 0;
+ // Count only the match that match the same MatchKind
+ for (var _i = 0, items_1 = items; _i < items_1.length; _i++) {
+ var item = items_1[_i];
+ if (!matchKind || item.matchKind === matchKind) {
+ actual++;
+ }
+ }
+ if (expected !== actual) {
+ this.raiseError("verifyNavigationItemsCount failed - found: " + actual + " navigation items, expected: " + expected + ".");
+ }
+ };
+ /*
+ Verify that returned navigationItems from getNavigateToItems have matched searchValue, matchKind, and kind.
+ Report an error if getNavigateToItems does not find any matched searchValue.
+ */
+ TestState.prototype.verifyNavigationItemsListContains = function (name, kind, searchValue, matchKind, fileName, parentName) {
+ var items = this.languageService.getNavigateToItems(searchValue);
+ if (!items || items.length === 0) {
+ this.raiseError("verifyNavigationItemsListContains failed - found 0 navigation items, expected at least one.");
+ }
+ for (var _i = 0, items_2 = items; _i < items_2.length; _i++) {
+ var item = items_2[_i];
+ if (item && item.name === name && item.kind === kind &&
+ (matchKind === undefined || item.matchKind === matchKind) &&
+ (fileName === undefined || item.fileName === fileName) &&
+ (parentName === undefined || item.containerName === parentName)) {
+ return;
+ }
+ }
+ // if there was an explicit match kind specified, then it should be validated.
+ if (matchKind !== undefined) {
+ var missingItem = { name: name, kind: kind, searchValue: searchValue, matchKind: matchKind, fileName: fileName, parentName: parentName };
+ this.raiseError("verifyNavigationItemsListContains failed - could not find the item: " + stringify(missingItem) + " in the returned list: (" + stringify(items) + ")");
+ }
+ };
+ TestState.prototype.verifyNavigationBar = function (json, options) {
+ this.verifyNavigationTreeOrBar(json, this.languageService.getNavigationBarItems(this.activeFile.fileName), "Bar", options);
+ };
+ TestState.prototype.verifyNavigationTree = function (json, options) {
+ this.verifyNavigationTreeOrBar(json, this.languageService.getNavigationTree(this.activeFile.fileName), "Tree", options);
+ };
+ TestState.prototype.verifyNavigationTreeOrBar = function (json, tree, name, options) {
+ if (JSON.stringify(tree, replacer) !== JSON.stringify(json)) {
+ this.raiseError("verifyNavigation" + name + " failed - expected: " + stringify(json) + ", got: " + stringify(tree, replacer));
+ }
+ function replacer(key, value) {
+ switch (key) {
+ case "spans":
+ case "nameSpan":
+ return options && options.checkSpans ? value : undefined;
+ case "start":
+ case "length":
+ // Never omit the values in a span, even if they are 0.
+ return value;
+ case "childItems":
+ return !value || value.length === 0 ? undefined : value;
+ default:
+ // Omit falsy values, those are presumed to be the default.
+ return value || undefined;
+ }
+ }
+ };
+ TestState.prototype.printNavigationItems = function (searchValue) {
+ var items = this.languageService.getNavigateToItems(searchValue);
+ Harness.IO.log("NavigationItems list (" + items.length + " items)");
+ for (var _i = 0, items_3 = items; _i < items_3.length; _i++) {
+ var item = items_3[_i];
+ Harness.IO.log("name: " + item.name + ", kind: " + item.kind + ", parentName: " + item.containerName + ", fileName: " + item.fileName);
+ }
+ };
+ TestState.prototype.printNavigationBar = function () {
+ var items = this.languageService.getNavigationBarItems(this.activeFile.fileName);
+ Harness.IO.log("Navigation bar (" + items.length + " items)");
+ for (var _i = 0, items_4 = items; _i < items_4.length; _i++) {
+ var item = items_4[_i];
+ Harness.IO.log(ts.repeatString(" ", item.indent) + "name: " + item.text + ", kind: " + item.kind + ", childItems: " + item.childItems.map(function (child) { return child.text; }));
+ }
+ };
+ TestState.prototype.getOccurrencesAtCurrentPosition = function () {
+ return this.languageService.getOccurrencesAtPosition(this.activeFile.fileName, this.currentCaretPosition);
+ };
+ TestState.prototype.verifyOccurrencesAtPositionListContains = function (fileName, start, end, isWriteAccess) {
+ var occurrences = this.getOccurrencesAtCurrentPosition();
+ if (!occurrences || occurrences.length === 0) {
+ return this.raiseError("verifyOccurrencesAtPositionListContains failed - found 0 references, expected at least one.");
+ }
+ for (var _i = 0, occurrences_1 = occurrences; _i < occurrences_1.length; _i++) {
+ var occurrence = occurrences_1[_i];
+ if (occurrence && occurrence.fileName === fileName && occurrence.textSpan.start === start && ts.textSpanEnd(occurrence.textSpan) === end) {
+ if (typeof isWriteAccess !== "undefined" && occurrence.isWriteAccess !== isWriteAccess) {
+ this.raiseError("verifyOccurrencesAtPositionListContains failed - item isWriteAccess value does not match, actual: " + occurrence.isWriteAccess + ", expected: " + isWriteAccess + ".");
+ }
+ return;
+ }
+ }
+ var missingItem = { fileName: fileName, start: start, end: end, isWriteAccess: isWriteAccess };
+ this.raiseError("verifyOccurrencesAtPositionListContains failed - could not find the item: " + stringify(missingItem) + " in the returned list: (" + stringify(occurrences) + ")");
+ };
+ TestState.prototype.verifyOccurrencesAtPositionListCount = function (expectedCount) {
+ var occurrences = this.getOccurrencesAtCurrentPosition();
+ var actualCount = occurrences ? occurrences.length : 0;
+ if (expectedCount !== actualCount) {
+ this.raiseError("verifyOccurrencesAtPositionListCount failed - actual: " + actualCount + ", expected:" + expectedCount);
+ }
+ };
+ TestState.prototype.getDocumentHighlightsAtCurrentPosition = function (fileNamesToSearch) {
+ var _this = this;
+ var filesToSearch = fileNamesToSearch.map(function (name) { return ts.combinePaths(_this.basePath, name); });
+ return this.languageService.getDocumentHighlights(this.activeFile.fileName, this.currentCaretPosition, filesToSearch);
+ };
+ TestState.prototype.verifyRangesAreOccurrences = function (isWriteAccess) {
+ var ranges = this.getRanges();
+ for (var _i = 0, ranges_3 = ranges; _i < ranges_3.length; _i++) {
+ var r = ranges_3[_i];
+ this.goToRangeStart(r);
+ this.verifyOccurrencesAtPositionListCount(ranges.length);
+ for (var _a = 0, ranges_4 = ranges; _a < ranges_4.length; _a++) {
+ var range = ranges_4[_a];
+ this.verifyOccurrencesAtPositionListContains(range.fileName, range.pos, range.end, isWriteAccess);
+ }
+ }
+ };
+ TestState.prototype.verifyRangesWithSameTextAreRenameLocations = function () {
+ var _this = this;
+ this.rangesByText().forEach(function (ranges) { return _this.verifyRangesAreRenameLocations(ranges); });
+ };
+ TestState.prototype.verifyRangesWithSameTextAreDocumentHighlights = function () {
+ var _this = this;
+ this.rangesByText().forEach(function (ranges) { return _this.verifyRangesAreDocumentHighlights(ranges, /*options*/ undefined); });
+ };
+ TestState.prototype.verifyDocumentHighlightsOf = function (startRange, ranges, options) {
+ var fileNames = options && options.filesToSearch || unique(ranges, function (range) { return range.fileName; });
+ this.goToRangeStart(startRange);
+ this.verifyDocumentHighlights(ranges, fileNames);
+ };
+ TestState.prototype.verifyRangesAreDocumentHighlights = function (ranges, options) {
+ ranges = ranges || this.getRanges();
+ var fileNames = options && options.filesToSearch || unique(ranges, function (range) { return range.fileName; });
+ for (var _i = 0, ranges_5 = ranges; _i < ranges_5.length; _i++) {
+ var range = ranges_5[_i];
+ this.goToRangeStart(range);
+ this.verifyDocumentHighlights(ranges, fileNames);
+ }
+ };
+ TestState.prototype.verifyNoDocumentHighlights = function (startRange) {
+ this.goToRangeStart(startRange);
+ var documentHighlights = this.getDocumentHighlightsAtCurrentPosition([this.activeFile.fileName]);
+ var numHighlights = ts.length(documentHighlights);
+ if (numHighlights > 0) {
+ this.raiseError("verifyNoDocumentHighlights failed - unexpectedly got " + numHighlights + " highlights");
+ }
+ };
+ TestState.prototype.verifyDocumentHighlights = function (expectedRanges, fileNames) {
+ var _this = this;
+ if (fileNames === void 0) { fileNames = [this.activeFile.fileName]; }
+ fileNames = ts.map(fileNames, ts.normalizePath);
+ var documentHighlights = this.getDocumentHighlightsAtCurrentPosition(fileNames) || [];
+ for (var _i = 0, documentHighlights_1 = documentHighlights; _i < documentHighlights_1.length; _i++) {
+ var dh = documentHighlights_1[_i];
+ if (fileNames.indexOf(dh.fileName) === -1) {
+ this.raiseError("verifyDocumentHighlights failed - got highlights in unexpected file name " + dh.fileName);
+ }
+ }
+ var _loop_9 = function (fileName) {
+ var expectedRangesInFile = expectedRanges.filter(function (r) { return ts.normalizePath(r.fileName) === fileName; });
+ var highlights = ts.find(documentHighlights, function (dh) { return dh.fileName === fileName; });
+ var spansInFile = highlights ? highlights.highlightSpans.sort(function (s1, s2) { return s1.textSpan.start - s2.textSpan.start; }) : [];
+ if (expectedRangesInFile.length !== spansInFile.length) {
+ this_4.raiseError("verifyDocumentHighlights failed - In " + fileName + ", expected " + expectedRangesInFile.length + " highlights, got " + spansInFile.length);
+ }
+ ts.zipWith(expectedRangesInFile, spansInFile, function (expectedRange, span) {
+ if (span.textSpan.start !== expectedRange.pos || ts.textSpanEnd(span.textSpan) !== expectedRange.end) {
+ _this.raiseError("verifyDocumentHighlights failed - span does not match, actual: " + stringify(span.textSpan) + ", expected: " + expectedRange.pos + "--" + expectedRange.end);
+ }
+ });
+ };
+ var this_4 = this;
+ for (var _a = 0, fileNames_1 = fileNames; _a < fileNames_1.length; _a++) {
+ var fileName = fileNames_1[_a];
+ _loop_9(fileName);
+ }
+ };
+ TestState.prototype.verifyCodeFixAvailable = function (negative, expected) {
+ assert(!negative || !expected);
+ var codeFixes = this.getCodeFixes(this.activeFile.fileName);
+ var actuals = codeFixes.map(function (fix) { return ({ description: fix.description, commands: fix.commands }); });
+ this.assertObjectsEqual(actuals, negative ? ts.emptyArray : expected);
+ };
+ TestState.prototype.verifyApplicableRefactorAvailableAtMarker = function (negative, markerName) {
+ var isAvailable = this.getApplicableRefactors(this.getMarkerByName(markerName).position).length > 0;
+ if (negative && isAvailable) {
+ this.raiseError("verifyApplicableRefactorAvailableAtMarker failed - expected no refactor at marker " + markerName + " but found some.");
+ }
+ if (!negative && !isAvailable) {
+ this.raiseError("verifyApplicableRefactorAvailableAtMarker failed - expected a refactor at marker " + markerName + " but found none.");
+ }
+ };
+ TestState.prototype.getSelection = function () {
+ return {
+ pos: this.currentCaretPosition,
+ end: this.selectionEnd === -1 ? this.currentCaretPosition : this.selectionEnd
+ };
+ };
+ TestState.prototype.verifyRefactorAvailable = function (negative, name, actionName) {
+ var refactors = this.getApplicableRefactors(this.getSelection());
+ refactors = refactors.filter(function (r) { return r.name === name && (actionName === undefined || r.actions.some(function (a) { return a.name === actionName; })); });
+ var isAvailable = refactors.length > 0;
+ if (negative) {
+ if (isAvailable) {
+ this.raiseError("verifyApplicableRefactorAvailableForRange failed - expected no refactor but found: " + refactors.map(function (r) { return r.name; }).join(", "));
+ }
+ }
+ else {
+ if (!isAvailable) {
+ this.raiseError("verifyApplicableRefactorAvailableForRange failed - expected a refactor but found none.");
+ }
+ if (refactors.length > 1) {
+ this.raiseError(refactors.length + " available refactors both have name " + name + " and action " + actionName);
+ }
+ }
+ };
+ TestState.prototype.verifyRefactor = function (_a) {
+ var name = _a.name, actionName = _a.actionName, refactors = _a.refactors;
+ var actualRefactors = this.getApplicableRefactors(this.getSelection()).filter(function (r) { return r.name === name && r.actions.some(function (a) { return a.name === actionName; }); });
+ this.assertObjectsEqual(actualRefactors, refactors);
+ };
+ TestState.prototype.verifyApplicableRefactorAvailableForRange = function (negative) {
+ var ranges = this.getRanges();
+ if (!(ranges && ranges.length === 1)) {
+ throw new Error("Exactly one refactor range is allowed per test.");
+ }
+ var isAvailable = this.getApplicableRefactors(ts.first(ranges)).length > 0;
+ if (negative && isAvailable) {
+ this.raiseError("verifyApplicableRefactorAvailableForRange failed - expected no refactor but found some.");
+ }
+ if (!negative && !isAvailable) {
+ this.raiseError("verifyApplicableRefactorAvailableForRange failed - expected a refactor but found none.");
+ }
+ };
+ TestState.prototype.applyRefactor = function (_a) {
+ var refactorName = _a.refactorName, actionName = _a.actionName, actionDescription = _a.actionDescription, newContentWithRenameMarker = _a.newContent;
+ var range = this.getSelection();
+ var refactors = this.getApplicableRefactors(range);
+ var refactorsWithName = refactors.filter(function (r) { return r.name === refactorName; });
+ if (refactorsWithName.length === 0) {
+ this.raiseError("The expected refactor: " + refactorName + " is not available at the marker location.\nAvailable refactors: " + refactors.map(function (r) { return r.name; }));
+ }
+ var action = ts.firstDefined(refactorsWithName, function (refactor) { return refactor.actions.find(function (a) { return a.name === actionName; }); });
+ if (!action) {
+ throw this.raiseError("The expected action: " + actionName + " is not included in: " + ts.flatMap(refactorsWithName, function (r) { return r.actions.map(function (a) { return a.name; }); }));
+ }
+ if (action.description !== actionDescription) {
+ this.raiseError("Expected action description to be " + JSON.stringify(actionDescription) + ", got: " + JSON.stringify(action.description));
+ }
+ var editInfo = this.languageService.getEditsForRefactor(this.activeFile.fileName, this.formatCodeSettings, range, refactorName, actionName, ts.defaultPreferences);
+ for (var _i = 0, _b = editInfo.edits; _i < _b.length; _i++) {
+ var edit = _b[_i];
+ this.applyEdits(edit.fileName, edit.textChanges, /*isFormattingEdit*/ false);
+ }
+ var _c = parseNewContent(), renamePosition = _c.renamePosition, newContent = _c.newContent;
+ this.verifyCurrentFileContent(newContent);
+ if (renamePosition === undefined) {
+ if (editInfo.renameLocation !== undefined) {
+ this.raiseError("Did not expect a rename location, got " + editInfo.renameLocation);
+ }
+ }
+ else {
+ // TODO: test editInfo.renameFilename value
+ assert.isDefined(editInfo.renameFilename);
+ if (renamePosition !== editInfo.renameLocation) {
+ this.raiseError("Expected rename position of " + renamePosition + ", but got " + editInfo.renameLocation);
+ }
+ }
+ function parseNewContent() {
+ var renamePosition = newContentWithRenameMarker.indexOf("/*RENAME*/");
+ if (renamePosition === -1) {
+ return { renamePosition: undefined, newContent: newContentWithRenameMarker };
+ }
+ else {
+ var newContent_1 = newContentWithRenameMarker.slice(0, renamePosition) + newContentWithRenameMarker.slice(renamePosition + "/*RENAME*/".length);
+ return { renamePosition: renamePosition, newContent: newContent_1 };
+ }
+ }
+ };
+ TestState.prototype.noMoveToNewFile = function () {
+ for (var _i = 0, _a = this.getRanges(); _i < _a.length; _i++) {
+ var range = _a[_i];
+ for (var _b = 0, _c = this.getApplicableRefactors(range, { allowTextChangesInNewFiles: true }); _b < _c.length; _b++) {
+ var refactor = _c[_b];
+ if (refactor.name === "Move to a new file") {
+ ts.Debug.fail("Did not expect to get 'move to a new file' refactor");
+ }
+ }
+ }
+ };
+ TestState.prototype.moveToNewFile = function (options) {
+ assert(this.getRanges().length === 1);
+ var range = this.getRanges()[0];
+ var refactor = ts.find(this.getApplicableRefactors(range, { allowTextChangesInNewFiles: true }), function (r) { return r.name === "Move to a new file"; });
+ assert(refactor.actions.length === 1);
+ var action = ts.first(refactor.actions);
+ assert(action.name === "Move to a new file" && action.description === "Move to a new file");
+ var editInfo = this.languageService.getEditsForRefactor(this.activeFile.fileName, this.formatCodeSettings, range, refactor.name, action.name, options.preferences || ts.defaultPreferences);
+ this.testNewFileContents(editInfo.edits, options.newFileContents);
+ };
+ TestState.prototype.testNewFileContents = function (edits, newFileContents) {
+ var _loop_10 = function (edit) {
+ var newContent = newFileContents[edit.fileName];
+ if (newContent === undefined) {
+ this_5.raiseError("There was an edit in " + edit.fileName + " but new content was not specified.");
+ }
+ if (this_5.testData.files.some(function (f) { return f.fileName === edit.fileName; })) {
+ this_5.applyEdits(edit.fileName, edit.textChanges, /*isFormattingEdit*/ false);
+ this_5.openFile(edit.fileName);
+ this_5.verifyCurrentFileContent(newContent);
+ }
+ else {
+ assert(edit.textChanges.length === 1);
+ var change = ts.first(edit.textChanges);
+ assert.deepEqual(change.span, ts.createTextSpan(0, 0));
+ assert.equal(change.newText, newContent, "Content for " + edit.fileName);
+ }
+ };
+ var this_5 = this;
+ for (var _i = 0, edits_1 = edits; _i < edits_1.length; _i++) {
+ var edit = edits_1[_i];
+ _loop_10(edit);
+ }
+ var _loop_11 = function (fileName) {
+ assert(edits.some(function (e) { return e.fileName === fileName; }));
+ };
+ for (var fileName in newFileContents) {
+ _loop_11(fileName);
+ }
+ };
+ TestState.prototype.verifyFileAfterApplyingRefactorAtMarker = function (markerName, expectedContent, refactorNameToApply, actionName, formattingOptions) {
+ formattingOptions = formattingOptions || this.formatCodeSettings;
+ var markerPos = this.getMarkerByName(markerName).position;
+ var applicableRefactors = this.languageService.getApplicableRefactors(this.activeFile.fileName, markerPos, ts.defaultPreferences);
+ var applicableRefactorToApply = ts.find(applicableRefactors, function (refactor) { return refactor.name === refactorNameToApply; });
+ if (!applicableRefactorToApply) {
+ this.raiseError("The expected refactor: " + refactorNameToApply + " is not available at the marker location.");
+ }
+ var editInfo = this.languageService.getEditsForRefactor(this.activeFile.fileName, formattingOptions, markerPos, refactorNameToApply, actionName, ts.defaultPreferences);
+ for (var _i = 0, _a = editInfo.edits; _i < _a.length; _i++) {
+ var edit = _a[_i];
+ this.applyEdits(edit.fileName, edit.textChanges, /*isFormattingEdit*/ false);
+ }
+ var actualContent = this.getFileContent(this.activeFile.fileName);
+ if (actualContent !== expectedContent) {
+ this.raiseError("verifyFileAfterApplyingRefactors failed:\n" + showTextDiff(expectedContent, actualContent));
+ }
+ };
+ TestState.prototype.printAvailableCodeFixes = function () {
+ var codeFixes = this.getCodeFixes(this.activeFile.fileName);
+ Harness.IO.log(stringify(codeFixes));
+ };
+ // Get the text of the entire line the caret is currently at
+ TestState.prototype.getCurrentLineContent = function () {
+ var text = this.getFileContent(this.activeFile.fileName);
+ var pos = this.currentCaretPosition;
+ var startPos = pos, endPos = pos;
+ while (startPos > 0) {
+ var ch = text.charCodeAt(startPos - 1);
+ if (ch === 13 /* carriageReturn */ || ch === 10 /* lineFeed */) {
+ break;
+ }
+ startPos--;
+ }
+ while (endPos < text.length) {
+ var ch = text.charCodeAt(endPos);
+ if (ch === 13 /* carriageReturn */ || ch === 10 /* lineFeed */) {
+ break;
+ }
+ endPos++;
+ }
+ return text.substring(startPos, endPos);
+ };
+ TestState.prototype.assertItemInCompletionList = function (items, entryId, text, documentation, kind, spanIndex, hasAction, options) {
+ var _this = this;
+ var eq = function (a, b, msg) {
+ assert.deepEqual(a, b, _this.assertionMessageAtLastKnownMarker(msg + " for " + stringify(entryId)));
+ };
+ var matchingItems = items.filter(function (item) { return item.name === entryId.name && item.source === entryId.source; });
+ if (matchingItems.length === 0) {
+ var itemsString = items.map(function (item) { return stringify({ name: item.name, source: item.source, kind: item.kind }); }).join(",\n");
+ this.raiseError("Expected \"" + stringify({ entryId: entryId, text: text, documentation: documentation, kind: kind }) + "\" to be in list [" + itemsString + "]");
+ }
+ else if (matchingItems.length > 1) {
+ this.raiseError("Found duplicate completion items for " + stringify(entryId));
+ }
+ var item = matchingItems[0];
+ if (documentation !== undefined || text !== undefined || entryId.source !== undefined) {
+ var details = this.getCompletionEntryDetails(item.name, item.source);
+ if (documentation !== undefined) {
+ eq(ts.displayPartsToString(details.documentation), documentation, "completion item documentation");
+ }
+ if (text !== undefined) {
+ eq(ts.displayPartsToString(details.displayParts), text, "completion item detail text");
+ }
+ if (entryId.source === undefined) {
+ eq(options && options.sourceDisplay, /*b*/ undefined, "source display");
+ }
+ else {
+ eq(details.source, [ts.textPart(options.sourceDisplay)], "source display");
+ }
+ }
+ if (kind !== undefined) {
+ if (typeof kind === "string") {
+ eq(item.kind, kind, "completion item kind");
+ }
+ else {
+ if (kind.kind) {
+ eq(item.kind, kind.kind, "completion item kind");
+ }
+ if (kind.kindModifiers !== undefined) {
+ eq(item.kindModifiers, kind.kindModifiers, "completion item kindModifiers");
+ }
+ }
+ }
+ if (spanIndex !== undefined) {
+ var span = this.getTextSpanForRangeAtIndex(spanIndex);
+ assert.isTrue(TestState.textSpansEqual(span, item.replacementSpan), this.assertionMessageAtLastKnownMarker(stringify(span) + " does not equal " + stringify(item.replacementSpan) + " replacement span for " + stringify(entryId)));
+ }
+ eq(item.hasAction, hasAction, "hasAction");
+ eq(item.isRecommended, options && options.isRecommended, "isRecommended");
+ eq(item.insertText, options && options.insertText, "insertText");
+ eq(item.replacementSpan, options && options.replacementSpan && ts.createTextSpanFromRange(options.replacementSpan), "replacementSpan");
+ };
+ TestState.prototype.findFile = function (indexOrName) {
+ if (typeof indexOrName === "number") {
+ var index = indexOrName;
+ if (index >= this.testData.files.length) {
+ throw new Error("File index (" + index + ") in openFile was out of range. There are only " + this.testData.files.length + " files in this test.");
+ }
+ else {
+ return this.testData.files[index];
+ }
+ }
+ else if (ts.isString(indexOrName)) {
+ var name_1 = ts.normalizePath(indexOrName);
+ // names are stored in the compiler with this relative path, this allows people to use goTo.file on just the fileName
+ name_1 = name_1.indexOf("/") === -1 ? (this.basePath + "/" + name_1) : name_1;
+ var availableNames_1 = [];
+ var result = ts.forEach(this.testData.files, function (file) {
+ var fn = ts.normalizePath(file.fileName);
+ if (fn) {
+ if (fn === name_1) {
+ return file;
+ }
+ availableNames_1.push(fn);
+ }
+ });
+ if (!result) {
+ throw new Error("No test file named \"" + name_1 + "\" exists. Available file names are: " + availableNames_1.join(", "));
+ }
+ return result;
+ }
+ else {
+ return ts.Debug.assertNever(indexOrName);
+ }
+ };
+ TestState.prototype.getLineColStringAtPosition = function (position) {
+ var pos = this.languageServiceAdapterHost.positionToLineAndCharacter(this.activeFile.fileName, position);
+ return "line " + (pos.line + 1) + ", col " + pos.character;
+ };
+ TestState.prototype.getTextSpanForRangeAtIndex = function (index) {
+ var ranges = this.getRanges();
+ if (ranges.length > index) {
+ return ts.createTextSpanFromRange(ranges[index]);
+ }
+ else {
+ throw this.raiseError("Supplied span index: " + index + " does not exist in range list of size: " + ranges.length);
+ }
+ };
+ TestState.prototype.getMarkerByName = function (markerName) {
+ var markerPos = this.testData.markerPositions.get(markerName);
+ if (markerPos === undefined) {
+ throw new Error("Unknown marker \"" + markerName + "\" Available markers: " + this.getMarkerNames().map(function (m) { return "\"" + m + "\""; }).join(", "));
+ }
+ else {
+ return markerPos;
+ }
+ };
+ TestState.prototype.setCancelled = function (numberOfCalls) {
+ this.cancellationToken.setCancelled(numberOfCalls);
+ };
+ TestState.prototype.resetCancelled = function () {
+ this.cancellationToken.resetCancelled();
+ };
+ TestState.textSpansEqual = function (a, b) {
+ return !!a && !!b && a.start === b.start && a.length === b.length;
+ };
+ TestState.prototype.getEditsForFileRename = function (options) {
+ var changes = this.languageService.getEditsForFileRename(options.oldPath, options.newPath, this.formatCodeSettings, ts.defaultPreferences);
+ this.testNewFileContents(changes, options.newFileContents);
+ };
+ TestState.prototype.getApplicableRefactors = function (positionOrRange, preferences) {
+ if (preferences === void 0) { preferences = ts.defaultPreferences; }
+ return this.languageService.getApplicableRefactors(this.activeFile.fileName, positionOrRange, preferences) || ts.emptyArray;
+ };
+ return TestState;
+ }());
+ FourSlash.TestState = TestState;
+ function runFourSlashTest(basePath, testType, fileName) {
+ var content = Harness.IO.readFile(fileName);
+ runFourSlashTestContent(basePath, testType, content, fileName);
+ }
+ FourSlash.runFourSlashTest = runFourSlashTest;
+ function runFourSlashTestContent(basePath, testType, content, fileName) {
+ // Give file paths an absolute path for the virtual file system
+ var absoluteBasePath = ts.combinePaths(Harness.virtualFileSystemRoot, basePath);
+ var absoluteFileName = ts.combinePaths(Harness.virtualFileSystemRoot, fileName);
+ // Parse out the files and their metadata
+ var testData = parseTestData(absoluteBasePath, content, absoluteFileName);
+ var state = new TestState(absoluteBasePath, testType, testData);
+ var output = ts.transpileModule(content, { reportDiagnostics: true });
+ if (output.diagnostics.length > 0) {
+ throw new Error("Syntax error in " + absoluteBasePath + ": " + output.diagnostics[0].messageText);
+ }
+ runCode(output.outputText, state);
+ }
+ FourSlash.runFourSlashTestContent = runFourSlashTestContent;
+ function runCode(code, state) {
+ // Compile and execute the test
+ var wrappedCode = "(function(test, goTo, verify, edit, debug, format, cancellation, classification, verifyOperationIsCancelled) {\n" + code + "\n})";
+ try {
+ var test_1 = new FourSlashInterface.Test(state);
+ var goTo = new FourSlashInterface.GoTo(state);
+ var verify = new FourSlashInterface.Verify(state);
+ var edit = new FourSlashInterface.Edit(state);
+ var debug = new FourSlashInterface.Debug(state);
+ var format = new FourSlashInterface.Format(state);
+ var cancellation = new FourSlashInterface.Cancellation(state);
+ var f = eval(wrappedCode);
+ f(test_1, goTo, verify, edit, debug, format, cancellation, FourSlashInterface.Classification, verifyOperationIsCancelled);
+ }
+ catch (err) {
+ throw err;
+ }
+ }
+ function chompLeadingSpace(content) {
+ var lines = content.split("\n");
+ for (var _i = 0, lines_4 = lines; _i < lines_4.length; _i++) {
+ var line = lines_4[_i];
+ if ((line.length !== 0) && (line.charAt(0) !== " ")) {
+ return content;
+ }
+ }
+ return lines.map(function (s) { return s.substr(1); }).join("\n");
+ }
+ function parseTestData(basePath, contents, fileName) {
+ // Regex for parsing options in the format "@Alpha: Value of any sort"
+ var optionRegex = /^\s*@(\w+): (.*)\s*/;
+ // List of all the subfiles we've parsed out
+ var files = [];
+ // Global options
+ var globalOptions = {};
+ // Marker positions
+ // Split up the input file by line
+ // Note: IE JS engine incorrectly handles consecutive delimiters here when using RegExp split, so
+ // we have to string-based splitting instead and try to figure out the delimiting chars
+ var lines = contents.split("\n");
+ var markerPositions = ts.createMap();
+ var markers = [];
+ var ranges = [];
+ // Stuff related to the subfile we're parsing
+ var currentFileContent;
+ var currentFileName = fileName;
+ var currentFileSymlinks;
+ var currentFileOptions = {};
+ function nextFile() {
+ if (currentFileContent === undefined)
+ return;
+ var file = parseFileContent(currentFileContent, currentFileName, markerPositions, markers, ranges);
+ file.fileOptions = currentFileOptions;
+ file.symlinks = currentFileSymlinks;
+ // Store result file
+ files.push(file);
+ currentFileContent = undefined;
+ currentFileOptions = {};
+ currentFileName = fileName;
+ currentFileSymlinks = undefined;
+ }
+ for (var _i = 0, lines_5 = lines; _i < lines_5.length; _i++) {
+ var line = lines_5[_i];
+ if (line.length > 0 && line.charAt(line.length - 1) === "\r") {
+ line = line.substr(0, line.length - 1);
+ }
+ if (line.substr(0, 4) === "////") {
+ var text = line.substr(4);
+ currentFileContent = currentFileContent === undefined ? text : currentFileContent + "\n" + text;
+ }
+ else if (line.substr(0, 2) === "//") {
+ // Comment line, check for global/file @options and record them
+ var match = optionRegex.exec(line.substr(2));
+ if (match) {
+ var _a = match.slice(1), key = _a[0], value = _a[1];
+ if (!ts.contains(fileMetadataNames, key)) {
+ // Check if the match is already existed in the global options
+ if (globalOptions[key] !== undefined) {
+ throw new Error("Global option '" + key + "' already exists");
+ }
+ globalOptions[key] = value;
+ }
+ else {
+ switch (key) {
+ case "Filename" /* fileName */:
+ // Found an @FileName directive, if this is not the first then create a new subfile
+ nextFile();
+ currentFileName = ts.isRootedDiskPath(value) ? value : basePath + "/" + value;
+ currentFileOptions[key] = value;
+ break;
+ case "Symlink" /* symlink */:
+ currentFileSymlinks = ts.append(currentFileSymlinks, value);
+ break;
+ default:
+ // Add other fileMetadata flag
+ currentFileOptions[key] = value;
+ }
+ }
+ }
+ }
+ // Previously blank lines between fourslash content caused it to be considered as 2 files,
+ // Remove this behavior since it just causes errors now
+ else if (line !== "") {
+ // Code line, terminate current subfile if there is one
+ nextFile();
+ }
+ }
+ // @Filename is the only directive that can be used in a test that contains tsconfig.json file.
+ var config = ts.find(files, isConfig);
+ if (config) {
+ var directive = getNonFileNameOptionInFileList(files);
+ if (!directive) {
+ directive = getNonFileNameOptionInObject(globalOptions);
+ }
+ if (directive) {
+ throw Error("It is not allowed to use " + config.fileName + " along with directive '" + directive + "'");
+ }
+ }
+ return {
+ markerPositions: markerPositions,
+ markers: markers,
+ globalOptions: globalOptions,
+ files: files,
+ ranges: ranges
+ };
+ }
+ function isConfig(file) {
+ return Harness.getConfigNameFromFileName(file.fileName) !== undefined;
+ }
+ function getNonFileNameOptionInFileList(files) {
+ return ts.forEach(files, function (f) { return getNonFileNameOptionInObject(f.fileOptions); });
+ }
+ function getNonFileNameOptionInObject(optionObject) {
+ for (var option in optionObject) {
+ if (option !== "Filename" /* fileName */) {
+ return option;
+ }
+ }
+ return undefined;
+ }
+ var State;
+ (function (State) {
+ State[State["none"] = 0] = "none";
+ State[State["inSlashStarMarker"] = 1] = "inSlashStarMarker";
+ State[State["inObjectMarker"] = 2] = "inObjectMarker";
+ })(State || (State = {}));
+ function reportError(fileName, line, col, message) {
+ var errorMessage = fileName + "(" + line + "," + col + "): " + message;
+ throw new Error(errorMessage);
+ }
+ function recordObjectMarker(fileName, location, text, markerMap, markers) {
+ var markerValue;
+ try {
+ // Attempt to parse the marker value as JSON
+ markerValue = JSON.parse("{ " + text + " }");
+ }
+ catch (e) {
+ reportError(fileName, location.sourceLine, location.sourceColumn, "Unable to parse marker text " + e.message);
+ }
+ if (markerValue === undefined) {
+ reportError(fileName, location.sourceLine, location.sourceColumn, "Object markers can not be empty");
+ return undefined;
+ }
+ var marker = {
+ fileName: fileName,
+ position: location.position,
+ data: markerValue
+ };
+ // Object markers can be anonymous
+ if (markerValue.name) {
+ markerMap.set(markerValue.name, marker);
+ }
+ markers.push(marker);
+ return marker;
+ }
+ function recordMarker(fileName, location, name, markerMap, markers) {
+ var marker = {
+ fileName: fileName,
+ position: location.position
+ };
+ // Verify markers for uniqueness
+ if (markerMap.has(name)) {
+ var message = "Marker '" + name + "' is duplicated in the source file contents.";
+ reportError(marker.fileName, location.sourceLine, location.sourceColumn, message);
+ return undefined;
+ }
+ else {
+ markerMap.set(name, marker);
+ markers.push(marker);
+ return marker;
+ }
+ }
+ function parseFileContent(content, fileName, markerMap, markers, ranges) {
+ content = chompLeadingSpace(content);
+ // Any slash-star comment with a character not in this string is not a marker.
+ var validMarkerChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz$1234567890_";
+ /// The file content (minus metacharacters) so far
+ var output = "";
+ /// The current marker (or maybe multi-line comment?) we're parsing, possibly
+ var openMarker;
+ /// A stack of the open range markers that are still unclosed
+ var openRanges = [];
+ /// A list of ranges we've collected so far */
+ var localRanges = [];
+ /// The latest position of the start of an unflushed plain text area
+ var lastNormalCharPosition = 0;
+ /// The total number of metacharacters removed from the file (so far)
+ var difference = 0;
+ /// The fourslash file state object we are generating
+ var state = 0 /* none */;
+ /// Current position data
+ var line = 1;
+ var column = 1;
+ var flush = function (lastSafeCharIndex) {
+ output = output + content.substr(lastNormalCharPosition, lastSafeCharIndex === undefined ? undefined : lastSafeCharIndex - lastNormalCharPosition);
+ };
+ if (content.length > 0) {
+ var previousChar = content.charAt(0);
+ for (var i = 1; i < content.length; i++) {
+ var currentChar = content.charAt(i);
+ switch (state) {
+ case 0 /* none */:
+ if (previousChar === "[" && currentChar === "|") {
+ // found a range start
+ openRanges.push({
+ position: (i - 1) - difference,
+ sourcePosition: i - 1,
+ sourceLine: line,
+ sourceColumn: column,
+ });
+ // copy all text up to marker position
+ flush(i - 1);
+ lastNormalCharPosition = i + 1;
+ difference += 2;
+ }
+ else if (previousChar === "|" && currentChar === "]") {
+ // found a range end
+ var rangeStart = openRanges.pop();
+ if (!rangeStart) {
+ throw reportError(fileName, line, column, "Found range end with no matching start.");
+ }
+ var range = {
+ fileName: fileName,
+ pos: rangeStart.position,
+ end: (i - 1) - difference,
+ marker: rangeStart.marker
+ };
+ localRanges.push(range);
+ // copy all text up to range marker position
+ flush(i - 1);
+ lastNormalCharPosition = i + 1;
+ difference += 2;
+ }
+ else if (previousChar === "/" && currentChar === "*") {
+ // found a possible marker start
+ state = 1 /* inSlashStarMarker */;
+ openMarker = {
+ position: (i - 1) - difference,
+ sourcePosition: i - 1,
+ sourceLine: line,
+ sourceColumn: column,
+ };
+ }
+ else if (previousChar === "{" && currentChar === "|") {
+ // found an object marker start
+ state = 2 /* inObjectMarker */;
+ openMarker = {
+ position: (i - 1) - difference,
+ sourcePosition: i - 1,
+ sourceLine: line,
+ sourceColumn: column,
+ };
+ flush(i - 1);
+ }
+ break;
+ case 2 /* inObjectMarker */:
+ // Object markers are only ever terminated by |} and have no content restrictions
+ if (previousChar === "|" && currentChar === "}") {
+ // Record the marker
+ var objectMarkerNameText = content.substring(openMarker.sourcePosition + 2, i - 1).trim();
+ var marker = recordObjectMarker(fileName, openMarker, objectMarkerNameText, markerMap, markers);
+ if (openRanges.length > 0) {
+ openRanges[openRanges.length - 1].marker = marker;
+ }
+ // Set the current start to point to the end of the current marker to ignore its text
+ lastNormalCharPosition = i + 1;
+ difference += i + 1 - openMarker.sourcePosition;
+ // Reset the state
+ openMarker = undefined;
+ state = 0 /* none */;
+ }
+ break;
+ case 1 /* inSlashStarMarker */:
+ if (previousChar === "*" && currentChar === "/") {
+ // Record the marker
+ // start + 2 to ignore the */, -1 on the end to ignore the * (/ is next)
+ var markerNameText = content.substring(openMarker.sourcePosition + 2, i - 1).trim();
+ var marker = recordMarker(fileName, openMarker, markerNameText, markerMap, markers);
+ if (openRanges.length > 0) {
+ openRanges[openRanges.length - 1].marker = marker;
+ }
+ // Set the current start to point to the end of the current marker to ignore its text
+ flush(openMarker.sourcePosition);
+ lastNormalCharPosition = i + 1;
+ difference += i + 1 - openMarker.sourcePosition;
+ // Reset the state
+ openMarker = undefined;
+ state = 0 /* none */;
+ }
+ else if (validMarkerChars.indexOf(currentChar) < 0) {
+ if (currentChar === "*" && i < content.length - 1 && content.charAt(i + 1) === "/") {
+ // The marker is about to be closed, ignore the 'invalid' char
+ }
+ else {
+ // We've hit a non-valid marker character, so we were actually in a block comment
+ // Bail out the text we've gathered so far back into the output
+ flush(i);
+ lastNormalCharPosition = i;
+ openMarker = undefined;
+ state = 0 /* none */;
+ }
+ }
+ break;
+ }
+ if (currentChar === "\n" && previousChar === "\r") {
+ // Ignore trailing \n after a \r
+ continue;
+ }
+ else if (currentChar === "\n" || currentChar === "\r") {
+ line++;
+ column = 1;
+ continue;
+ }
+ column++;
+ previousChar = currentChar;
+ }
+ }
+ // Add the remaining text
+ flush(/*lastSafeCharIndex*/ undefined);
+ if (openRanges.length > 0) {
+ var openRange = openRanges[0];
+ reportError(fileName, openRange.sourceLine, openRange.sourceColumn, "Unterminated range.");
+ }
+ if (openMarker) {
+ reportError(fileName, openMarker.sourceLine, openMarker.sourceColumn, "Unterminated marker.");
+ }
+ // put ranges in the correct order
+ localRanges = localRanges.sort(function (a, b) { return a.pos < b.pos ? -1 : 1; });
+ localRanges.forEach(function (r) { ranges.push(r); });
+ return {
+ content: output,
+ fileOptions: {},
+ version: 0,
+ fileName: fileName,
+ };
+ }
+ function stringify(data, replacer) {
+ return JSON.stringify(data, replacer, 2);
+ }
+ /** Collects an array of unique outputs. */
+ function unique(inputs, getOutput) {
+ var set = ts.createMap();
+ for (var _i = 0, inputs_2 = inputs; _i < inputs_2.length; _i++) {
+ var input = inputs_2[_i];
+ var out = getOutput(input);
+ set.set(out, true);
+ }
+ return ts.arrayFrom(set.keys());
+ }
+ function toArray(x) {
+ return ts.isArray(x) ? x : [x];
+ }
+ function makeWhitespaceVisible(text) {
+ return text.replace(/ /g, "\u00B7").replace(/\r/g, "\u00B6").replace(/\n/g, "\u2193\n").replace(/\t/g, "\u2192\ ");
+ }
+ function showTextDiff(expected, actual) {
+ // Only show whitespace if the difference is whitespace-only.
+ if (differOnlyByWhitespace(expected, actual)) {
+ expected = makeWhitespaceVisible(expected);
+ actual = makeWhitespaceVisible(actual);
+ }
+ return "Expected:\n" + expected + "\nActual:\n" + actual;
+ }
+ function differOnlyByWhitespace(a, b) {
+ return stripWhitespace(a) === stripWhitespace(b);
+ }
+ function stripWhitespace(s) {
+ return s.replace(/\s/g, "");
+ }
+ function findDuplicatedElement(a, equal) {
+ for (var i = 0; i < a.length; i++) {
+ for (var j = i + 1; j < a.length; j++) {
+ if (equal(a[i], a[j])) {
+ return a[i];
+ }
+ }
+ }
+ }
+})(FourSlash || (FourSlash = {}));
+var FourSlashInterface;
+(function (FourSlashInterface) {
+ var Test = /** @class */ (function () {
+ function Test(state) {
+ this.state = state;
+ }
+ Test.prototype.markers = function () {
+ return this.state.getMarkers();
+ };
+ Test.prototype.markerNames = function () {
+ return this.state.getMarkerNames();
+ };
+ Test.prototype.marker = function (name) {
+ return this.state.getMarkerByName(name);
+ };
+ Test.prototype.markerName = function (m) {
+ return this.state.markerName(m);
+ };
+ Test.prototype.ranges = function () {
+ return this.state.getRanges();
+ };
+ Test.prototype.spans = function () {
+ return this.ranges().map(function (r) { return ts.createTextSpan(r.pos, r.end - r.pos); });
+ };
+ Test.prototype.rangesByText = function () {
+ return this.state.rangesByText();
+ };
+ Test.prototype.markerByName = function (s) {
+ return this.state.getMarkerByName(s);
+ };
+ Test.prototype.symbolsInScope = function (range) {
+ return this.state.symbolsInScope(range);
+ };
+ Test.prototype.setTypesRegistry = function (map) {
+ this.state.setTypesRegistry(map);
+ };
+ return Test;
+ }());
+ FourSlashInterface.Test = Test;
+ var GoTo = /** @class */ (function () {
+ function GoTo(state) {
+ this.state = state;
+ }
+ // Moves the caret to the specified marker,
+ // or the anonymous marker ('/**/') if no name
+ // is given
+ GoTo.prototype.marker = function (name) {
+ this.state.goToMarker(name);
+ };
+ GoTo.prototype.eachMarker = function (a, b) {
+ var _this = this;
+ var markers = typeof a === "function" ? this.state.getMarkers() : a.map(function (m) { return _this.state.getMarkerByName(m); });
+ this.state.goToEachMarker(markers, typeof a === "function" ? a : b);
+ };
+ GoTo.prototype.rangeStart = function (range) {
+ this.state.goToRangeStart(range);
+ };
+ GoTo.prototype.eachRange = function (action) {
+ this.state.goToEachRange(action);
+ };
+ GoTo.prototype.bof = function () {
+ this.state.goToBOF();
+ };
+ GoTo.prototype.eof = function () {
+ this.state.goToEOF();
+ };
+ GoTo.prototype.implementation = function () {
+ this.state.goToImplementation();
+ };
+ GoTo.prototype.position = function (position, fileNameOrIndex) {
+ if (fileNameOrIndex !== undefined) {
+ this.file(fileNameOrIndex);
+ }
+ this.state.goToPosition(position);
+ };
+ // Opens a file, given either its index as it
+ // appears in the test source, or its filename
+ // as specified in the test metadata
+ GoTo.prototype.file = function (indexOrName, content, scriptKindName) {
+ this.state.openFile(indexOrName, content, scriptKindName);
+ };
+ GoTo.prototype.select = function (startMarker, endMarker) {
+ this.state.select(startMarker, endMarker);
+ };
+ GoTo.prototype.selectRange = function (range) {
+ this.state.selectRange(range);
+ };
+ return GoTo;
+ }());
+ FourSlashInterface.GoTo = GoTo;
+ var VerifyNegatable = /** @class */ (function () {
+ function VerifyNegatable(state, negative) {
+ if (negative === void 0) { negative = false; }
+ this.state = state;
+ this.negative = negative;
+ this.allowedClassElementKeywords = [
+ "public",
+ "private",
+ "protected",
+ "static",
+ "abstract",
+ "readonly",
+ "get",
+ "set",
+ "constructor",
+ "async"
+ ];
+ this.allowedConstructorParameterKeywords = [
+ "public",
+ "private",
+ "protected",
+ "readonly",
+ ];
+ if (!negative) {
+ this.not = new VerifyNegatable(state, true);
+ }
+ }
+ VerifyNegatable.prototype.completionListCount = function (expectedCount) {
+ this.state.verifyCompletionListCount(expectedCount, this.negative);
+ };
+ // Verifies the completion list contains the specified symbol. The
+ // completion list is brought up if necessary
+ VerifyNegatable.prototype.completionListContains = function (entryId, text, documentation, kind, spanIndex, hasAction, options) {
+ if (typeof entryId === "string") {
+ entryId = { name: entryId, source: undefined };
+ }
+ if (this.negative) {
+ this.state.verifyCompletionListDoesNotContain(entryId, text, documentation, kind, spanIndex, options);
+ }
+ else {
+ this.state.verifyCompletionListContains(entryId, text, documentation, kind, spanIndex, hasAction, options);
+ }
+ };
+ // Verifies the completion list items count to be greater than the specified amount. The
+ // completion list is brought up if necessary
+ VerifyNegatable.prototype.completionListItemsCountIsGreaterThan = function (count) {
+ this.state.verifyCompletionListItemsCountIsGreaterThan(count, this.negative);
+ };
+ VerifyNegatable.prototype.assertHasRanges = function (ranges) {
+ assert(ranges.length !== 0, "Array of ranges is expected to be non-empty");
+ };
+ VerifyNegatable.prototype.completionListIsEmpty = function () {
+ this.state.verifyCompletionListIsEmpty(this.negative);
+ };
+ VerifyNegatable.prototype.completionListContainsClassElementKeywords = function () {
+ for (var _i = 0, _a = this.allowedClassElementKeywords; _i < _a.length; _i++) {
+ var keyword = _a[_i];
+ this.completionListContains(keyword, keyword, /*documentation*/ undefined, "keyword");
+ }
+ };
+ VerifyNegatable.prototype.completionListContainsConstructorParameterKeywords = function () {
+ for (var _i = 0, _a = this.allowedConstructorParameterKeywords; _i < _a.length; _i++) {
+ var keyword = _a[_i];
+ this.completionListContains(keyword, keyword, /*documentation*/ undefined, "keyword");
+ }
+ };
+ VerifyNegatable.prototype.completionListIsGlobal = function (expected) {
+ this.state.verifyCompletionListIsGlobal(expected);
+ };
+ VerifyNegatable.prototype.completionListAllowsNewIdentifier = function () {
+ this.state.verifyCompletionListAllowsNewIdentifier(this.negative);
+ };
+ VerifyNegatable.prototype.noSignatureHelp = function () {
+ var markers = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ markers[_i] = arguments[_i];
+ }
+ this.state.verifyNoSignatureHelp(markers);
+ };
+ VerifyNegatable.prototype.signatureHelp = function () {
+ var options = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ options[_i] = arguments[_i];
+ }
+ this.state.verifySignatureHelp(options);
+ };
+ VerifyNegatable.prototype.errorExistsBetweenMarkers = function (startMarker, endMarker) {
+ this.state.verifyErrorExistsBetweenMarkers(startMarker, endMarker, !this.negative);
+ };
+ VerifyNegatable.prototype.errorExistsAfterMarker = function (markerName) {
+ if (markerName === void 0) { markerName = ""; }
+ this.state.verifyErrorExistsAfterMarker(markerName, !this.negative, /*after*/ true);
+ };
+ VerifyNegatable.prototype.errorExistsBeforeMarker = function (markerName) {
+ if (markerName === void 0) { markerName = ""; }
+ this.state.verifyErrorExistsAfterMarker(markerName, !this.negative, /*after*/ false);
+ };
+ VerifyNegatable.prototype.quickInfoExists = function () {
+ this.state.verifyQuickInfoExists(this.negative);
+ };
+ VerifyNegatable.prototype.typeDefinitionCountIs = function (expectedCount) {
+ this.state.verifyTypeDefinitionsCount(this.negative, expectedCount);
+ };
+ VerifyNegatable.prototype.implementationListIsEmpty = function () {
+ this.state.verifyImplementationListIsEmpty(this.negative);
+ };
+ VerifyNegatable.prototype.isValidBraceCompletionAtPosition = function (openingBrace) {
+ this.state.verifyBraceCompletionAtPosition(this.negative, openingBrace);
+ };
+ VerifyNegatable.prototype.jsxClosingTag = function (map) {
+ this.state.verifyJsxClosingTag(map);
+ };
+ VerifyNegatable.prototype.isInCommentAtPosition = function (onlyMultiLineDiverges) {
+ this.state.verifySpanOfEnclosingComment(this.negative, onlyMultiLineDiverges);
+ };
+ VerifyNegatable.prototype.codeFix = function (options) {
+ this.state.verifyCodeFix(options);
+ };
+ VerifyNegatable.prototype.codeFixAvailable = function (options) {
+ this.state.verifyCodeFixAvailable(this.negative, options);
+ };
+ VerifyNegatable.prototype.applicableRefactorAvailableAtMarker = function (markerName) {
+ this.state.verifyApplicableRefactorAvailableAtMarker(this.negative, markerName);
+ };
+ VerifyNegatable.prototype.applicableRefactorAvailableForRange = function () {
+ this.state.verifyApplicableRefactorAvailableForRange(this.negative);
+ };
+ VerifyNegatable.prototype.refactor = function (options) {
+ this.state.verifyRefactor(options);
+ };
+ VerifyNegatable.prototype.refactorAvailable = function (name, actionName) {
+ this.state.verifyRefactorAvailable(this.negative, name, actionName);
+ };
+ return VerifyNegatable;
+ }());
+ FourSlashInterface.VerifyNegatable = VerifyNegatable;
+ var Verify = /** @class */ (function (_super) {
+ __extends(Verify, _super);
+ function Verify(state) {
+ return _super.call(this, state) || this;
+ }
+ Verify.prototype.completionsAt = function (markerName, completions, options) {
+ this.state.verifyCompletionsAt(markerName, completions, options);
+ };
+ Verify.prototype.completions = function () {
+ var optionsArray = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ optionsArray[_i] = arguments[_i];
+ }
+ for (var _a = 0, optionsArray_1 = optionsArray; _a < optionsArray_1.length; _a++) {
+ var options = optionsArray_1[_a];
+ this.state.verifyCompletions(options);
+ }
+ };
+ Verify.prototype.quickInfoIs = function (expectedText, expectedDocumentation) {
+ this.state.verifyQuickInfoString(expectedText, expectedDocumentation);
+ };
+ Verify.prototype.quickInfoAt = function (markerName, expectedText, expectedDocumentation) {
+ this.state.verifyQuickInfoAt(markerName, expectedText, expectedDocumentation);
+ };
+ Verify.prototype.quickInfos = function (namesAndTexts) {
+ this.state.verifyQuickInfos(namesAndTexts);
+ };
+ Verify.prototype.caretAtMarker = function (markerName) {
+ this.state.verifyCaretAtMarker(markerName);
+ };
+ Verify.prototype.indentationIs = function (numberOfSpaces) {
+ this.state.verifyIndentationAtCurrentPosition(numberOfSpaces);
+ };
+ Verify.prototype.indentationAtPositionIs = function (fileName, position, numberOfSpaces, indentStyle, baseIndentSize) {
+ if (indentStyle === void 0) { indentStyle = ts.IndentStyle.Smart; }
+ if (baseIndentSize === void 0) { baseIndentSize = 0; }
+ this.state.verifyIndentationAtPosition(fileName, position, numberOfSpaces, indentStyle, baseIndentSize);
+ };
+ Verify.prototype.textAtCaretIs = function (text) {
+ this.state.verifyTextAtCaretIs(text);
+ };
+ /**
+ * Compiles the current file and evaluates 'expr' in a context containing
+ * the emitted output, then compares (using ===) the result of that expression
+ * to 'value'. Do not use this function with external modules as it is not supported.
+ */
+ Verify.prototype.eval = function (expr, value) {
+ this.state.verifyEval(expr, value);
+ };
+ Verify.prototype.currentLineContentIs = function (text) {
+ this.state.verifyCurrentLineContent(text);
+ };
+ Verify.prototype.currentFileContentIs = function (text) {
+ this.state.verifyCurrentFileContent(text);
+ };
+ Verify.prototype.goToDefinitionIs = function (endMarkers) {
+ this.state.verifyGoToDefinitionIs(endMarkers);
+ };
+ Verify.prototype.goToDefinition = function (arg0, endMarkerName) {
+ this.state.verifyGoToDefinition(arg0, endMarkerName);
+ };
+ Verify.prototype.goToType = function (arg0, endMarkerName) {
+ this.state.verifyGoToType(arg0, endMarkerName);
+ };
+ Verify.prototype.goToDefinitionForMarkers = function () {
+ var markerNames = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ markerNames[_i] = arguments[_i];
+ }
+ this.state.verifyGoToDefinitionForMarkers(markerNames);
+ };
+ Verify.prototype.goToDefinitionName = function (name, containerName) {
+ this.state.verifyGoToDefinitionName(name, containerName);
+ };
+ Verify.prototype.verifyGetEmitOutputForCurrentFile = function (expected) {
+ this.state.verifyGetEmitOutputForCurrentFile(expected);
+ };
+ Verify.prototype.verifyGetEmitOutputContentsForCurrentFile = function (expected) {
+ this.state.verifyGetEmitOutputContentsForCurrentFile(expected);
+ };
+ Verify.prototype.symbolAtLocation = function (startRange) {
+ var declarationRanges = [];
+ for (var _i = 1; _i < arguments.length; _i++) {
+ declarationRanges[_i - 1] = arguments[_i];
+ }
+ this.state.verifySymbolAtLocation(startRange, declarationRanges);
+ };
+ Verify.prototype.typeOfSymbolAtLocation = function (range, symbol, expected) {
+ this.state.verifyTypeOfSymbolAtLocation(range, symbol, expected);
+ };
+ Verify.prototype.referenceGroups = function (starts, parts) {
+ this.state.verifyReferenceGroups(starts, parts);
+ };
+ Verify.prototype.noReferences = function (markerNameOrRange) {
+ this.state.verifyNoReferences(markerNameOrRange);
+ };
+ Verify.prototype.getReferencesForServerTest = function (expected) {
+ this.state.verifyGetReferencesForServerTest(expected);
+ };
+ Verify.prototype.singleReferenceGroup = function (definition, ranges) {
+ this.state.verifySingleReferenceGroup(definition, ranges);
+ };
+ Verify.prototype.findReferencesDefinitionDisplayPartsAtCaretAre = function (expected) {
+ this.state.verifyDisplayPartsOfReferencedSymbol(expected);
+ };
+ Verify.prototype.noErrors = function () {
+ this.state.verifyNoErrors();
+ };
+ Verify.prototype.numberOfErrorsInCurrentFile = function (expected) {
+ this.state.verifyNumberOfErrorsInCurrentFile(expected);
+ };
+ Verify.prototype.baselineCurrentFileBreakpointLocations = function () {
+ this.state.baselineCurrentFileBreakpointLocations();
+ };
+ Verify.prototype.baselineCurrentFileNameOrDottedNameSpans = function () {
+ this.state.baselineCurrentFileNameOrDottedNameSpans();
+ };
+ Verify.prototype.baselineGetEmitOutput = function (insertResultsIntoVfs) {
+ this.state.baselineGetEmitOutput(insertResultsIntoVfs);
+ };
+ Verify.prototype.baselineQuickInfo = function () {
+ this.state.baselineQuickInfo();
+ };
+ Verify.prototype.nameOrDottedNameSpanTextIs = function (text) {
+ this.state.verifyCurrentNameOrDottedNameSpanText(text);
+ };
+ Verify.prototype.outliningSpansInCurrentFile = function (spans, kind) {
+ this.state.verifyOutliningSpans(spans, kind);
+ };
+ Verify.prototype.todoCommentsInCurrentFile = function (descriptors) {
+ this.state.verifyTodoComments(descriptors, this.state.getRanges());
+ };
+ Verify.prototype.matchingBracePositionInCurrentFile = function (bracePosition, expectedMatchPosition) {
+ this.state.verifyMatchingBracePosition(bracePosition, expectedMatchPosition);
+ };
+ Verify.prototype.noMatchingBracePositionInCurrentFile = function (bracePosition) {
+ this.state.verifyNoMatchingBracePosition(bracePosition);
+ };
+ Verify.prototype.docCommentTemplateAt = function (marker, expectedOffset, expectedText) {
+ this.state.goToMarker(marker);
+ this.state.verifyDocCommentTemplate({ newText: expectedText.replace(/\r?\n/g, "\r\n"), caretOffset: expectedOffset });
+ };
+ Verify.prototype.noDocCommentTemplateAt = function (marker) {
+ this.state.goToMarker(marker);
+ this.state.verifyDocCommentTemplate(/*expected*/ undefined);
+ };
+ Verify.prototype.rangeAfterCodeFix = function (expectedText, includeWhiteSpace, errorCode, index) {
+ this.state.verifyRangeAfterCodeFix(expectedText, includeWhiteSpace, errorCode, index);
+ };
+ Verify.prototype.codeFixAll = function (options) {
+ this.state.verifyCodeFixAll(options);
+ };
+ Verify.prototype.fileAfterApplyingRefactorAtMarker = function (markerName, expectedContent, refactorNameToApply, actionName, formattingOptions) {
+ this.state.verifyFileAfterApplyingRefactorAtMarker(markerName, expectedContent, refactorNameToApply, actionName, formattingOptions);
+ };
+ Verify.prototype.rangeIs = function (expectedText, includeWhiteSpace) {
+ this.state.verifyRangeIs(expectedText, includeWhiteSpace);
+ };
+ Verify.prototype.getAndApplyCodeFix = function (errorCode, index) {
+ this.state.getAndApplyCodeActions(errorCode, index);
+ };
+ Verify.prototype.applyCodeActionFromCompletion = function (markerName, options) {
+ this.state.applyCodeActionFromCompletion(markerName, options);
+ };
+ Verify.prototype.importFixAtPosition = function (expectedTextArray, errorCode, preferences) {
+ this.state.verifyImportFixAtPosition(expectedTextArray, errorCode, preferences);
+ };
+ Verify.prototype.navigationBar = function (json, options) {
+ this.state.verifyNavigationBar(json, options);
+ };
+ Verify.prototype.navigationTree = function (json, options) {
+ this.state.verifyNavigationTree(json, options);
+ };
+ Verify.prototype.navigationItemsListCount = function (count, searchValue, matchKind, fileName) {
+ this.state.verifyNavigationItemsCount(count, searchValue, matchKind, fileName);
+ };
+ Verify.prototype.navigationItemsListContains = function (name, kind, searchValue, matchKind, fileName, parentName) {
+ this.state.verifyNavigationItemsListContains(name, kind, searchValue, matchKind, fileName, parentName);
+ };
+ Verify.prototype.occurrencesAtPositionContains = function (range, isWriteAccess) {
+ this.state.verifyOccurrencesAtPositionListContains(range.fileName, range.pos, range.end, isWriteAccess);
+ };
+ Verify.prototype.occurrencesAtPositionCount = function (expectedCount) {
+ this.state.verifyOccurrencesAtPositionListCount(expectedCount);
+ };
+ Verify.prototype.rangesAreOccurrences = function (isWriteAccess) {
+ this.state.verifyRangesAreOccurrences(isWriteAccess);
+ };
+ Verify.prototype.rangesWithSameTextAreRenameLocations = function () {
+ this.state.verifyRangesWithSameTextAreRenameLocations();
+ };
+ Verify.prototype.rangesAreRenameLocations = function (options) {
+ this.state.verifyRangesAreRenameLocations(options);
+ };
+ Verify.prototype.rangesAreDocumentHighlights = function (ranges, options) {
+ this.state.verifyRangesAreDocumentHighlights(ranges, options);
+ };
+ Verify.prototype.rangesWithSameTextAreDocumentHighlights = function () {
+ this.state.verifyRangesWithSameTextAreDocumentHighlights();
+ };
+ Verify.prototype.documentHighlightsOf = function (startRange, ranges, options) {
+ this.state.verifyDocumentHighlightsOf(startRange, ranges, options);
+ };
+ Verify.prototype.noDocumentHighlights = function (startRange) {
+ this.state.verifyNoDocumentHighlights(startRange);
+ };
+ Verify.prototype.completionEntryDetailIs = function (entryName, text, documentation, kind, tags) {
+ this.state.verifyCompletionEntryDetails(entryName, text, documentation, kind, tags);
+ };
+ /**
+ * This method *requires* a contiguous, complete, and ordered stream of classifications for a file.
+ */
+ Verify.prototype.syntacticClassificationsAre = function () {
+ var classifications = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ classifications[_i] = arguments[_i];
+ }
+ this.state.verifySyntacticClassifications(classifications);
+ };
+ /**
+ * This method *requires* an ordered stream of classifications for a file, and spans are highly recommended.
+ */
+ Verify.prototype.semanticClassificationsAre = function () {
+ var classifications = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ classifications[_i] = arguments[_i];
+ }
+ this.state.verifySemanticClassifications(classifications);
+ };
+ Verify.prototype.renameInfoSucceeded = function (displayName, fullDisplayName, kind, kindModifiers) {
+ this.state.verifyRenameInfoSucceeded(displayName, fullDisplayName, kind, kindModifiers);
+ };
+ Verify.prototype.renameInfoFailed = function (message) {
+ this.state.verifyRenameInfoFailed(message);
+ };
+ Verify.prototype.renameLocations = function (startRanges, options) {
+ this.state.verifyRenameLocations(startRanges, options);
+ };
+ Verify.prototype.verifyQuickInfoDisplayParts = function (kind, kindModifiers, textSpan, displayParts, documentation, tags) {
+ this.state.verifyQuickInfoDisplayParts(kind, kindModifiers, textSpan, displayParts, documentation, tags);
+ };
+ Verify.prototype.getSyntacticDiagnostics = function (expected) {
+ this.state.getSyntacticDiagnostics(expected);
+ };
+ Verify.prototype.getSemanticDiagnostics = function (expected) {
+ this.state.getSemanticDiagnostics(expected);
+ };
+ Verify.prototype.getSuggestionDiagnostics = function (expected) {
+ this.state.getSuggestionDiagnostics(expected);
+ };
+ Verify.prototype.ProjectInfo = function (expected) {
+ this.state.verifyProjectInfo(expected);
+ };
+ Verify.prototype.allRangesAppearInImplementationList = function (markerName) {
+ this.state.verifyRangesInImplementationList(markerName);
+ };
+ Verify.prototype.getEditsForFileRename = function (options) {
+ this.state.getEditsForFileRename(options);
+ };
+ Verify.prototype.moveToNewFile = function (options) {
+ this.state.moveToNewFile(options);
+ };
+ Verify.prototype.noMoveToNewFile = function () {
+ this.state.noMoveToNewFile();
+ };
+ return Verify;
+ }(VerifyNegatable));
+ FourSlashInterface.Verify = Verify;
+ var Edit = /** @class */ (function () {
+ function Edit(state) {
+ this.state = state;
+ }
+ Edit.prototype.backspace = function (count) {
+ this.state.deleteCharBehindMarker(count);
+ };
+ Edit.prototype.deleteAtCaret = function (times) {
+ this.state.deleteChar(times);
+ };
+ Edit.prototype.replace = function (start, length, text) {
+ this.state.replace(start, length, text);
+ };
+ Edit.prototype.paste = function (text) {
+ this.state.paste(text);
+ };
+ Edit.prototype.insert = function (text) {
+ this.insertLines(text);
+ };
+ Edit.prototype.insertLine = function (text) {
+ this.insertLines(text + "\n");
+ };
+ Edit.prototype.insertLines = function () {
+ var lines = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ lines[_i] = arguments[_i];
+ }
+ this.state.type(lines.join("\n"));
+ };
+ Edit.prototype.moveRight = function (count) {
+ this.state.moveCaretRight(count);
+ };
+ Edit.prototype.moveLeft = function (count) {
+ if (typeof count === "undefined") {
+ count = 1;
+ }
+ this.state.moveCaretRight(count * -1);
+ };
+ Edit.prototype.enableFormatting = function () {
+ this.state.enableFormatting = true;
+ };
+ Edit.prototype.disableFormatting = function () {
+ this.state.enableFormatting = false;
+ };
+ Edit.prototype.applyRefactor = function (options) {
+ this.state.applyRefactor(options);
+ };
+ return Edit;
+ }());
+ FourSlashInterface.Edit = Edit;
+ var Debug = /** @class */ (function () {
+ function Debug(state) {
+ this.state = state;
+ }
+ Debug.prototype.printCurrentParameterHelp = function () {
+ this.state.printCurrentParameterHelp();
+ };
+ Debug.prototype.printCurrentFileState = function () {
+ this.state.printCurrentFileState(/*showWhitespace*/ false, /*makeCaretVisible*/ true);
+ };
+ Debug.prototype.printCurrentFileStateWithWhitespace = function () {
+ this.state.printCurrentFileState(/*showWhitespace*/ true, /*makeCaretVisible*/ true);
+ };
+ Debug.prototype.printCurrentFileStateWithoutCaret = function () {
+ this.state.printCurrentFileState(/*showWhitespace*/ false, /*makeCaretVisible*/ false);
+ };
+ Debug.prototype.printCurrentQuickInfo = function () {
+ this.state.printCurrentQuickInfo();
+ };
+ Debug.prototype.printCurrentSignatureHelp = function () {
+ this.state.printCurrentSignatureHelp();
+ };
+ Debug.prototype.printCompletionListMembers = function (options) {
+ this.state.printCompletionListMembers(options);
+ };
+ Debug.prototype.printAvailableCodeFixes = function () {
+ this.state.printAvailableCodeFixes();
+ };
+ Debug.prototype.printBreakpointLocation = function (pos) {
+ this.state.printBreakpointLocation(pos);
+ };
+ Debug.prototype.printBreakpointAtCurrentLocation = function () {
+ this.state.printBreakpointAtCurrentLocation();
+ };
+ Debug.prototype.printNameOrDottedNameSpans = function (pos) {
+ this.state.printNameOrDottedNameSpans(pos);
+ };
+ Debug.prototype.printErrorList = function () {
+ this.state.printErrorList();
+ };
+ Debug.prototype.printNavigationItems = function (searchValue) {
+ if (searchValue === void 0) { searchValue = ".*"; }
+ this.state.printNavigationItems(searchValue);
+ };
+ Debug.prototype.printNavigationBar = function () {
+ this.state.printNavigationBar();
+ };
+ Debug.prototype.printContext = function () {
+ this.state.printContext();
+ };
+ Debug.prototype.printOutliningSpans = function () {
+ this.state.printOutliningSpans();
+ };
+ return Debug;
+ }());
+ FourSlashInterface.Debug = Debug;
+ var Format = /** @class */ (function () {
+ function Format(state) {
+ this.state = state;
+ }
+ Format.prototype.document = function () {
+ this.state.formatDocument();
+ };
+ Format.prototype.copyFormatOptions = function () {
+ return this.state.copyFormatOptions();
+ };
+ Format.prototype.setFormatOptions = function (options) {
+ return this.state.setFormatOptions(options);
+ };
+ Format.prototype.selection = function (startMarker, endMarker) {
+ this.state.formatSelection(this.state.getMarkerByName(startMarker).position, this.state.getMarkerByName(endMarker).position);
+ };
+ Format.prototype.onType = function (posMarker, key) {
+ this.state.formatOnType(this.state.getMarkerByName(posMarker).position, key);
+ };
+ Format.prototype.setOption = function (name, value) {
+ this.state.formatCodeSettings[name] = value;
+ };
+ return Format;
+ }());
+ FourSlashInterface.Format = Format;
+ var Cancellation = /** @class */ (function () {
+ function Cancellation(state) {
+ this.state = state;
+ }
+ Cancellation.prototype.resetCancelled = function () {
+ this.state.resetCancelled();
+ };
+ Cancellation.prototype.setCancelled = function (numberOfCalls) {
+ if (numberOfCalls === void 0) { numberOfCalls = 0; }
+ this.state.setCancelled(numberOfCalls);
+ };
+ return Cancellation;
+ }());
+ FourSlashInterface.Cancellation = Cancellation;
+ var Classification;
+ (function (Classification) {
+ function comment(text, position) {
+ return getClassification("comment" /* comment */, text, position);
+ }
+ Classification.comment = comment;
+ function identifier(text, position) {
+ return getClassification("identifier" /* identifier */, text, position);
+ }
+ Classification.identifier = identifier;
+ function keyword(text, position) {
+ return getClassification("keyword" /* keyword */, text, position);
+ }
+ Classification.keyword = keyword;
+ function numericLiteral(text, position) {
+ return getClassification("number" /* numericLiteral */, text, position);
+ }
+ Classification.numericLiteral = numericLiteral;
+ function operator(text, position) {
+ return getClassification("operator" /* operator */, text, position);
+ }
+ Classification.operator = operator;
+ function stringLiteral(text, position) {
+ return getClassification("string" /* stringLiteral */, text, position);
+ }
+ Classification.stringLiteral = stringLiteral;
+ function whiteSpace(text, position) {
+ return getClassification("whitespace" /* whiteSpace */, text, position);
+ }
+ Classification.whiteSpace = whiteSpace;
+ function text(text, position) {
+ return getClassification("text" /* text */, text, position);
+ }
+ Classification.text = text;
+ function punctuation(text, position) {
+ return getClassification("punctuation" /* punctuation */, text, position);
+ }
+ Classification.punctuation = punctuation;
+ function docCommentTagName(text, position) {
+ return getClassification("doc comment tag name" /* docCommentTagName */, text, position);
+ }
+ Classification.docCommentTagName = docCommentTagName;
+ function className(text, position) {
+ return getClassification("class name" /* className */, text, position);
+ }
+ Classification.className = className;
+ function enumName(text, position) {
+ return getClassification("enum name" /* enumName */, text, position);
+ }
+ Classification.enumName = enumName;
+ function interfaceName(text, position) {
+ return getClassification("interface name" /* interfaceName */, text, position);
+ }
+ Classification.interfaceName = interfaceName;
+ function moduleName(text, position) {
+ return getClassification("module name" /* moduleName */, text, position);
+ }
+ Classification.moduleName = moduleName;
+ function typeParameterName(text, position) {
+ return getClassification("type parameter name" /* typeParameterName */, text, position);
+ }
+ Classification.typeParameterName = typeParameterName;
+ function parameterName(text, position) {
+ return getClassification("parameter name" /* parameterName */, text, position);
+ }
+ Classification.parameterName = parameterName;
+ function typeAliasName(text, position) {
+ return getClassification("type alias name" /* typeAliasName */, text, position);
+ }
+ Classification.typeAliasName = typeAliasName;
+ function jsxOpenTagName(text, position) {
+ return getClassification("jsx open tag name" /* jsxOpenTagName */, text, position);
+ }
+ Classification.jsxOpenTagName = jsxOpenTagName;
+ function jsxCloseTagName(text, position) {
+ return getClassification("jsx close tag name" /* jsxCloseTagName */, text, position);
+ }
+ Classification.jsxCloseTagName = jsxCloseTagName;
+ function jsxSelfClosingTagName(text, position) {
+ return getClassification("jsx self closing tag name" /* jsxSelfClosingTagName */, text, position);
+ }
+ Classification.jsxSelfClosingTagName = jsxSelfClosingTagName;
+ function jsxAttribute(text, position) {
+ return getClassification("jsx attribute" /* jsxAttribute */, text, position);
+ }
+ Classification.jsxAttribute = jsxAttribute;
+ function jsxText(text, position) {
+ return getClassification("jsx text" /* jsxText */, text, position);
+ }
+ Classification.jsxText = jsxText;
+ function jsxAttributeStringLiteralValue(text, position) {
+ return getClassification("jsx attribute string literal value" /* jsxAttributeStringLiteralValue */, text, position);
+ }
+ Classification.jsxAttributeStringLiteralValue = jsxAttributeStringLiteralValue;
+ function getClassification(classificationType, text, position) {
+ var textSpan = position === undefined ? undefined : { start: position, end: position + text.length };
+ return { classificationType: classificationType, text: text, textSpan: textSpan };
+ }
+ })(Classification = FourSlashInterface.Classification || (FourSlashInterface.Classification = {}));
+})(FourSlashInterface || (FourSlashInterface = {}));
+var TypeWriterWalker = /** @class */ (function () {
+ function TypeWriterWalker(program, fullTypeCheck) {
+ this.program = program;
+ // Consider getting both the diagnostics checker and the non-diagnostics checker to verify
+ // they are consistent.
+ this.checker = fullTypeCheck
+ ? program.getDiagnosticsProducingTypeChecker()
+ : program.getTypeChecker();
+ }
+ TypeWriterWalker.prototype.getSymbols = function (fileName) {
+ var _a, sourceFile, gen, _b, done, value;
+ return __generator(this, function (_c) {
+ switch (_c.label) {
+ case 0:
+ sourceFile = this.program.getSourceFile(fileName);
+ this.currentSourceFile = sourceFile;
+ gen = this.visitNode(sourceFile, /*isSymbolWalk*/ true);
+ _b = gen.next(), done = _b.done, value = _b.value;
+ _c.label = 1;
+ case 1:
+ if (!!done) return [3 /*break*/, 4];
+ return [4 /*yield*/, value];
+ case 2:
+ _c.sent();
+ _c.label = 3;
+ case 3:
+ _a = gen.next(), done = _a.done, value = _a.value, _a;
+ return [3 /*break*/, 1];
+ case 4: return [2 /*return*/];
+ }
+ });
+ };
+ TypeWriterWalker.prototype.getTypes = function (fileName) {
+ var _a, sourceFile, gen, _b, done, value;
+ return __generator(this, function (_c) {
+ switch (_c.label) {
+ case 0:
+ sourceFile = this.program.getSourceFile(fileName);
+ this.currentSourceFile = sourceFile;
+ gen = this.visitNode(sourceFile, /*isSymbolWalk*/ false);
+ _b = gen.next(), done = _b.done, value = _b.value;
+ _c.label = 1;
+ case 1:
+ if (!!done) return [3 /*break*/, 4];
+ return [4 /*yield*/, value];
+ case 2:
+ _c.sent();
+ _c.label = 3;
+ case 3:
+ _a = gen.next(), done = _a.done, value = _a.value, _a;
+ return [3 /*break*/, 1];
+ case 4: return [2 /*return*/];
+ }
+ });
+ };
+ TypeWriterWalker.prototype.visitNode = function (node, isSymbolWalk) {
+ var _a, result, children, _i, children_1, child, gen, _b, done, value;
+ return __generator(this, function (_c) {
+ switch (_c.label) {
+ case 0:
+ if (!(ts.isExpressionNode(node) || node.kind === 71 /* Identifier */ || ts.isDeclarationName(node))) return [3 /*break*/, 2];
+ result = this.writeTypeOrSymbol(node, isSymbolWalk);
+ if (!result) return [3 /*break*/, 2];
+ return [4 /*yield*/, result];
+ case 1:
+ _c.sent();
+ _c.label = 2;
+ case 2:
+ children = [];
+ ts.forEachChild(node, function (child) { return void children.push(child); });
+ _i = 0, children_1 = children;
+ _c.label = 3;
+ case 3:
+ if (!(_i < children_1.length)) return [3 /*break*/, 8];
+ child = children_1[_i];
+ gen = this.visitNode(child, isSymbolWalk);
+ _b = gen.next(), done = _b.done, value = _b.value;
+ _c.label = 4;
+ case 4:
+ if (!!done) return [3 /*break*/, 7];
+ return [4 /*yield*/, value];
+ case 5:
+ _c.sent();
+ _c.label = 6;
+ case 6:
+ _a = gen.next(), done = _a.done, value = _a.value, _a;
+ return [3 /*break*/, 4];
+ case 7:
+ _i++;
+ return [3 /*break*/, 3];
+ case 8: return [2 /*return*/];
+ }
+ });
+ };
+ TypeWriterWalker.prototype.writeTypeOrSymbol = function (node, isSymbolWalk) {
+ var actualPos = ts.skipTrivia(this.currentSourceFile.text, node.pos);
+ var lineAndCharacter = this.currentSourceFile.getLineAndCharacterOfPosition(actualPos);
+ var sourceText = ts.getSourceTextOfNodeFromSourceFile(this.currentSourceFile, node);
+ if (!isSymbolWalk) {
+ // Workaround to ensure we output 'C' instead of 'typeof C' for base class expressions
+ // let type = this.checker.getTypeAtLocation(node);
+ var type = node.parent && ts.isExpressionWithTypeArgumentsInClassExtendsClause(node.parent) && this.checker.getTypeAtLocation(node.parent) || this.checker.getTypeAtLocation(node);
+ var typeString = type ? this.checker.typeToString(type, node.parent, 1 /* NoTruncation */ | 1048576 /* AllowUniqueESSymbolType */) : "No type information available!";
+ return {
+ line: lineAndCharacter.line,
+ syntaxKind: node.kind,
+ sourceText: sourceText,
+ type: typeString
+ };
+ }
+ var symbol = this.checker.getSymbolAtLocation(node);
+ if (!symbol) {
+ return;
+ }
+ var symbolString = "Symbol(" + this.checker.symbolToString(symbol, node.parent);
+ if (symbol.declarations) {
+ var count = 0;
+ for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) {
+ var declaration = _a[_i];
+ if (count >= 5) {
+ symbolString += " ... and " + (symbol.declarations.length - count) + " more";
+ break;
+ }
+ count++;
+ symbolString += ", ";
+ if (declaration.__symbolTestOutputCache) {
+ symbolString += declaration.__symbolTestOutputCache;
+ continue;
+ }
+ var declSourceFile = declaration.getSourceFile();
+ var declLineAndCharacter = declSourceFile.getLineAndCharacterOfPosition(declaration.pos);
+ var fileName = ts.getBaseFileName(declSourceFile.fileName);
+ var isLibFile = /lib(.*)\.d\.ts/i.test(fileName);
+ var declText = "Decl(" + fileName + ", " + (isLibFile ? "--" : declLineAndCharacter.line) + ", " + (isLibFile ? "--" : declLineAndCharacter.character) + ")";
+ symbolString += declText;
+ declaration.__symbolTestOutputCache = declText;
+ }
+ }
+ symbolString += ")";
+ return {
+ line: lineAndCharacter.line,
+ syntaxKind: node.kind,
+ sourceText: sourceText,
+ symbol: symbolString
+ };
+ };
+ return TypeWriterWalker;
+}());
+var Playback;
+(function (Playback) {
+ var recordLog;
+ var replayLog;
+ var replayFilesRead;
+ var recordLogFileNameBase = "";
+ function memoize(func) {
+ var lookup = {};
+ var run = (function (s) {
+ if (lookup.hasOwnProperty(s))
+ return lookup[s];
+ return lookup[s] = func(s);
+ });
+ run.reset = function () {
+ lookup = undefined; // TODO: GH#18217
+ };
+ return run;
+ }
+ function createEmptyLog() {
+ return {
+ timestamp: (new Date()).toString(),
+ arguments: [],
+ currentDirectory: "",
+ filesRead: [],
+ directoriesRead: [],
+ filesWritten: [],
+ filesDeleted: [],
+ filesAppended: [],
+ fileExists: [],
+ filesFound: [],
+ dirs: [],
+ dirExists: [],
+ dirsCreated: [],
+ pathsResolved: [],
+ executingPath: ""
+ };
+ }
+ function newStyleLogIntoOldStyleLog(log, host, baseName) {
+ for (var _i = 0, _a = log.filesAppended; _i < _a.length; _i++) {
+ var file = _a[_i];
+ if (file.contentsPath) {
+ file.contents = host.readFile(ts.combinePaths(baseName, file.contentsPath));
+ delete file.contentsPath;
+ }
+ }
+ for (var _b = 0, _c = log.filesWritten; _b < _c.length; _b++) {
+ var file = _c[_b];
+ if (file.contentsPath) {
+ file.contents = host.readFile(ts.combinePaths(baseName, file.contentsPath));
+ delete file.contentsPath;
+ }
+ }
+ for (var _d = 0, _e = log.filesRead; _d < _e.length; _d++) {
+ var file = _e[_d];
+ var result = file.result; // TODO: GH#18217
+ if (result.contentsPath) {
+ // `readFile` strips away a BOM (and actually reinerprets the file contents according to the correct encoding)
+ // - but this has the unfortunate sideeffect of removing the BOM from any outputs based on the file, so we readd it here.
+ result.contents = (result.bom || "") + host.readFile(ts.combinePaths(baseName, result.contentsPath));
+ delete result.contentsPath;
+ }
+ }
+ return log;
+ }
+ Playback.newStyleLogIntoOldStyleLog = newStyleLogIntoOldStyleLog;
+ var canonicalizeForHarness = ts.createGetCanonicalFileName(/*caseSensitive*/ false); // This is done so tests work on windows _and_ linux
+ function sanitizeTestFilePath(name) {
+ var path = ts.toPath(ts.normalizeSlashes(name.replace(/[\^<>:"|?*%]/g, "_")).replace(/\.\.\//g, "__dotdot/"), "", canonicalizeForHarness);
+ if (ts.startsWith(path, "/")) {
+ return path.substring(1);
+ }
+ return path;
+ }
+ function oldStyleLogIntoNewStyleLog(log, writeFile, baseTestName) {
+ if (log.filesAppended) {
+ for (var _i = 0, _a = log.filesAppended; _i < _a.length; _i++) {
+ var file = _a[_i];
+ if (file.contents !== undefined) {
+ file.contentsPath = ts.combinePaths("appended", sanitizeTestFilePath(file.path));
+ writeFile(ts.combinePaths(baseTestName, file.contentsPath), file.contents);
+ delete file.contents;
+ }
+ }
+ }
+ if (log.filesWritten) {
+ for (var _b = 0, _c = log.filesWritten; _b < _c.length; _b++) {
+ var file = _c[_b];
+ if (file.contents !== undefined) {
+ file.contentsPath = ts.combinePaths("written", sanitizeTestFilePath(file.path));
+ writeFile(ts.combinePaths(baseTestName, file.contentsPath), file.contents);
+ delete file.contents;
+ }
+ }
+ }
+ if (log.filesRead) {
+ for (var _d = 0, _e = log.filesRead; _d < _e.length; _d++) {
+ var file = _e[_d];
+ var result = file.result; // TODO: GH#18217
+ var contents = result.contents;
+ if (contents !== undefined) {
+ result.contentsPath = ts.combinePaths("read", sanitizeTestFilePath(file.path));
+ writeFile(ts.combinePaths(baseTestName, result.contentsPath), contents);
+ var len = contents.length;
+ if (len >= 2 && contents.charCodeAt(0) === 0xfeff) {
+ result.bom = "\ufeff";
+ }
+ if (len >= 2 && contents.charCodeAt(0) === 0xfffe) {
+ result.bom = "\ufffe";
+ }
+ if (len >= 3 && contents.charCodeAt(0) === 0xefbb && contents.charCodeAt(1) === 0xbf) {
+ result.bom = "\uefbb\xbf";
+ }
+ delete result.contents;
+ }
+ }
+ }
+ return log;
+ }
+ Playback.oldStyleLogIntoNewStyleLog = oldStyleLogIntoNewStyleLog;
+ function initWrapper(wrapper, underlying) {
+ ts.forEach(Object.keys(underlying), function (prop) {
+ wrapper[prop] = underlying[prop];
+ });
+ wrapper.startReplayFromString = function (logString) {
+ wrapper.startReplayFromData(JSON.parse(logString));
+ };
+ wrapper.startReplayFromData = function (log) {
+ replayLog = log;
+ // Remove non-found files from the log (shouldn't really need them, but we still record them for diagnostic purposes)
+ replayLog.filesRead = replayLog.filesRead.filter(function (f) { return f.result.contents !== undefined; });
+ replayFilesRead = ts.createMap();
+ for (var _i = 0, _a = replayLog.filesRead; _i < _a.length; _i++) {
+ var file = _a[_i];
+ replayFilesRead.set(ts.normalizeSlashes(file.path).toLowerCase(), file);
+ }
+ };
+ wrapper.endReplay = function () {
+ replayLog = undefined;
+ replayFilesRead = undefined;
+ };
+ wrapper.startRecord = function (fileNameBase) {
+ recordLogFileNameBase = fileNameBase;
+ recordLog = createEmptyLog();
+ recordLog.useCaseSensitiveFileNames = typeof underlying.useCaseSensitiveFileNames === "function" ? underlying.useCaseSensitiveFileNames() : underlying.useCaseSensitiveFileNames;
+ if (typeof underlying.args !== "function") {
+ recordLog.arguments = underlying.args;
+ }
+ };
+ wrapper.startReplayFromFile = function (logFn) {
+ wrapper.startReplayFromString(underlying.readFile(logFn));
+ };
+ wrapper.endRecord = function () {
+ if (recordLog !== undefined) {
+ var i_1 = 0;
+ var getBase = function () { return recordLogFileNameBase + i_1; };
+ while (underlying.fileExists(ts.combinePaths(getBase(), "test.json")))
+ i_1++;
+ var newLog = oldStyleLogIntoNewStyleLog(recordLog, function (path, str) { return underlying.writeFile(path, str); }, getBase());
+ underlying.writeFile(ts.combinePaths(getBase(), "test.json"), JSON.stringify(newLog, null, 4)); // tslint:disable-line:no-null-keyword
+ var syntheticTsconfig = generateTsconfig(newLog);
+ if (syntheticTsconfig) {
+ underlying.writeFile(ts.combinePaths(getBase(), "tsconfig.json"), JSON.stringify(syntheticTsconfig, null, 4)); // tslint:disable-line:no-null-keyword
+ }
+ recordLog = undefined;
+ }
+ };
+ function generateTsconfig(newLog) {
+ if (newLog.filesRead.some(function (file) { return /tsconfig.+json$/.test(file.path); })) {
+ return;
+ }
+ var files = [];
+ for (var _i = 0, _a = newLog.filesRead; _i < _a.length; _i++) {
+ var file = _a[_i];
+ var result = file.result;
+ if (result.contentsPath &&
+ Harness.isDefaultLibraryFile(result.contentsPath) &&
+ /\.[tj]s$/.test(result.contentsPath)) {
+ files.push(result.contentsPath);
+ }
+ }
+ return { compilerOptions: ts.parseCommandLine(newLog.arguments).options, files: files };
+ }
+ wrapper.fileExists = recordReplay(wrapper.fileExists, underlying)(function (path) { return callAndRecord(underlying.fileExists(path), recordLog.fileExists, { path: path }); }, memoize(function (path) {
+ // If we read from the file, it must exist
+ if (findFileByPath(path, /*throwFileNotFoundError*/ false)) {
+ return true;
+ }
+ else {
+ return findResultByFields(replayLog.fileExists, { path: path }, /*defaultValue*/ false);
+ }
+ }));
+ wrapper.getExecutingFilePath = function () {
+ if (replayLog !== undefined) {
+ return replayLog.executingPath;
+ }
+ else if (recordLog !== undefined) {
+ return recordLog.executingPath = underlying.getExecutingFilePath();
+ }
+ else {
+ return underlying.getExecutingFilePath();
+ }
+ };
+ wrapper.getCurrentDirectory = function () {
+ if (replayLog !== undefined) {
+ return replayLog.currentDirectory || "";
+ }
+ else if (recordLog !== undefined) {
+ return recordLog.currentDirectory = underlying.getCurrentDirectory();
+ }
+ else {
+ return underlying.getCurrentDirectory();
+ }
+ };
+ wrapper.resolvePath = recordReplay(wrapper.resolvePath, underlying)(function (path) { return callAndRecord(underlying.resolvePath(path), recordLog.pathsResolved, { path: path }); }, memoize(function (path) { return findResultByFields(replayLog.pathsResolved, { path: path }, !ts.isRootedDiskPath(ts.normalizeSlashes(path)) && replayLog.currentDirectory ? replayLog.currentDirectory + "/" + path : ts.normalizeSlashes(path)); }));
+ wrapper.readFile = recordReplay(wrapper.readFile, underlying)(function (path) {
+ var result = underlying.readFile(path);
+ var logEntry = { path: path, codepage: 0, result: { contents: result, codepage: 0 } };
+ recordLog.filesRead.push(logEntry);
+ return result;
+ }, memoize(function (path) { return findFileByPath(path, /*throwFileNotFoundError*/ true).contents; }));
+ wrapper.readDirectory = recordReplay(wrapper.readDirectory, underlying)(function (path, extensions, exclude, include, depth) {
+ var result = underlying.readDirectory(path, extensions, exclude, include, depth);
+ recordLog.directoriesRead.push({ path: path, extensions: extensions, exclude: exclude, include: include, depth: depth, result: result });
+ return result;
+ }, function (path) {
+ // Because extensions is an array of all allowed extension, we will want to merge each of the replayLog.directoriesRead into one
+ // if each of the directoriesRead has matched path with the given path (directory with same path but different extension will considered
+ // different entry).
+ // TODO (yuisu): We can certainly remove these once we recapture the RWC using new API
+ var normalizedPath = ts.normalizePath(path).toLowerCase();
+ return ts.flatMap(replayLog.directoriesRead, function (directory) {
+ if (ts.normalizeSlashes(directory.path).toLowerCase() === normalizedPath) {
+ return directory.result;
+ }
+ });
+ });
+ wrapper.writeFile = recordReplay(wrapper.writeFile, underlying)(function (path, contents) { return callAndRecord(underlying.writeFile(path, contents), recordLog.filesWritten, { path: path, contents: contents, bom: false }); }, function () { return noOpReplay("writeFile"); });
+ wrapper.exit = function (exitCode) {
+ if (recordLog !== undefined) {
+ wrapper.endRecord();
+ }
+ underlying.exit(exitCode);
+ };
+ wrapper.useCaseSensitiveFileNames = function () {
+ if (replayLog !== undefined) {
+ return !!replayLog.useCaseSensitiveFileNames;
+ }
+ return typeof underlying.useCaseSensitiveFileNames === "function" ? underlying.useCaseSensitiveFileNames() : underlying.useCaseSensitiveFileNames;
+ };
+ }
+ function recordReplay(original, underlying) {
+ function createWrapper(record, replay) {
+ // tslint:disable-next-line only-arrow-functions
+ return (function () {
+ if (replayLog !== undefined) {
+ return replay.apply(undefined, arguments);
+ }
+ else if (recordLog !== undefined) {
+ return record.apply(undefined, arguments);
+ }
+ else {
+ return original.apply(underlying, arguments);
+ }
+ });
+ }
+ return createWrapper;
+ }
+ function callAndRecord(underlyingResult, logArray, logEntry) {
+ if (underlyingResult !== undefined) {
+ logEntry.result = underlyingResult;
+ }
+ logArray.push(logEntry);
+ return underlyingResult;
+ }
+ function findResultByFields(logArray, expectedFields, defaultValue) {
+ var predicate = function (entry) {
+ return Object.getOwnPropertyNames(expectedFields).every(function (name) { return entry[name] === expectedFields[name]; });
+ };
+ var results = logArray.filter(function (entry) { return predicate(entry); });
+ if (results.length === 0) {
+ if (defaultValue !== undefined) {
+ return defaultValue;
+ }
+ else {
+ throw new Error("No matching result in log array for: " + JSON.stringify(expectedFields));
+ }
+ }
+ return results[0].result;
+ }
+ function findFileByPath(expectedPath, throwFileNotFoundError) {
+ var normalizedName = ts.normalizePath(expectedPath).toLowerCase();
+ // Try to find the result through normal fileName
+ var result = replayFilesRead.get(normalizedName);
+ if (result) {
+ return result.result;
+ }
+ // If we got here, we didn't find a match
+ if (throwFileNotFoundError) {
+ throw new Error("No matching result in log array for path: " + expectedPath);
+ }
+ else {
+ return undefined;
+ }
+ }
+ function noOpReplay(_name) {
+ // console.log("Swallowed write operation during replay: " + name);
+ }
+ function wrapIO(underlying) {
+ var wrapper = {};
+ initWrapper(wrapper, underlying);
+ wrapper.directoryName = notSupported;
+ wrapper.createDirectory = notSupported;
+ wrapper.directoryExists = notSupported;
+ wrapper.deleteFile = notSupported;
+ wrapper.listFiles = notSupported;
+ return wrapper;
+ function notSupported() {
+ throw new Error("NotSupported");
+ }
+ }
+ Playback.wrapIO = wrapIO;
+ function wrapSystem(underlying) {
+ var wrapper = {};
+ initWrapper(wrapper, underlying);
+ return wrapper;
+ }
+ Playback.wrapSystem = wrapSystem;
+})(Playback || (Playback = {}));
+//# sourceMappingURL=harness.js.map
\ No newline at end of file
diff --git a/src/built/local/harness.js.map b/src/built/local/harness.js.map
new file mode 100644
index 00000000000..8bae7bf1b91
--- /dev/null
+++ b/src/built/local/harness.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"harness.js","sourceRoot":"","sources":["../../harness/collections.ts","../../harness/utils.ts","../../harness/documents.ts","../../harness/vpath.ts","../../harness/vfs.ts","../../harness/compiler.ts","../../harness/evaluator.ts","../../harness/fakes.ts","../../harness/client.ts","../../harness/runnerbase.ts","../../harness/sourceMapRecorder.ts","../../harness/harness.ts","../../harness/harnessLanguageService.ts","../../harness/virtualFileSystemWithWatch.ts","../../harness/fourslash.ts","../../harness/typeWriter.ts","../../harness/loggedIO.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/src/server/cancellationToken/cancellationToken.ts b/src/cancellationToken/cancellationToken.ts
similarity index 100%
rename from src/server/cancellationToken/cancellationToken.ts
rename to src/cancellationToken/cancellationToken.ts
diff --git a/src/server/cancellationToken/tsconfig.json b/src/cancellationToken/tsconfig.json
similarity index 62%
rename from src/server/cancellationToken/tsconfig.json
rename to src/cancellationToken/tsconfig.json
index 604b92b4cf2..45795320796 100644
--- a/src/server/cancellationToken/tsconfig.json
+++ b/src/cancellationToken/tsconfig.json
@@ -1,6 +1,9 @@
{
- "extends": "../../tsconfig-base",
+ "extends": "../tsconfig-base",
"compilerOptions": {
+ "outDir": "../built/local/",
+ "composite": false,
+ "declaration": false,
"removeComments": true,
"module": "commonjs",
"types": [
diff --git a/src/compiler/resolutionCache.ts b/src/compiler/resolutionCache.ts
index 3f848cfbc29..4614c3bede4 100644
--- a/src/compiler/resolutionCache.ts
+++ b/src/compiler/resolutionCache.ts
@@ -6,7 +6,7 @@ namespace ts {
finishRecordingFilesWithChangedResolutions(): Path[] | undefined;
resolveModuleNames(moduleNames: string[], containingFile: string, reusedNames: string[] | undefined): ResolvedModuleFull[];
- getResolvedModuleWithFailedLookupLocationsFromCache(moduleName: string, containingFile: string): ResolvedModuleWithFailedLookupLocations | undefined;
+ getResolvedModuleWithFailedLookupLocationsFromCache(moduleName: string, containingFile: string): CachedResolvedModuleWithFailedLookupLocations | undefined;
resolveTypeReferenceDirectives(typeDirectiveNames: string[], containingFile: string): ResolvedTypeReferenceDirective[];
invalidateResolutionOfFile(filePath: Path): void;
@@ -33,7 +33,7 @@ namespace ts {
resolvedFileName: string | undefined;
}
- interface ResolvedModuleWithFailedLookupLocations extends ts.ResolvedModuleWithFailedLookupLocations, ResolutionWithFailedLookupLocations {
+ interface CachedResolvedModuleWithFailedLookupLocations extends ts.ResolvedModuleWithFailedLookupLocations, ResolutionWithFailedLookupLocations {
}
interface ResolvedTypeReferenceDirectiveWithFailedLookupLocations extends ts.ResolvedTypeReferenceDirectiveWithFailedLookupLocations, ResolutionWithFailedLookupLocations {
@@ -85,8 +85,8 @@ namespace ts {
// The resolvedModuleNames and resolvedTypeReferenceDirectives are the cache of resolutions per file.
// The key in the map is source file's path.
// The values are Map of resolutions with key being name lookedup.
- const resolvedModuleNames = createMap