From 7320a189f17beedc05f377e7e1491904d052b2bf Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Wed, 17 Sep 2014 15:19:20 -0700 Subject: [PATCH] Adding rename tests. --- src/harness/fourslash.ts | 38 ++++++++++++++++++++ tests/cases/fourslash/fourslash.ts | 8 +++++ tests/cases/fourslash/getRenameInfoTests1.ts | 8 +++++ tests/cases/fourslash/getRenameInfoTests2.ts | 8 +++++ 4 files changed, 62 insertions(+) create mode 100644 tests/cases/fourslash/getRenameInfoTests1.ts create mode 100644 tests/cases/fourslash/getRenameInfoTests2.ts diff --git a/src/harness/fourslash.ts b/src/harness/fourslash.ts index 0bcea9367e4..26af0a77b31 100644 --- a/src/harness/fourslash.ts +++ b/src/harness/fourslash.ts @@ -832,6 +832,44 @@ module FourSlash { } } + private validate(name: string, expected: string, actual: string) { + if (expected && expected !== actual) { + throw new Error("Expected " + name + " '" + expected + "'. Got '" + actual + "' instead."); + } + } + + public verifyRenameInfoSucceeded(displayName?: string, fullDisplayName?: string, kind?: string, kindModifiers?: string) { + var renameInfo = this.languageService.getRenameInfo(this.activeFile.fileName, this.currentCaretPosition); + if (!renameInfo.canRename) { + throw new Error("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) { + throw new Error("Expected a single range to be selected in the test file."); + } + + var expectedRange = this.getRanges()[0]; + if (renameInfo.triggerSpan.start() !== expectedRange.start || + renameInfo.triggerSpan.end() !== expectedRange.end) { + throw new Error("Expected triggerSpan [" + expectedRange.start + "," + expectedRange.end + "). Got [" + + renameInfo.triggerSpan.start() + "," + renameInfo.triggerSpan.end() + ") instead."); + } + } + + public verifyRenameInfoFailed(message?: string) { + var renameInfo = this.languageService.getRenameInfo(this.activeFile.fileName, this.currentCaretPosition); + if (renameInfo.canRename) { + throw new Error("Rename was expected to fail"); + } + + this.validate("error", message, renameInfo.localizedErrorMessage); + } + //private getFormalParameter() { // var help = this.languageService.getSignatureHelpItems(this.activeFile.fileName, this.currentCaretPosition); // return help.formal; diff --git a/tests/cases/fourslash/fourslash.ts b/tests/cases/fourslash/fourslash.ts index e1b1e26c3c2..09ca70134f9 100644 --- a/tests/cases/fourslash/fourslash.ts +++ b/tests/cases/fourslash/fourslash.ts @@ -390,6 +390,14 @@ module FourSlashInterface { public semanticClassificationsAre(...classifications: { classificationType: string; text: string }[]) { FourSlash.currentTestState.verifySemanticClassifications(classifications); } + + public renameInfoSucceeded(displayName?: string, fullDisplayName?: string, kind?: string, kindModifiers?: string) { + FourSlash.currentTestState.verifyRenameInfoSucceeded(displayName, fullDisplayName, kind, kindModifiers) + } + + public renameInfoFailed(message?: string) { + FourSlash.currentTestState.verifyRenameInfoFailed(message) + } } export class edit { diff --git a/tests/cases/fourslash/getRenameInfoTests1.ts b/tests/cases/fourslash/getRenameInfoTests1.ts new file mode 100644 index 00000000000..6f4300282d6 --- /dev/null +++ b/tests/cases/fourslash/getRenameInfoTests1.ts @@ -0,0 +1,8 @@ +/// + +////class [|/**/C|] { +//// +////} + +goTo.marker(""); +verify.renameInfoSucceeded("C"); \ No newline at end of file diff --git a/tests/cases/fourslash/getRenameInfoTests2.ts b/tests/cases/fourslash/getRenameInfoTests2.ts new file mode 100644 index 00000000000..93e8e451b4a --- /dev/null +++ b/tests/cases/fourslash/getRenameInfoTests2.ts @@ -0,0 +1,8 @@ +/// + +/////**/class C { +//// +////} + +goTo.marker(""); +verify.renameInfoFailed(); \ No newline at end of file