From 89366620906b57d65bd9759952371464dbff5216 Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Thu, 17 Jul 2014 17:40:05 -0700 Subject: [PATCH 1/4] Enable compiler runner to report the errors from compiling generated declaration files --- src/harness/compilerRunner.ts | 243 +++++++++--------- src/harness/harness.ts | 20 +- src/harness/projectsRunner.ts | 10 +- ...tExternalModuleWithSingleExportedModule.js | 19 ++ ...lFileExportAssignmentOfGenericInterface.js | 16 ++ .../reference/declFileExportImportChain.js | 29 +++ .../reference/declFileExportImportChain2.js | 26 ++ .../reference/declFileGenericType2.js | 42 +++ ...eclFileImportModuleWithExportAssignment.js | 35 +++ ...eclFileImportedTypeUseInTypeArgPosition.js | 16 ++ .../reference/declFileInternalAliases.js | 20 ++ tests/baselines/reference/declInput-2.js | 38 +++ .../declarationEmit_nameConflicts.js | 64 +++++ .../reference/exportAssignTypes.errors.txt | 10 +- tests/baselines/reference/exportImport.js | 19 ++ .../exportImportNonInstantiatedModule2.js | 19 ++ .../functionExpressionReturningItself.js | 10 + .../importDeclarationUsedAsTypeQuery.js | 16 ++ .../baselines/reference/internalAliasClass.js | 16 ++ ...liasClassInsideLocalModuleWithoutExport.js | 19 ++ ...sClassInsideTopLevelModuleWithoutExport.js | 15 ++ .../baselines/reference/internalAliasEnum.js | 19 ++ ...AliasEnumInsideLocalModuleWithoutExport.js | 19 ++ ...asEnumInsideTopLevelModuleWithoutExport.js | 17 ++ .../internalAliasInitializedModule.js | 18 ++ ...zedModuleInsideLocalModuleWithoutExport.js | 18 ++ ...ModuleInsideTopLevelModuleWithoutExport.js | 16 ++ .../reference/internalAliasInterface.js | 16 ++ ...InterfaceInsideLocalModuleWithoutExport.js | 16 ++ ...erfaceInsideTopLevelModuleWithoutExport.js | 14 + .../internalAliasUninitializedModule.js | 19 ++ ...zedModuleInsideLocalModuleWithoutExport.js | 19 ++ ...ModuleInsideTopLevelModuleWithoutExport.js | 17 ++ .../missingImportAfterModuleImport.js | 25 ++ ...rivacyCheckTypeOfInvisibleModuleNoError.js | 12 + 35 files changed, 807 insertions(+), 140 deletions(-) diff --git a/src/harness/compilerRunner.ts b/src/harness/compilerRunner.ts index 8ba8f287184f5..3f3c1d5f0d548 100644 --- a/src/harness/compilerRunner.ts +++ b/src/harness/compilerRunner.ts @@ -49,6 +49,7 @@ class CompilerBaselineRunner extends RunnerBase { var createNewInstance = false; var lastUnit = units[units.length - 1]; + var rootDir = lastUnit.originalFilePath.indexOf('conformance') === -1 ? 'tests/cases/compiler/' : lastUnit.originalFilePath.substring(0, lastUnit.originalFilePath.lastIndexOf('/')) + '/'; var result: Harness.Compiler.CompilerResult; var options: ts.CompilerOptions; @@ -67,7 +68,6 @@ class CompilerBaselineRunner extends RunnerBase { // otherwise, assume all files are just meant to be in the same compilation session without explicit references to one another. toBeCompiled = []; otherFiles = []; - var rootDir = lastUnit.originalFilePath.indexOf('conformance') === -1 ? 'tests/cases/compiler/' : lastUnit.originalFilePath.substring(0, lastUnit.originalFilePath.lastIndexOf('/')) + '/'; if (/require\(/.test(lastUnit.content) || /reference\spath/.test(lastUnit.content)) { toBeCompiled.push({ unitName: rootDir + lastUnit.name, content: lastUnit.content }); units.forEach(unit => { @@ -114,94 +114,98 @@ class CompilerBaselineRunner extends RunnerBase { } }); - // check errors - it('Correct errors for ' + fileName, () => { - if (this.errors) { - Harness.Baseline.runBaseline('Correct errors for ' + fileName, justName.replace(/\.ts$/, '.errors.txt'), (): string => { - if (result.errors.length === 0) return null; + function getErrorBaseline(toBeCompiled: { unitName: string; content: string }[], + otherFiles: { unitName: string; content: string }[], + result: Harness.Compiler.CompilerResult + ) { + var outputLines: string[] = []; + // Count up all the errors we find so we don't miss any + var totalErrorsReported = 0; + + // 'merge' the lines of each input file with any errors associated with it + toBeCompiled.concat(otherFiles).forEach(inputFile => { + // Filter down to the errors in the file + var fileErrors = result.errors.filter(e => { + var errFn = e.filename; + return errFn && errFn === inputFile.unitName; + }); - var outputLines: string[] = []; - // Count up all the errors we find so we don't miss any - var totalErrorsReported = 0; - - // 'merge' the lines of each input file with any errors associated with it - toBeCompiled.concat(otherFiles).forEach(inputFile => { - // Filter down to the errors in the file - // 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 - var fileErrors = result.errors.filter(e => { - var errFn = e.filename; - return errFn && errFn.indexOf(inputFile.unitName) === errFn.length - inputFile.unitName.length; - }); + // Add this to the number of errors we've seen so far + totalErrorsReported += fileErrors.length; - // Add this to the number of errors we've seen so far - totalErrorsReported += fileErrors.length; - - // Header - outputLines.push('==== ' + inputFile.unitName + ' (' + fileErrors.length + ' errors) ===='); - - // Make sure we emit something for every error - var markedErrorCount = 0; - // For each line, emit the line followed by any error squiggles matching this 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 fileLineMap = TypeScript.LineMap1.fromString(inputFile.content); - var lines = inputFile.content.split('\n'); - var currentLineStart = 0; - lines.forEach((line, lineIndex) => { - if (line.length > 0 && line.charAt(line.length - 1) === '\r') { - line = line.substr(0, line.length - 1); - } + // Header + outputLines.push('==== ' + inputFile.unitName + ' (' + fileErrors.length + ' errors) ===='); - var thisLineStart = currentLineStart; //fileLineMap.getLineStartPosition(lineIndex); - var nextLineStart: number; - // 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 = currentLineStart + line.length + 1; //fileLineMap.getLineStartPosition(lineIndex + 1); - } - // Emit this line from the original file - outputLines.push(' ' + line); - fileErrors.forEach(err => { - // Does any error start or continue on to this line? Emit squiggles - if ((err.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 = (err.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.push(' ' + 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 > err.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 - - var errLines = RunnerBase.removeFullPaths(err.message) - .split('\n') - .map(s => s.length > 0 && s.charAt(s.length - 1) === '\r' ? s.substr(0, s.length - 1) : s) - .filter(s => s.length > 0) - .map(s => '!!! ' + s); - errLines.forEach(e => outputLines.push(e)); - markedErrorCount++; - } - } - }); - currentLineStart += line.length + 1; // +1 for the \n character - }); + // Make sure we emit something for every error + var markedErrorCount = 0; + // For each line, emit the line followed by any error squiggles matching this 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 - // Verify we didn't miss any errors in this file - assert.equal(markedErrorCount, fileErrors.length, 'count of errors in ' + inputFile.unitName); + var lineStarts = ts.getLineStarts(inputFile.content); + var lines = inputFile.content.split('\n'); + lines.forEach((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: number; + // 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.push(' ' + line); + fileErrors.forEach(err => { + // Does any error start or continue on to this line? Emit squiggles + if ((err.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 = (err.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.push(' ' + 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 > err.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 + + var errLines = RunnerBase.removeFullPaths(err.message) + .split('\n') + .map(s => s.length > 0 && s.charAt(s.length - 1) === '\r' ? s.substr(0, s.length - 1) : s) + .filter(s => s.length > 0) + .map(s => '!!! ' + s); + errLines.forEach(e => outputLines.push(e)); + markedErrorCount++; + } + } }); + }); - // Verify we didn't miss any errors in total - // NEWTODO: Re-enable this -- somehow got broken - // assert.equal(totalErrorsReported, result.errors.length, 'total number of errors'); + // Verify we didn't miss any errors in this file + assert.equal(markedErrorCount, fileErrors.length, 'count of errors in ' + inputFile.unitName); + }); - return outputLines.join('\r\n'); + // Verify we didn't miss any errors in total + // NEWTODO: Re-enable this -- somehow got broken + // assert.equal(totalErrorsReported, result.errors.length, 'total number of errors'); + + return outputLines.join('\r\n'); + } + + // check errors + it('Correct errors for ' + fileName, () => { + if (this.errors) { + Harness.Baseline.runBaseline('Correct errors for ' + fileName, justName.replace(/\.ts$/, '.errors.txt'), (): string => { + if (result.errors.length === 0) return null; + + return getErrorBaseline(toBeCompiled, otherFiles, result); }); } }); @@ -215,54 +219,41 @@ class CompilerBaselineRunner extends RunnerBase { } }); - /* - it(".d.ts compiles without error", () => { - // if the .d.ts is non-empty, confirm it compiles correctly as well - if (this.decl && result.declFilesCode.length > 0 && result.errors.length === 0) { + it('Correct JS output for ' + fileName, () => { + if (!ts.fileExtensionIs(lastUnit.name, '.d.ts') && this.emit) { + if (result.files.length === 0 && result.errors.length === 0) { + throw new Error('Expected at least one js file to be emitted or at least one error to be created.'); + } - var declErrors: string[] = undefined; + if (options.declaration && result.errors.length === 0 && result.declFilesCode.length !== result.files.length) { + throw new Error('There were no errors and declFiles generated did not match number of js files generated'); + } + var declToBeCompiled: { unitName: string; content: string }[] = []; var declOtherFiles: { unitName: string; content: string }[] = []; + var declResult: Harness.Compiler.CompilerResult; - // use other files if it is dts - for (var i = 0; i < otherFiles.length; i++) { - if (TypeScript.isDTSFile(otherFiles[i].unitName)) { - declOtherFiles.push(otherFiles[i]); + // if the .d.ts is non-empty, confirm it compiles correctly as well + if (options.declaration && result.errors.length === 0 && result.declFilesCode.length > 0) { + function getDtsFile(file: { unitName: string; content: string }) { + if (Harness.Compiler.isDTS(file.unitName)) { + return file; + } + else { + var declFile = ts.forEach(result.declFilesCode, + declFile => declFile.fileName === (file.unitName.substr(0, file.unitName.length - ".ts".length) + ".d.ts") + ? declFile : undefined); + return { unitName: rootDir + Harness.Path.getFileName(declFile.fileName), content: declFile.code }; + } } - } - for (var i = 0; i < result.declFilesCode.length; i++) { - var declCode = result.declFilesCode[i]; - // don't want to use the fullpath for the unitName or the file won't be resolved correctly - // TODO: wrong path for conformance tests? - - var declFile = { unitName: 'tests/cases/compiler/' + Harness.getFileName(declCode.fileName), content: declCode.code }; - if (i != result.declFilesCode.length - 1) { - declOtherFiles.push(declFile); - } - } - - harnessCompiler.compileFiles( - [declFile], - declOtherFiles, - (result) => { - declErrors = result.errors.map(err => err.message + "\r\n"); - }, - function (settings) { - harnessCompiler.setCompilerSettings(tcSettings); + ts.forEach(toBeCompiled, file => { declToBeCompiled.push(getDtsFile(file)); }); + ts.forEach(otherFiles, file => { declOtherFiles.push(getDtsFile(file)); }); + harnessCompiler.compileFiles(declToBeCompiled, declOtherFiles, function (compileResult) { + declResult = compileResult; + }, function (settings) { + harnessCompiler.setCompilerSettings(tcSettings); }); - - if (declErrors && declErrors.length) { - throw new Error('.d.ts file output of ' + fileName + ' did not compile. Errors: ' + declErrors.map(err => JSON.stringify(err)).join('\r\n')); - } - } - }); - */ - - it('Correct JS output for ' + fileName, () => { - if (!ts.fileExtensionIs(lastUnit.name, '.d.ts') && this.emit) { - if (result.files.length === 0 && result.errors.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 @@ -293,6 +284,12 @@ class CompilerBaselineRunner extends RunnerBase { } } + if (declResult && declResult.errors.length) { + jsCode += '\r\n\r\n//// [DtsFileErrors]\r\n'; + jsCode += '\r\n\r\n'; + jsCode += getErrorBaseline(declToBeCompiled, declOtherFiles, declResult); + } + if (jsCode.length > 0) { return tsCode + '\r\n\r\n' + jsCode; } else { diff --git a/src/harness/harness.ts b/src/harness/harness.ts index 80ac9d2d5895e..c35ba97df3ad4 100644 --- a/src/harness/harness.ts +++ b/src/harness/harness.ts @@ -806,10 +806,22 @@ module Harness { code: string; } - export function stringEndsWith(str: string, end: string) { + function stringEndsWith(str: string, end: string) { return str.substr(str.length - end.length) === end; } + export function isDTS(fileName: string) { + return stringEndsWith(fileName, '.d.ts'); + } + + export function isJS(fileName: string) { + return stringEndsWith(fileName, '.js'); + } + + export function isJSMap(fileName: string) { + return stringEndsWith(fileName, '.js.map'); + } + /** Contains the code and errors of a compilation and some helper methods to check its status. */ export class CompilerResult { public files: GeneratedFile[] = []; @@ -824,13 +836,13 @@ module Harness { fileResults.forEach(emittedFile => { var fileObj = { fileName: emittedFile.fileName, code: emittedFile.file }; - if (stringEndsWith(emittedFile.fileName, '.d.ts')) { + if (isDTS(emittedFile.fileName)) { // .d.ts file, add to declFiles emit this.declFilesCode.push(fileObj); - } else if (stringEndsWith(emittedFile.fileName, '.js')) { + } else if (isJS(emittedFile.fileName)) { // .js file, add to files this.files.push(fileObj); - } else if (stringEndsWith(emittedFile.fileName, '.js.map')) { + } else if (isJSMap(emittedFile.fileName)) { this.sourceMaps.push(fileObj); } else { throw new Error('Unrecognized file extension for file ' + emittedFile.fileName); diff --git a/src/harness/projectsRunner.ts b/src/harness/projectsRunner.ts index a3e86195cbfa0..f7d2ec22cd26f 100644 --- a/src/harness/projectsRunner.ts +++ b/src/harness/projectsRunner.ts @@ -175,18 +175,18 @@ class ProjectRunner extends RunnerBase { // we need to instead create files that can live in the project reference folder // but make sure extension of these files matches with the filename the compiler asked to write diskRelativeName = "diskFile" + nonSubfolderDiskFiles++ + - (Harness.Compiler.stringEndsWith(filename, ".d.ts") ? ".d.ts" : - Harness.Compiler.stringEndsWith(filename, ".js") ? ".js" : ".js.map"); + (Harness.Compiler.isDTS(filename) ? ".d.ts" : + Harness.Compiler.isJS(filename) ? ".js" : ".js.map"); } - if (Harness.Compiler.stringEndsWith(filename, ".js")) { + if (Harness.Compiler.isJS(filename)) { // Make sure if there is URl we have it cleaned up var indexOfSourceMapUrl = data.lastIndexOf("//# sourceMappingURL="); if (indexOfSourceMapUrl != -1) { data = data.substring(0, indexOfSourceMapUrl + 21) + cleanProjectUrl(data.substring(indexOfSourceMapUrl + 21)); } } - else if (Harness.Compiler.stringEndsWith(filename, ".js.map")) { + else if (Harness.Compiler.isJSMap(filename)) { // Make sure sources list is cleaned var sourceMapData = JSON.parse(data); for (var i = 0; i < sourceMapData.sources.length; i++) { @@ -332,7 +332,7 @@ class ProjectRunner extends RunnerBase { it('SourceMapRecord for (' + moduleNameToString(compilerResult.moduleKind) + '): ' + testCaseFileName, () => { Harness.Baseline.runBaseline('SourceMapRecord for (' + moduleNameToString(compilerResult.moduleKind) + '): ' + testCaseFileName, getBaselineFolder(compilerResult.moduleKind) + testCaseJustName + '.sourcemap.txt', () => { return Harness.SourceMapRecoder.getSourceMapRecord(compilerResult.sourceMapData, compilerResult.program, - ts.filter(compilerResult.outputFiles, outputFile => Harness.Compiler.stringEndsWith(outputFile.emittedFileName, ".js"))); + ts.filter(compilerResult.outputFiles, outputFile => Harness.Compiler.isJS(outputFile.emittedFileName))); }); }); } diff --git a/tests/baselines/reference/declFileAmbientExternalModuleWithSingleExportedModule.js b/tests/baselines/reference/declFileAmbientExternalModuleWithSingleExportedModule.js index 3c4ddf366f101..11740adf2c920 100644 --- a/tests/baselines/reference/declFileAmbientExternalModuleWithSingleExportedModule.js +++ b/tests/baselines/reference/declFileAmbientExternalModuleWithSingleExportedModule.js @@ -33,3 +33,22 @@ declare module "SubModule" { //// [declFileAmbientExternalModuleWithSingleExportedModule_1.d.ts] /// export declare var x: SubModule.m.m3.c; + + +//// [DtsFileErrors] + + +==== tests/cases/compiler/declFileAmbientExternalModuleWithSingleExportedModule_1.d.ts (1 errors) ==== + /// + export declare var x: SubModule.m.m3.c; + ~~~~~~~~~~~~~~~~ +!!! Cannot find name 'SubModule'. + +==== tests/cases/compiler/declFileAmbientExternalModuleWithSingleExportedModule_0.d.ts (0 errors) ==== + declare module "SubModule" { + module m { + module m3 { + } + } + } + \ No newline at end of file diff --git a/tests/baselines/reference/declFileExportAssignmentOfGenericInterface.js b/tests/baselines/reference/declFileExportAssignmentOfGenericInterface.js index 5f353ffd9879d..37851569ad2ff 100644 --- a/tests/baselines/reference/declFileExportAssignmentOfGenericInterface.js +++ b/tests/baselines/reference/declFileExportAssignmentOfGenericInterface.js @@ -29,3 +29,19 @@ interface Foo { export = Foo; //// [declFileExportAssignmentOfGenericInterface_1.d.ts] export declare var x: a>; + + +//// [DtsFileErrors] + + +==== tests/cases/compiler/declFileExportAssignmentOfGenericInterface_1.d.ts (1 errors) ==== + export declare var x: a>; + ~~~~~~~~~~~~ +!!! Cannot find name 'a'. + +==== tests/cases/compiler/declFileExportAssignmentOfGenericInterface_0.d.ts (0 errors) ==== + interface Foo { + a: string; + } + export = Foo; + \ No newline at end of file diff --git a/tests/baselines/reference/declFileExportImportChain.js b/tests/baselines/reference/declFileExportImportChain.js index 9b921345a1e03..b9cc3834a8252 100644 --- a/tests/baselines/reference/declFileExportImportChain.js +++ b/tests/baselines/reference/declFileExportImportChain.js @@ -75,3 +75,32 @@ export = b; export import b1 = require("declFileExportImportChain_b1"); //// [declFileExportImportChain_d.d.ts] export declare var x: m1.m2.c1; + + +//// [DtsFileErrors] + + +==== tests/cases/compiler/declFileExportImportChain_d.d.ts (1 errors) ==== + export declare var x: m1.m2.c1; + ~~~~~~~~ +!!! Cannot find name 'm1'. + +==== tests/cases/compiler/declFileExportImportChain_a.d.ts (0 errors) ==== + declare module m1 { + module m2 { + class c1 { + } + } + } + export = m1; + +==== tests/cases/compiler/declFileExportImportChain_b.d.ts (0 errors) ==== + export import a = require("declFileExportImportChain_a"); + +==== tests/cases/compiler/declFileExportImportChain_b1.d.ts (0 errors) ==== + import b = require("declFileExportImportChain_b"); + export = b; + +==== tests/cases/compiler/declFileExportImportChain_c.d.ts (0 errors) ==== + export import b1 = require("declFileExportImportChain_b1"); + \ No newline at end of file diff --git a/tests/baselines/reference/declFileExportImportChain2.js b/tests/baselines/reference/declFileExportImportChain2.js index 3b2e1936c3907..02b5913936000 100644 --- a/tests/baselines/reference/declFileExportImportChain2.js +++ b/tests/baselines/reference/declFileExportImportChain2.js @@ -66,3 +66,29 @@ export = a; export import b = require("declFileExportImportChain2_b"); //// [declFileExportImportChain2_d.d.ts] export declare var x: m1.m2.c1; + + +//// [DtsFileErrors] + + +==== tests/cases/compiler/declFileExportImportChain2_d.d.ts (1 errors) ==== + export declare var x: m1.m2.c1; + ~~~~~~~~ +!!! Cannot find name 'm1'. + +==== tests/cases/compiler/declFileExportImportChain2_a.d.ts (0 errors) ==== + declare module m1 { + module m2 { + class c1 { + } + } + } + export = m1; + +==== tests/cases/compiler/declFileExportImportChain2_b.d.ts (0 errors) ==== + import a = require("declFileExportImportChain2_a"); + export = a; + +==== tests/cases/compiler/declFileExportImportChain2_c.d.ts (0 errors) ==== + export import b = require("declFileExportImportChain2_b"); + \ No newline at end of file diff --git a/tests/baselines/reference/declFileGenericType2.js b/tests/baselines/reference/declFileGenericType2.js index 1240e80e274ea..9e0578e0ef99d 100644 --- a/tests/baselines/reference/declFileGenericType2.js +++ b/tests/baselines/reference/declFileGenericType2.js @@ -113,3 +113,45 @@ declare module templa.dom.mvc.composite { constructor(); } } + + +//// [DtsFileErrors] + + +==== tests/cases/compiler/declFileGenericType2.d.ts (6 errors) ==== + declare module templa.mvc { + } + declare module templa.mvc { + } + declare module templa.mvc { + } + declare module templa.mvc.composite { + } + declare module templa.dom.mvc { + interface IElementController extends templa.mvc.IController { + ~~~~~~~~~~~~~~~~~ +!!! Module 'templa.mvc' has no exported member 'IModel'. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! Module 'templa.mvc' has no exported member 'IController'. + } + } + declare module templa.dom.mvc { + class AbstractElementController extends templa.mvc.AbstractController implements IElementController { + ~~~~~~~~~~~~~~~~~ +!!! Module 'templa.mvc' has no exported member 'IModel'. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! Module 'templa.mvc' has no exported member 'AbstractController'. + constructor(); + } + } + declare module templa.dom.mvc.composite { + class AbstractCompositeElementController extends AbstractElementController { + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! Module 'templa.mvc.composite' has no exported member 'ICompositeControllerModel'. + _controllers: templa.mvc.IController[]; + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! Module 'templa.mvc' has no exported member 'IController'. + constructor(); + } + } + \ No newline at end of file diff --git a/tests/baselines/reference/declFileImportModuleWithExportAssignment.js b/tests/baselines/reference/declFileImportModuleWithExportAssignment.js index ccea841ab4713..3f695dcb8953e 100644 --- a/tests/baselines/reference/declFileImportModuleWithExportAssignment.js +++ b/tests/baselines/reference/declFileImportModuleWithExportAssignment.js @@ -57,3 +57,38 @@ export declare var a: { test1: a1.connectModule; test2(): a1.connectModule; }; + + +//// [DtsFileErrors] + + +==== tests/cases/compiler/declFileImportModuleWithExportAssignment_1.d.ts (3 errors) ==== + export declare var a: { + (): a1.connectExport; + ~~~~~~~~~~~~~~~~ +!!! Cannot find name 'a1'. + test1: a1.connectModule; + ~~~~~~~~~~~~~~~~ +!!! Cannot find name 'a1'. + test2(): a1.connectModule; + ~~~~~~~~~~~~~~~~ +!!! Cannot find name 'a1'. + }; + +==== tests/cases/compiler/declFileImportModuleWithExportAssignment_0.d.ts (0 errors) ==== + declare module m2 { + interface connectModule { + (res: any, req: any, next: any): void; + } + interface connectExport { + use: (mod: connectModule) => connectExport; + listen: (port: number) => void; + } + } + declare var m2: { + (): m2.connectExport; + test1: m2.connectModule; + test2(): m2.connectModule; + }; + export = m2; + \ No newline at end of file diff --git a/tests/baselines/reference/declFileImportedTypeUseInTypeArgPosition.js b/tests/baselines/reference/declFileImportedTypeUseInTypeArgPosition.js index 8d1e4cd4b2ecf..249b4a2874c28 100644 --- a/tests/baselines/reference/declFileImportedTypeUseInTypeArgPosition.js +++ b/tests/baselines/reference/declFileImportedTypeUseInTypeArgPosition.js @@ -29,3 +29,19 @@ declare module 'mod1' { declare module 'moo' { var p: List; } + + +//// [DtsFileErrors] + + +==== tests/cases/compiler/declFileImportedTypeUseInTypeArgPosition.d.ts (1 errors) ==== + declare class List { + } + declare module 'mod1' { + } + declare module 'moo' { + var p: List; + ~~~~~ +!!! Cannot find name 'x'. + } + \ No newline at end of file diff --git a/tests/baselines/reference/declFileInternalAliases.js b/tests/baselines/reference/declFileInternalAliases.js index 5ae14f4148724..8b35b3d80d3f1 100644 --- a/tests/baselines/reference/declFileInternalAliases.js +++ b/tests/baselines/reference/declFileInternalAliases.js @@ -46,3 +46,23 @@ declare module m2 { export import x = m.c; var d: x; } + + +//// [DtsFileErrors] + + +==== tests/cases/compiler/declFileInternalAliases.d.ts (1 errors) ==== + declare module m { + class c { + } + } + declare module m1 { + var d: x; + ~ +!!! Cannot find name 'x'. + } + declare module m2 { + export import x = m.c; + var d: x; + } + \ No newline at end of file diff --git a/tests/baselines/reference/declInput-2.js b/tests/baselines/reference/declInput-2.js index 173f433cdca76..a109d89165a8d 100644 --- a/tests/baselines/reference/declInput-2.js +++ b/tests/baselines/reference/declInput-2.js @@ -82,3 +82,41 @@ declare module M { m3(): C; } } + + +//// [DtsFileErrors] + + +==== tests/cases/compiler/declInput-2.d.ts (5 errors) ==== + declare module M { + class E { + } + interface I1 { + } + class D { + private c; + m1: number; + m2: string; + m22: C; + ~ +!!! Cannot find name 'C'. + m23: E; + m24: I1; + m25: I2; + ~~ +!!! Cannot find name 'I2'. + m232(): E; + m242(): I1; + m252(): I2; + ~~ +!!! Cannot find name 'I2'. + m26(i: I1): void; + m262(i: I2): void; + ~~ +!!! Cannot find name 'I2'. + m3(): C; + ~ +!!! Cannot find name 'C'. + } + } + \ No newline at end of file diff --git a/tests/baselines/reference/declarationEmit_nameConflicts.js b/tests/baselines/reference/declarationEmit_nameConflicts.js index 7fc044a8aa98a..0f34f789abc8f 100644 --- a/tests/baselines/reference/declarationEmit_nameConflicts.js +++ b/tests/baselines/reference/declarationEmit_nameConflicts.js @@ -193,3 +193,67 @@ export declare module M.Q { } } } + + +//// [DtsFileErrors] + + +==== tests/cases/compiler/declarationEmit_nameConflicts_0.d.ts (1 errors) ==== + export declare module M { + function f(): void; + class C { + } + module N { + function g(): void; + interface I { + } + } + export import a = M.f; + export import b = M.C; + export import c = N; + export import d = im; + ~~~~~~~~~~~~~~~~~~~~~ +!!! Cannot find name 'im'. + } + export declare module M.P { + function f(): void; + class C { + } + module N { + function g(): void; + interface I { + } + } + export import im = M.P.f; + var a: () => void; + var b: typeof M.C; + var c: typeof M.N; + var g: () => void; + var d: typeof M.d; + } + export declare module M.Q { + function f(): void; + class C { + } + module N { + function g(): void; + interface I { + } + } + interface b extends M.C { + } + interface I extends M.N.I { + } + module c { + interface I extends M.N.I { + } + } + } + +==== tests/cases/compiler/declarationEmit_nameConflicts_1.d.ts (0 errors) ==== + declare module f { + class c { + } + } + export = f; + \ No newline at end of file diff --git a/tests/baselines/reference/exportAssignTypes.errors.txt b/tests/baselines/reference/exportAssignTypes.errors.txt index 6481447e3555f..c4dca71333f73 100644 --- a/tests/baselines/reference/exportAssignTypes.errors.txt +++ b/tests/baselines/reference/exportAssignTypes.errors.txt @@ -30,13 +30,10 @@ var x = 42; export = x; -==== tests/cases/conformance/externalModules/expBoolean.ts (1 errors) ==== +==== tests/cases/conformance/externalModules/expBoolean.ts (0 errors) ==== var x = true; export = x; - ~~~~~~~~~ - -!!! Cannot compile external modules unless the '--module' flag is provided. ==== tests/cases/conformance/externalModules/expArray.ts (0 errors) ==== var x = [1,2]; export = x; @@ -49,12 +46,9 @@ var x; export = x; -==== tests/cases/conformance/externalModules/expGeneric.ts (1 errors) ==== +==== tests/cases/conformance/externalModules/expGeneric.ts (0 errors) ==== function x(a: T){ - ~~~~ return a; - ~~~~~~ -!!! Cannot compile external modules unless the '--module' flag is provided. } export = x; \ No newline at end of file diff --git a/tests/baselines/reference/exportImport.js b/tests/baselines/reference/exportImport.js index cc91576247218..6c0e64f07103e 100644 --- a/tests/baselines/reference/exportImport.js +++ b/tests/baselines/reference/exportImport.js @@ -47,3 +47,22 @@ declare class Widget1 { export import w = require('./w1'); //// [consumer.d.ts] export declare function w(): Widget1; + + +//// [DtsFileErrors] + + +==== tests/cases/compiler/consumer.d.ts (1 errors) ==== + export declare function w(): Widget1; + ~~~~~~~ +!!! Cannot find name 'Widget1'. + +==== tests/cases/compiler/w1.d.ts (0 errors) ==== + export = Widget1; + declare class Widget1 { + name: string; + } + +==== tests/cases/compiler/exporter.d.ts (0 errors) ==== + export import w = require('./w1'); + \ No newline at end of file diff --git a/tests/baselines/reference/exportImportNonInstantiatedModule2.js b/tests/baselines/reference/exportImportNonInstantiatedModule2.js index 5cda04be520b6..9aa343ee86b57 100644 --- a/tests/baselines/reference/exportImportNonInstantiatedModule2.js +++ b/tests/baselines/reference/exportImportNonInstantiatedModule2.js @@ -39,3 +39,22 @@ interface Widget1 { export import w = require('./w1'); //// [consumer.d.ts] export declare function w(): Widget1; + + +//// [DtsFileErrors] + + +==== tests/cases/compiler/consumer.d.ts (1 errors) ==== + export declare function w(): Widget1; + ~~~~~~~ +!!! Cannot find name 'Widget1'. + +==== tests/cases/compiler/w1.d.ts (0 errors) ==== + export = Widget1; + interface Widget1 { + name: string; + } + +==== tests/cases/compiler/exporter.d.ts (0 errors) ==== + export import w = require('./w1'); + \ No newline at end of file diff --git a/tests/baselines/reference/functionExpressionReturningItself.js b/tests/baselines/reference/functionExpressionReturningItself.js index 7218fe12d7852..63e8e9734d273 100644 --- a/tests/baselines/reference/functionExpressionReturningItself.js +++ b/tests/baselines/reference/functionExpressionReturningItself.js @@ -9,3 +9,13 @@ var x = function somefn() { //// [functionExpressionReturningItself.d.ts] declare var x: () => typeof somefn; + + +//// [DtsFileErrors] + + +==== tests/cases/compiler/functionExpressionReturningItself.d.ts (1 errors) ==== + declare var x: () => typeof somefn; + ~~~~~~ +!!! Cannot find name 'somefn'. + \ No newline at end of file diff --git a/tests/baselines/reference/importDeclarationUsedAsTypeQuery.js b/tests/baselines/reference/importDeclarationUsedAsTypeQuery.js index 30493dc8ccffc..f7b470ba4112a 100644 --- a/tests/baselines/reference/importDeclarationUsedAsTypeQuery.js +++ b/tests/baselines/reference/importDeclarationUsedAsTypeQuery.js @@ -29,3 +29,19 @@ export declare class B { //// [importDeclarationUsedAsTypeQuery_1.d.ts] /// export declare var x: typeof a; + + +//// [DtsFileErrors] + + +==== tests/cases/compiler/importDeclarationUsedAsTypeQuery_1.d.ts (1 errors) ==== + /// + export declare var x: typeof a; + ~ +!!! Cannot find name 'a'. + +==== tests/cases/compiler/importDeclarationUsedAsTypeQuery_require.d.ts (0 errors) ==== + export declare class B { + id: number; + } + \ No newline at end of file diff --git a/tests/baselines/reference/internalAliasClass.js b/tests/baselines/reference/internalAliasClass.js index a116df0e2d4fb..0e4cb3f4ed565 100644 --- a/tests/baselines/reference/internalAliasClass.js +++ b/tests/baselines/reference/internalAliasClass.js @@ -34,3 +34,19 @@ declare module a { declare module c { var x: b; } + + +//// [DtsFileErrors] + + +==== tests/cases/compiler/internalAliasClass.d.ts (1 errors) ==== + declare module a { + class c { + } + } + declare module c { + var x: b; + ~ +!!! Cannot find name 'b'. + } + \ No newline at end of file diff --git a/tests/baselines/reference/internalAliasClassInsideLocalModuleWithoutExport.js b/tests/baselines/reference/internalAliasClassInsideLocalModuleWithoutExport.js index 795ff99e0cc34..5b896ddd7aca7 100644 --- a/tests/baselines/reference/internalAliasClassInsideLocalModuleWithoutExport.js +++ b/tests/baselines/reference/internalAliasClassInsideLocalModuleWithoutExport.js @@ -50,3 +50,22 @@ export declare module m2 { var cProp: c; } } + + +//// [DtsFileErrors] + + +==== tests/cases/compiler/internalAliasClassInsideLocalModuleWithoutExport.d.ts (1 errors) ==== + export declare module x { + class c { + foo(a: number): number; + } + } + export declare module m2 { + module m3 { + var cProp: c; + ~ +!!! Cannot find name 'c'. + } + } + \ No newline at end of file diff --git a/tests/baselines/reference/internalAliasClassInsideTopLevelModuleWithoutExport.js b/tests/baselines/reference/internalAliasClassInsideTopLevelModuleWithoutExport.js index 9402269ce2e35..de756dd743404 100644 --- a/tests/baselines/reference/internalAliasClassInsideTopLevelModuleWithoutExport.js +++ b/tests/baselines/reference/internalAliasClassInsideTopLevelModuleWithoutExport.js @@ -36,3 +36,18 @@ export declare module x { } } export declare var cProp: xc; + + +//// [DtsFileErrors] + + +==== tests/cases/compiler/internalAliasClassInsideTopLevelModuleWithoutExport.d.ts (1 errors) ==== + export declare module x { + class c { + foo(a: number): number; + } + } + export declare var cProp: xc; + ~~ +!!! Cannot find name 'xc'. + \ No newline at end of file diff --git a/tests/baselines/reference/internalAliasEnum.js b/tests/baselines/reference/internalAliasEnum.js index f102762fa0e11..55331cc6cf974 100644 --- a/tests/baselines/reference/internalAliasEnum.js +++ b/tests/baselines/reference/internalAliasEnum.js @@ -41,3 +41,22 @@ declare module a { declare module c { var bVal: b; } + + +//// [DtsFileErrors] + + +==== tests/cases/compiler/internalAliasEnum.d.ts (1 errors) ==== + declare module a { + enum weekend { + Friday = 0, + Saturday = 1, + Sunday = 2, + } + } + declare module c { + var bVal: b; + ~ +!!! Cannot find name 'b'. + } + \ No newline at end of file diff --git a/tests/baselines/reference/internalAliasEnumInsideLocalModuleWithoutExport.js b/tests/baselines/reference/internalAliasEnumInsideLocalModuleWithoutExport.js index 84984523f84dc..3767e38310e8b 100644 --- a/tests/baselines/reference/internalAliasEnumInsideLocalModuleWithoutExport.js +++ b/tests/baselines/reference/internalAliasEnumInsideLocalModuleWithoutExport.js @@ -41,3 +41,22 @@ export declare module a { export declare module c { var bVal: b; } + + +//// [DtsFileErrors] + + +==== tests/cases/compiler/internalAliasEnumInsideLocalModuleWithoutExport.d.ts (1 errors) ==== + export declare module a { + enum weekend { + Friday = 0, + Saturday = 1, + Sunday = 2, + } + } + export declare module c { + var bVal: b; + ~ +!!! Cannot find name 'b'. + } + \ No newline at end of file diff --git a/tests/baselines/reference/internalAliasEnumInsideTopLevelModuleWithoutExport.js b/tests/baselines/reference/internalAliasEnumInsideTopLevelModuleWithoutExport.js index cd53972b31118..0299b2d4a4d18 100644 --- a/tests/baselines/reference/internalAliasEnumInsideTopLevelModuleWithoutExport.js +++ b/tests/baselines/reference/internalAliasEnumInsideTopLevelModuleWithoutExport.js @@ -36,3 +36,20 @@ export declare module a { } } export declare var bVal: b; + + +//// [DtsFileErrors] + + +==== tests/cases/compiler/internalAliasEnumInsideTopLevelModuleWithoutExport.d.ts (1 errors) ==== + export declare module a { + enum weekend { + Friday = 0, + Saturday = 1, + Sunday = 2, + } + } + export declare var bVal: b; + ~ +!!! Cannot find name 'b'. + \ No newline at end of file diff --git a/tests/baselines/reference/internalAliasInitializedModule.js b/tests/baselines/reference/internalAliasInitializedModule.js index c1d3a3c9f3c2d..110d64e738847 100644 --- a/tests/baselines/reference/internalAliasInitializedModule.js +++ b/tests/baselines/reference/internalAliasInitializedModule.js @@ -41,3 +41,21 @@ declare module a { declare module c { var x: b.c; } + + +//// [DtsFileErrors] + + +==== tests/cases/compiler/internalAliasInitializedModule.d.ts (1 errors) ==== + declare module a { + module b { + class c { + } + } + } + declare module c { + var x: b.c; + ~~~ +!!! Cannot find name 'b'. + } + \ No newline at end of file diff --git a/tests/baselines/reference/internalAliasInitializedModuleInsideLocalModuleWithoutExport.js b/tests/baselines/reference/internalAliasInitializedModuleInsideLocalModuleWithoutExport.js index f329036922361..57320ccdbbda6 100644 --- a/tests/baselines/reference/internalAliasInitializedModuleInsideLocalModuleWithoutExport.js +++ b/tests/baselines/reference/internalAliasInitializedModuleInsideLocalModuleWithoutExport.js @@ -41,3 +41,21 @@ export declare module a { export declare module c { var x: b.c; } + + +//// [DtsFileErrors] + + +==== tests/cases/compiler/internalAliasInitializedModuleInsideLocalModuleWithoutExport.d.ts (1 errors) ==== + export declare module a { + module b { + class c { + } + } + } + export declare module c { + var x: b.c; + ~~~ +!!! Cannot find name 'b'. + } + \ No newline at end of file diff --git a/tests/baselines/reference/internalAliasInitializedModuleInsideTopLevelModuleWithoutExport.js b/tests/baselines/reference/internalAliasInitializedModuleInsideTopLevelModuleWithoutExport.js index 308d792bf3941..4983a0787fa67 100644 --- a/tests/baselines/reference/internalAliasInitializedModuleInsideTopLevelModuleWithoutExport.js +++ b/tests/baselines/reference/internalAliasInitializedModuleInsideTopLevelModuleWithoutExport.js @@ -36,3 +36,19 @@ export declare module a { } } export declare var x: b.c; + + +//// [DtsFileErrors] + + +==== tests/cases/compiler/internalAliasInitializedModuleInsideTopLevelModuleWithoutExport.d.ts (1 errors) ==== + export declare module a { + module b { + class c { + } + } + } + export declare var x: b.c; + ~~~ +!!! Cannot find name 'b'. + \ No newline at end of file diff --git a/tests/baselines/reference/internalAliasInterface.js b/tests/baselines/reference/internalAliasInterface.js index 1be40a65ea081..a3a1f72302c6e 100644 --- a/tests/baselines/reference/internalAliasInterface.js +++ b/tests/baselines/reference/internalAliasInterface.js @@ -25,3 +25,19 @@ declare module a { declare module c { var x: b; } + + +//// [DtsFileErrors] + + +==== tests/cases/compiler/internalAliasInterface.d.ts (1 errors) ==== + declare module a { + interface I { + } + } + declare module c { + var x: b; + ~ +!!! Cannot find name 'b'. + } + \ No newline at end of file diff --git a/tests/baselines/reference/internalAliasInterfaceInsideLocalModuleWithoutExport.js b/tests/baselines/reference/internalAliasInterfaceInsideLocalModuleWithoutExport.js index 41e9a3dbc8c0d..3dec9ea9bc6de 100644 --- a/tests/baselines/reference/internalAliasInterfaceInsideLocalModuleWithoutExport.js +++ b/tests/baselines/reference/internalAliasInterfaceInsideLocalModuleWithoutExport.js @@ -27,3 +27,19 @@ export declare module a { export declare module c { var x: b; } + + +//// [DtsFileErrors] + + +==== tests/cases/compiler/internalAliasInterfaceInsideLocalModuleWithoutExport.d.ts (1 errors) ==== + export declare module a { + interface I { + } + } + export declare module c { + var x: b; + ~ +!!! Cannot find name 'b'. + } + \ No newline at end of file diff --git a/tests/baselines/reference/internalAliasInterfaceInsideTopLevelModuleWithoutExport.js b/tests/baselines/reference/internalAliasInterfaceInsideTopLevelModuleWithoutExport.js index cc9d21805d87c..b96abee595dfe 100644 --- a/tests/baselines/reference/internalAliasInterfaceInsideTopLevelModuleWithoutExport.js +++ b/tests/baselines/reference/internalAliasInterfaceInsideTopLevelModuleWithoutExport.js @@ -20,3 +20,17 @@ export declare module a { } } export declare var x: b; + + +//// [DtsFileErrors] + + +==== tests/cases/compiler/internalAliasInterfaceInsideTopLevelModuleWithoutExport.d.ts (1 errors) ==== + export declare module a { + interface I { + } + } + export declare var x: b; + ~ +!!! Cannot find name 'b'. + \ No newline at end of file diff --git a/tests/baselines/reference/internalAliasUninitializedModule.js b/tests/baselines/reference/internalAliasUninitializedModule.js index 509d3711f5a60..827868d1c3733 100644 --- a/tests/baselines/reference/internalAliasUninitializedModule.js +++ b/tests/baselines/reference/internalAliasUninitializedModule.js @@ -32,3 +32,22 @@ declare module a { declare module c { var x: b.I; } + + +//// [DtsFileErrors] + + +==== tests/cases/compiler/internalAliasUninitializedModule.d.ts (1 errors) ==== + declare module a { + module b { + interface I { + foo(): any; + } + } + } + declare module c { + var x: b.I; + ~~~ +!!! Cannot find name 'b'. + } + \ No newline at end of file diff --git a/tests/baselines/reference/internalAliasUninitializedModuleInsideLocalModuleWithoutExport.js b/tests/baselines/reference/internalAliasUninitializedModuleInsideLocalModuleWithoutExport.js index 3b4c5d1bd0dcf..415d4d2b4ebf7 100644 --- a/tests/baselines/reference/internalAliasUninitializedModuleInsideLocalModuleWithoutExport.js +++ b/tests/baselines/reference/internalAliasUninitializedModuleInsideLocalModuleWithoutExport.js @@ -32,3 +32,22 @@ export declare module a { export declare module c { var x: b.I; } + + +//// [DtsFileErrors] + + +==== tests/cases/compiler/internalAliasUninitializedModuleInsideLocalModuleWithoutExport.d.ts (1 errors) ==== + export declare module a { + module b { + interface I { + foo(): any; + } + } + } + export declare module c { + var x: b.I; + ~~~ +!!! Cannot find name 'b'. + } + \ No newline at end of file diff --git a/tests/baselines/reference/internalAliasUninitializedModuleInsideTopLevelModuleWithoutExport.js b/tests/baselines/reference/internalAliasUninitializedModuleInsideTopLevelModuleWithoutExport.js index ff9249b8266d4..c89df290f4412 100644 --- a/tests/baselines/reference/internalAliasUninitializedModuleInsideTopLevelModuleWithoutExport.js +++ b/tests/baselines/reference/internalAliasUninitializedModuleInsideTopLevelModuleWithoutExport.js @@ -26,3 +26,20 @@ export declare module a { } } export declare var x: b.I; + + +//// [DtsFileErrors] + + +==== tests/cases/compiler/internalAliasUninitializedModuleInsideTopLevelModuleWithoutExport.d.ts (1 errors) ==== + export declare module a { + module b { + interface I { + foo(): any; + } + } + } + export declare var x: b.I; + ~~~ +!!! Cannot find name 'b'. + \ No newline at end of file diff --git a/tests/baselines/reference/missingImportAfterModuleImport.js b/tests/baselines/reference/missingImportAfterModuleImport.js index 1ab1376589c03..842aae0884ede 100644 --- a/tests/baselines/reference/missingImportAfterModuleImport.js +++ b/tests/baselines/reference/missingImportAfterModuleImport.js @@ -49,3 +49,28 @@ declare class MainModule { constructor(); } export = MainModule; + + +//// [DtsFileErrors] + + +==== tests/cases/compiler/missingImportAfterModuleImport_1.d.ts (1 errors) ==== + /// + declare class MainModule { + SubModule: SubModule; + ~~~~~~~~~ +!!! Cannot find name 'SubModule'. + constructor(); + } + export = MainModule; + +==== tests/cases/compiler/missingImportAfterModuleImport_0.d.ts (0 errors) ==== + declare module "SubModule" { + class SubModule { + static StaticVar: number; + InstanceVar: number; + constructor(); + } + export = SubModule; + } + \ No newline at end of file diff --git a/tests/baselines/reference/privacyCheckTypeOfInvisibleModuleNoError.js b/tests/baselines/reference/privacyCheckTypeOfInvisibleModuleNoError.js index 30183ed2125e3..76656e5a86aa4 100644 --- a/tests/baselines/reference/privacyCheckTypeOfInvisibleModuleNoError.js +++ b/tests/baselines/reference/privacyCheckTypeOfInvisibleModuleNoError.js @@ -23,3 +23,15 @@ var Outer; declare module Outer { var f: typeof Inner; } + + +//// [DtsFileErrors] + + +==== tests/cases/compiler/privacyCheckTypeOfInvisibleModuleNoError.d.ts (1 errors) ==== + declare module Outer { + var f: typeof Inner; + ~~~~~ +!!! Cannot find name 'Inner'. + } + \ No newline at end of file From d09e5508e2a1ea9af7eef534bf98a137430610cf Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Thu, 17 Jul 2014 18:14:13 -0700 Subject: [PATCH 2/4] Report global errors and re-enable assert for the number of errors reported --- src/harness/compilerRunner.ts | 28 ++++++++++++------- .../reference/parser509698.errors.txt | 8 ++++++ .../typeCheckTypeArgument.errors.txt | 8 ++++++ 3 files changed, 34 insertions(+), 10 deletions(-) diff --git a/src/harness/compilerRunner.ts b/src/harness/compilerRunner.ts index 3f3c1d5f0d548..4834fc817d07c 100644 --- a/src/harness/compilerRunner.ts +++ b/src/harness/compilerRunner.ts @@ -118,9 +118,25 @@ class CompilerBaselineRunner extends RunnerBase { otherFiles: { unitName: string; content: string }[], result: Harness.Compiler.CompilerResult ) { + var outputLines: string[] = []; // Count up all the errors we find so we don't miss any var totalErrorsReported = 0; + + function outputErrorText(error: Harness.Compiler.MinimalDiagnostic) { + var errLines = RunnerBase.removeFullPaths(error.message) + .split('\n') + .map(s => s.length > 0 && s.charAt(s.length - 1) === '\r' ? s.substr(0, s.length - 1) : s) + .filter(s => s.length > 0) + .map(s => '!!! ' + s); + errLines.forEach(e => outputLines.push(e)); + + totalErrorsReported++; + } + + // Report glovbal errors: + var globalErrors = result.errors.filter(err => !err.filename); + globalErrors.forEach(err => outputErrorText(err)); // 'merge' the lines of each input file with any errors associated with it toBeCompiled.concat(otherFiles).forEach(inputFile => { @@ -130,8 +146,6 @@ class CompilerBaselineRunner extends RunnerBase { return errFn && errFn === inputFile.unitName; }); - // Add this to the number of errors we've seen so far - totalErrorsReported += fileErrors.length; // Header outputLines.push('==== ' + inputFile.unitName + ' (' + fileErrors.length + ' errors) ===='); @@ -176,12 +190,7 @@ class CompilerBaselineRunner extends RunnerBase { // Just like above, we need to do a split on a string instead of on a regex // because the JS engine does regexes wrong - var errLines = RunnerBase.removeFullPaths(err.message) - .split('\n') - .map(s => s.length > 0 && s.charAt(s.length - 1) === '\r' ? s.substr(0, s.length - 1) : s) - .filter(s => s.length > 0) - .map(s => '!!! ' + s); - errLines.forEach(e => outputLines.push(e)); + outputErrorText(err); markedErrorCount++; } } @@ -193,8 +202,7 @@ class CompilerBaselineRunner extends RunnerBase { }); // Verify we didn't miss any errors in total - // NEWTODO: Re-enable this -- somehow got broken - // assert.equal(totalErrorsReported, result.errors.length, 'total number of errors'); + assert.equal(totalErrorsReported, result.errors.length, 'total number of errors'); return outputLines.join('\r\n'); } diff --git a/tests/baselines/reference/parser509698.errors.txt b/tests/baselines/reference/parser509698.errors.txt index ded1a87c9f33b..8a8b23d44e4b9 100644 --- a/tests/baselines/reference/parser509698.errors.txt +++ b/tests/baselines/reference/parser509698.errors.txt @@ -1,3 +1,11 @@ +!!! Cannot find global type 'Array'. +!!! Cannot find global type 'Boolean'. +!!! Cannot find global type 'Function'. +!!! Cannot find global type 'IArguments'. +!!! Cannot find global type 'Number'. +!!! Cannot find global type 'Object'. +!!! Cannot find global type 'RegExp'. +!!! Cannot find global type 'String'. ==== tests/cases/conformance/parser/ecmascript5/RegressionTests/parser509698.ts (0 errors) ==== ///