Skip to content

Commit 1c39443

Browse files
committed
WIP
1 parent 00130a1 commit 1c39443

26 files changed

+327
-320
lines changed

.vscode/launch.template.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
"bdd",
3131
"--no-timeouts",
3232
"--colors",
33-
"built/local/run.js",
33+
"built/local/testRunner/Harness.js",
3434
"-f",
3535
// You can change this to be the name of a specific test file (without the file extension)
3636
// to consistently launch the same test
@@ -46,7 +46,7 @@
4646
"preLaunchTask": "tests",
4747
"console": "integratedTerminal",
4848
"outFiles": [
49-
"${workspaceRoot}/built/local/run.js"
49+
"${workspaceRoot}/built/local/testRunner/Harness.js"
5050
]
5151
},
5252
{

Gulpfile.js

+169-168
Large diffs are not rendered by default.

src/compiler/sys.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1049,7 +1049,7 @@ export let sys: System = (() => {
10491049
}
10501050
},
10511051
getExecutingFilePath() {
1052-
return __filename;
1052+
return _path.join(_path.dirname(__filename), "..", _path.basename(__filename)); // COMPAT: return path in root of our dir, rather than direct location of sys impl
10531053
},
10541054
getCurrentDirectory() {
10551055
return process.cwd();

src/harness/Harness.ts

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import "../services/services"; // ensure services setup code is called
2+
import "./harnessGlobals";
13
export * from "./runnerbase";
24
export * from "./harnessIO";
35
export * from "./typeWriter";

src/harness/fakesHosts.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import { FileSystem } from "./vfs";
22
import { removeByteOrderMark, addUTF8ByteOrderMark, assertInvariants } from "./Utils";
33
import { dirname, combine, resolve } from "./vpath";
4-
import { matchFiles, FileSystemEntries, notImplemented, generateDjb2Hash, SourceFile, getDefaultCompilerOptions, getNewLineCharacter, CompilerOptions, getDefaultLibFileName, createSourceFile, DiagnosticMessage, Diagnostic, getLocaleSpecificMessage, formatStringFromArgs, isArray, DiagnosticMessageChain, DiagnosticRelatedInformation, ProgramBuildInfoDiagnostic, compareStringsCaseSensitive, isString, BuildInfo, MapLike, getOwnKeys, BuilderProgram, isBuildInfoFile, getBuildInfo, Debug, getBuildInfoText, CreateProgram, createEmitAndSemanticDiagnosticsBuilderProgram, createDiagnosticReporter, sys } from "./ts";
4+
import { matchFiles, FileSystemEntries, notImplemented, generateDjb2Hash, SourceFile, getDefaultCompilerOptions, getNewLineCharacter, CompilerOptions, getDefaultLibFileName, createSourceFile, DiagnosticMessage, Diagnostic, getLocaleSpecificMessage, formatStringFromArgs, isArray, DiagnosticMessageChain, DiagnosticRelatedInformation, ProgramBuildInfoDiagnostic, compareStringsCaseSensitive, isString, BuildInfo, MapLike, getOwnKeys, BuilderProgram, isBuildInfoFile, getBuildInfo, Debug, getBuildInfoText, CreateProgram, createEmitAndSemanticDiagnosticsBuilderProgram, createDiagnosticReporter, sys } from "../compiler/ts";
55
import { TextDocument } from "./documents";
66
import { SortedMap } from "./collections";
77
import { lightMode } from "./Harness";
8-
import * as ts from "./ts";
8+
import * as ts from "../compiler/ts";
99
/**
1010
* Fake implementations of various compiler dependencies.
1111
*/

src/harness/harnessIO.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ function createNodeIO(): IO {
150150
log: s => console.log(s),
151151
args: () => sys.args,
152152
getExecutingFilePath: () => sys.getExecutingFilePath(),
153-
getWorkspaceRoot: () => resolve(__dirname, "../.."),
153+
getWorkspaceRoot: () => resolve(__dirname, "../../.."),
154154
exit: exitCode => sys.exit(exitCode),
155155
readDirectory: (path, extension, exclude, include, depth) => sys.readDirectory(path, extension, exclude, include, depth),
156156
getAccessibleFileSystemEntries,

src/server/session.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import { HostCancellationToken, CompilerOptions, getEmitDeclarations, Diagnostic, flattenDiagnosticMessageText, diagnosticCategoryName, map, DiagnosticRelatedInformation, getLineAndCharacterOfPosition, LineAndCharacter, TextChange, textSpanEnd, Debug, OperationCanceledException, MultiMap, Path, flatMapToMutable, isArray, flatMap, deduplicate, equateValues, DocumentPosition, contains, UserPreferences, RenameLocation, documentSpansEqual, firstOrUndefined, ReferencedSymbol, ReferencedSymbolDefinitionInfo, createTextSpan, find, createMap, Push, DocumentSpan, TextSpan, PossibleProgramFileInfo, getSnapshotText, perfLogger, WithMetadata, arrayFrom, filter, concatenate, DefinitionInfo, EmitOutput, ImplementationLocation, TextInsertion, DocumentHighlights, RenameInfo, identity, displayPartsToString, ScriptKind, QuickInfo, createTextSpanFromBounds, formatting, mapDefined, startsWith, compareStringsCaseSensitiveUI, fileExtensionIs, Extension, singleIterator, normalizePath, NavigationBarItem, NavigationTree, NavigateToItem, getSupportedCodeFixes, TextRange, RefactorEditInfo, FileTextChanges, CodeActionCommand, toArray, CodeAction, stringContains, SelectionRange, createMapFromTemplate, version, mapIterator, arrayIterator, mapDefinedIterator, arrayReverseIterator, FormatCodeSettings, first, computeLineAndCharacterOfPosition, computeLineStarts } from "./ts";
2-
import { Project, NormalizedPath, isInferredProject, isExternalProject, protocol, Logger, LogLevel, indent, ServerHost, ProjectService, emptyArray, toNormalizedPath, isConfiguredProject, ITypingsInstaller, ProjectServiceEventHandler, GcTimer, ProjectServiceOptions, ProjectServiceEvent, ProjectsUpdatedInBackgroundEvent, ProjectLoadingStartEvent, ProjectLoadingFinishEvent, LargeFileReferencedEvent, ConfigFileDiagEvent, ProjectLanguageServiceStateEvent, ProjectInfoTelemetryEvent, ProjectKind, Msg, updateProjectIfDirty, ScriptInfo, Errors, convertFormatOptions, convertUserPreferences, convertScriptKindName, stringifyIndented, ScriptInfoOrConfig, isConfigFile } from "./ts.server";
2+
import { Project, NormalizedPath, isInferredProject, isExternalProject, Logger, LogLevel, indent, ServerHost, ProjectService, emptyArray, toNormalizedPath, isConfiguredProject, ITypingsInstaller, ProjectServiceEventHandler, GcTimer, ProjectServiceOptions, ProjectServiceEvent, ProjectsUpdatedInBackgroundEvent, ProjectLoadingStartEvent, ProjectLoadingFinishEvent, LargeFileReferencedEvent, ConfigFileDiagEvent, ProjectLanguageServiceStateEvent, ProjectInfoTelemetryEvent, ProjectKind, Msg, updateProjectIfDirty, ScriptInfo, Errors, convertFormatOptions, convertUserPreferences, convertScriptKindName, stringifyIndented, ScriptInfoOrConfig, isConfigFile } from "./ts.server";
33
import { Location, DiagnosticWithFileName, CommandTypes, Message, RequestCompletedEventBody, ProjectLoadingStartEventBody, ProjectLoadingFinishEventBody, LargeFileReferencedEventBody, ConfigFileDiagnosticEventBody, ProjectLanguageServiceStateEventName, ProjectLanguageServiceStateEventBody, TelemetryEventName, TelemetryEventBody, ProjectsUpdatedInBackgroundEventBody, FileRequestArgs, Response, DiagnosticEventKind, DiagnosticEventBody, EncodedSyntacticClassificationsRequestArgs, EncodedSemanticClassificationsRequestArgs, DiagnosticWithLinePosition, CompilerOptionsDiagnosticsRequestArgs, FileLocationRequestArgs, FileSpanWithContext, DefinitionInfoAndBoundSpan, FileSpan, OccurrencesResponseItem, SyntacticDiagnosticsSyncRequestArgs, SemanticDiagnosticsSyncRequestArgs, SuggestionDiagnosticsSyncRequestArgs, JsxClosingTagRequestArgs, DocumentHighlightsRequestArgs, DocumentHighlightsItem, SetCompilerOptionsForInferredProjectsArgs, ProjectInfoRequestArgs, ProjectInfo, RenameRequestArgs, RenameResponseBody, RenameInfoSuccess, SpanGroup, ReferencesResponseBody, ReferencesResponseItem, OutliningSpan, TodoCommentRequestArgs, SpanOfEnclosingCommentRequestArgs, IndentationRequestArgs, BraceCompletionRequestArgs, QuickInfoResponseBody, FormatRequestArgs, CodeEdit, FormatOnKeyRequestArgs, CompletionsRequestArgs, CompletionEntry, CompletionInfo, CompletionDetailsRequestArgs, CompletionEntryDetails, CompileOnSaveAffectedFileListSingleProject, CompileOnSaveEmitFileRequestArgs, SignatureHelpRequestArgs, SignatureHelpItems, ChangeRequestArgs, ReloadRequestArgs, NavtoRequestArgs, NavtoItem, FileLocationOrRangeRequestArgs, GetApplicableRefactorsRequestArgs, ApplicableRefactorInfo, GetEditsForRefactorRequestArgs, OrganizeImportsRequestArgs, FileCodeEdits, GetEditsForFileRenameRequestArgs, CodeFixRequestArgs, CodeFixAction, GetCombinedCodeFixRequestArgs, CombinedCodeActions, ApplyCodeActionCommandRequestArgs, FileRangeRequestArgs, ConfigurePluginRequestArguments, SelectionRangeRequestArgs, Request, StatusResponseBody, OpenExternalProjectRequest, OpenExternalProjectsRequest, CloseExternalProjectRequest, SynchronizeProjectListRequest, UpdateOpenRequest, ApplyChangedToOpenFilesRequest, DefinitionRequest, EmitOutputRequest, FileLocationRequest, RenameRequest, RenameFullRequest, OpenRequest, QuickInfoRequest, FileRequest, TodoCommentRequest, IndentationRequest, BraceCompletionRequest, DocCommentTemplateRequest, SpanOfEnclosingCommentRequest, FormatRequest, FormatOnKeyRequest, CompletionsRequest, CompletionDetailsRequest, CompileOnSaveAffectedFileListRequest, CompileOnSaveEmitFileRequest, SignatureHelpRequest, CompilerOptionsDiagnosticsRequest, EncodedSyntacticClassificationsRequest, EncodedSemanticClassificationsRequest, SemanticDiagnosticsSyncRequest, SyntacticDiagnosticsSyncRequest, SuggestionDiagnosticsSyncRequest, GeterrRequest, GeterrForProjectRequest, ChangeRequest, ConfigureRequest, ReloadRequest, SavetoRequestArgs, NavtoRequest, DocumentHighlightsRequest, SetCompilerOptionsForInferredProjectsRequest, ProjectInfoRequest, JsxClosingTagRequest, CodeFixRequest, GetCombinedCodeFixRequest, ApplyCodeActionCommandRequest, GetApplicableRefactorsRequest, GetEditsForRefactorRequest, OrganizeImportsRequest, GetEditsForFileRenameRequest, ConfigurePluginRequest, SelectionRangeRequest, TextSpanWithContext } from "./ts.server.protocol";
44
import * as ts from "./ts";
5+
import * as protocol from "./ts.server.protocol";
56
interface StackTraceError extends Error {
67
stack?: string;
78
}

src/testRunner/Harness.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1+
import * as Parallel from "./Harness.Parallel";
2+
export { Parallel };
13
export * from "../harness/Harness";
24
export * from "./fourslashRunner";
35
export * from "./compilerRunner";
46
export * from "./externalCompileRunner";
57
export * from "./test262Runner";
68
export * from "./runner";
7-
import * as Parallel from "./Harness.Parallel";
8-
export { Parallel };
9+
import "./ts"; // include all the unit tests

src/testRunner/compilerRunner.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { FileBasedTest, RunnerBase, TestRunnerKind, IO, getFileBasedTestConfigurationDescription, FileBasedTestConfiguration, TestCaseParser, Compiler, getFileBasedTestConfigurations, Baseline } from "./Harness";
22
import { normalizeSeparators, basename } from "./vpath";
3-
import { some, getDirectoryPath, CompilerOptions, cloneCompilerOptions, combinePaths, isRootedDiskPath, getNormalizedAbsolutePath, fileExtensionIs, Extension, length, toPath, identity } from "./ts";
3+
import { some, getDirectoryPath, CompilerOptions, cloneCompilerOptions, combinePaths, isRootedDiskPath, getNormalizedAbsolutePath, fileExtensionIs, Extension, length, toPath, identity } from "../services/ts";
44
import { CompilationResult } from "./compiler";
55
import { sanitizeTraceResolutionLogEntry, removeTestPathPrefixes } from "./Utils";
66
import * as vpath from "./vpath";

src/testRunner/externalCompileRunner.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { RunnerBase, IO, isWorker, Baseline, TestRunnerKind } from "./Harness";
2-
import { Debug, flatten, comparePathsCaseSensitive, compareValues, compareStringsCaseSensitive, stringContains } from "./ts";
2+
import { Debug, flatten, comparePathsCaseSensitive, compareValues, compareStringsCaseSensitive, stringContains } from "../compiler/ts";
33
const fs: typeof import("fs") = require("fs");
44
const path: typeof import("path") = require("path");
55
const del: typeof import("del") = require("del");

src/testRunner/fourslashRunner.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { RunnerBase, TestRunnerKind, IO } from "./Harness";
22
import { FourSlashTestType, runFourSlashTest } from "./FourSlash";
3-
import { Debug, normalizeSlashes } from "./ts";
3+
import { Debug, normalizeSlashes } from "../compiler/ts";
44
export class FourSlashRunner extends RunnerBase {
55
protected basePath: string;
66
protected testSuiteName: TestRunnerKind;

src/testRunner/parallel/host.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { configOption, IO, TestRunnerKind, runners, workerCount, noColors, TestConfig, lightMode, runUnitTests, stackTraceLimit, globalTimeout, taskConfigsFolder, keepFailed } from "../Harness";
22
import { Task, ErrorInfo, TestInfo, TaskTimeout, ParallelClientMessage, ParallelHostMessage, shimNoopTestInterface } from "../Harness.Parallel";
3-
import { createMap, combinePaths, Debug } from "../ts";
3+
import { createMap, combinePaths, Debug } from "../../compiler/ts";
44
export function start() {
55
const Mocha = require("mocha") as typeof import("mocha");
66
const Base = Mocha.reporters.Base;
@@ -14,8 +14,8 @@ export function start() {
1414
const path = require("path") as typeof import("path");
1515
const { fork } = require("child_process") as typeof import("child_process");
1616
const { statSync } = require("fs") as typeof import("fs");
17-
// NOTE: paths for module and types for FailedTestReporter _do not_ line up due to our use of --outFile for run.js
18-
const FailedTestReporter = require(path.resolve(__dirname, "../../scripts/failed-tests")) as typeof import("../../../scripts/failed-tests");
17+
// NOTE: paths for module and types for FailedTestReporter _do not_ line up due to our use of --outDir for results
18+
const FailedTestReporter = require(path.resolve(__dirname, "../../../../scripts/failed-tests")) as typeof import("../../../scripts/failed-tests");
1919
const perfdataFileNameFragment = ".parallelperf";
2020
const perfData = readSavedPerfData(configOption);
2121
const newTasks: Task[] = [];
@@ -586,4 +586,4 @@ export function start() {
586586
}
587587
// eslint-disable-next-line no-restricted-globals
588588
setTimeout(() => startDelayed(perfData, totalCost), 0); // Do real startup on next tick, so all unit tests have been collected
589-
}
589+
}

src/testRunner/parallel/shared.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { TestRunnerKind } from "../Harness";
2-
import { noop } from "../ts";
2+
import { noop } from "../../compiler/ts";
33
export interface RunnerTask {
44
runner: TestRunnerKind;
55
file: string;

src/testRunner/parallel/worker.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Task, TaskResult, UnitTestTask, RunnerTask, ErrorInfo, TestInfo, ParallelHostMessage, ParallelClientMessage, shimNoopTestInterface } from "../Harness.Parallel";
2-
import { createMap } from "../ts";
2+
import { createMap } from "../../compiler/ts";
33
import { globalTimeout, createRunner, RunnerBase, runUnitTests } from "../Harness";
4-
import * as ts from "../ts";
4+
import * as ts from "../../compiler/ts";
55
export function start() {
66
function hookUncaughtExceptions() {
77
if (!exceptionsHooked) {

src/testRunner/projectsRunner.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
import { SourceFile, ModuleKind, Program, CompilerOptions, Diagnostic, SourceMapEmitResult, normalizePath, combinePaths, findConfigFile, readJsonConfigFile, parseJsonSourceFileConfigFileContent, getDirectoryPath, concatenate, normalizeSlashes, CharacterCodes, createProgram, getPreEmitDiagnostics, forEach, getNormalizedAbsolutePath, removeFileExtension, Extension, contains, isRootedDiskPath, ModuleResolutionKind, NewLineKind, arrayToMap, optionDeclarations, isString } from "./ts";
1+
import { SourceFile, ModuleKind, Program, CompilerOptions, Diagnostic, SourceMapEmitResult, normalizePath, combinePaths, findConfigFile, readJsonConfigFile, parseJsonSourceFileConfigFileContent, getDirectoryPath, concatenate, normalizeSlashes, CharacterCodes, createProgram, getPreEmitDiagnostics, forEach, getNormalizedAbsolutePath, removeFileExtension, Extension, contains, isRootedDiskPath, ModuleResolutionKind, NewLineKind, arrayToMap, optionDeclarations, isString } from "../compiler/ts";
22
import { TextDocument } from "./documents";
33
import { RunnerBase, shards, shardId, TestRunnerKind, IO, Baseline, isDefaultLibraryFile, Compiler } from "./Harness";
44
import { CompilerHost, System, ParseConfigHost } from "./fakes";
55
import { FileSystem, srcFolder, createFromFileSystem, createResolver, builtFolder, testLibFolder } from "./vfs";
66
import { resolve, relative, combine, beneath, isAbsolute, extname, isDefaultLibrary } from "./vpath";
77
import { removeTestPathPrefixes } from "./Utils";
8-
import * as ts from "./ts";
8+
import * as ts from "../compiler/ts";
99
// Test case is json of below type in tests/cases/project/
1010
interface ProjectRunnerTestCase {
1111
scenario: string;

src/testRunner/runner.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { RunnerBase, TestRunnerKind, CompilerBaselineRunner, CompilerTestType, FourSlashRunner, Test262BaselineRunner, UserCodeRunner, DefinitelyTypedRunner, DockerfileRunner, IO, setLightMode, setShardId, setShards, GeneratedFourslashRunner } from "./Harness";
2-
import { forEach, Debug, getUILocale, setUILocale, noop } from "./ts";
2+
import { forEach, Debug, getUILocale, setUILocale, noop } from "../compiler/ts";
33
import { FourSlashTestType } from "./FourSlash";
44
import { ProjectRunner } from "./project";
55
import { RWCRunner } from "./RWC";

src/testRunner/rwcRunner.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { IoLog, wrapIO, newStyleLogIntoOldStyleLog } from "./Playback";
22
import { IO, setHarnessIO, Compiler, Baseline, isDefaultLibraryFile, RunnerBase, TestRunnerKind } from "./Harness";
33
import { CompilationResult } from "./compiler";
4-
import { CompilerOptions, getBaseFileName, ParsedCommandLine, parseCommandLine, forEach, parseJsonText, ParseConfigHost, parseJsonSourceFileConfigFileContent, getDirectoryPath, extend, setConfigFileInOptions, createMap, normalizeSlashes } from "./ts";
4+
import { CompilerOptions, getBaseFileName, ParsedCommandLine, parseCommandLine, forEach, parseJsonText, ParseConfigHost, parseJsonSourceFileConfigFileContent, getDirectoryPath, extend, setConfigFileInOptions, createMap, normalizeSlashes } from "../compiler/ts";
55
import { isTsConfigFile } from "./vpath";
66
// In harness baselines, null is different than undefined. See `generateActual` in `harness.ts`.
77
function runWithIOLog(ioLog: IoLog, fn: (oldIO: IO) => void) {

src/testRunner/test262Runner.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { RunnerBase, Compiler, IO, Baseline, TestCaseParser, TestRunnerKind } from "./Harness";
2-
import { CompilerOptions, ScriptTarget, ModuleKind, removeFileExtension, map, normalizePath } from "./ts";
2+
import { CompilerOptions, ScriptTarget, ModuleKind, removeFileExtension, map, normalizePath } from "../compiler/ts";
33
import { CompilationResult } from "./compiler";
44
import { assertInvariants, sourceFileToJSON } from "./Utils";
55
// In harness baselines, null is different than undefined. See `generateActual` in `harness.ts`.

0 commit comments

Comments
 (0)