From 05ec43a0f3e6669b35d9d7b4b41f4ae485e25619 Mon Sep 17 00:00:00 2001 From: Vladimir Matveev Date: Fri, 23 Jan 2015 12:04:55 -0800 Subject: [PATCH] make sure that enum values are computed before the emit --- src/compiler/checker.ts | 4 ++-- src/harness/fourslash.ts | 12 ++++++++++++ .../constEnumsEmitOutputInMultipleFiles.ts | 18 ++++++++++++++++++ tests/cases/fourslash/fourslash.ts | 4 ++++ 4 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 tests/cases/fourslash/constEnumsEmitOutputInMultipleFiles.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 7233c2e85d5..a606a3f00fd 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -10001,8 +10001,8 @@ module ts { if (symbol && (symbol.flags & SymbolFlags.EnumMember)) { var declaration = symbol.valueDeclaration; var constantValue: number; - if (declaration.kind === SyntaxKind.EnumMember && (constantValue = getNodeLinks(declaration).enumMemberValue) !== undefined) { - return constantValue; + if (declaration.kind === SyntaxKind.EnumMember) { + return getEnumMemberValue(declaration); } } diff --git a/src/harness/fourslash.ts b/src/harness/fourslash.ts index cfc83af76e5..512248197a4 100644 --- a/src/harness/fourslash.ts +++ b/src/harness/fourslash.ts @@ -548,6 +548,18 @@ module FourSlash { } } + public verifyGetEmitOutputForCurrentFile(expected: string): void { + 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); + } + this.taoInvalidReason = 'verifyGetEmitOutputForCurrentFile impossible'; + var actual = emit.outputFiles[0].text; + if (actual !== expected) { + this.raiseError("Expected emit output to be '" + expected + "', but got '" + actual + "'"); + } + } + public verifyMemberListContains(symbol: string, text?: string, documentation?: string, kind?: string) { this.scenarioActions.push(''); this.scenarioActions.push(''); diff --git a/tests/cases/fourslash/constEnumsEmitOutputInMultipleFiles.ts b/tests/cases/fourslash/constEnumsEmitOutputInMultipleFiles.ts new file mode 100644 index 00000000000..0f6be184d8c --- /dev/null +++ b/tests/cases/fourslash/constEnumsEmitOutputInMultipleFiles.ts @@ -0,0 +1,18 @@ +/// + +// @Filename: a.ts +////const enum TestEnum { +//// Foo, Bar +////} +////var testFirstFile = TestEnum.Bar; + +// @Filename: b.ts +/////// +/////*1*/ +////var testInOtherFile = TestEnum.Bar; + +goTo.marker("1"); +verify.verifyGetEmitOutputForCurrentFile( +"/// \r\n\ +var testInOtherFile = 1 /* Bar */;\r\n" + ) \ No newline at end of file diff --git a/tests/cases/fourslash/fourslash.ts b/tests/cases/fourslash/fourslash.ts index 0f458041521..5b88b15f9fa 100644 --- a/tests/cases/fourslash/fourslash.ts +++ b/tests/cases/fourslash/fourslash.ts @@ -264,6 +264,10 @@ module FourSlashInterface { FourSlash.currentTestState.verifyCurrentFileContent(text); } + public verifyGetEmitOutputForCurrentFile(expected: string): void { + FourSlash.currentTestState.verifyGetEmitOutputForCurrentFile(expected); + } + public currentParameterHelpArgumentNameIs(name: string) { FourSlash.currentTestState.verifyCurrentParameterHelpName(name); }