From bef488efeb5f1d0bade33a04fd198a14fe55caee Mon Sep 17 00:00:00 2001 From: Akshita Agarwal Date: Wed, 4 Apr 2018 13:56:44 -0700 Subject: [PATCH 01/11] CsharpLoggerObserver --- .../logging/CsharpLoggerObserver.test.ts | 157 +++++++++--------- 1 file changed, 78 insertions(+), 79 deletions(-) diff --git a/test/unitTests/logging/CsharpLoggerObserver.test.ts b/test/unitTests/logging/CsharpLoggerObserver.test.ts index f0611272a8..88b02c4963 100644 --- a/test/unitTests/logging/CsharpLoggerObserver.test.ts +++ b/test/unitTests/logging/CsharpLoggerObserver.test.ts @@ -10,64 +10,9 @@ import { PlatformInformation } from '../../../src/platform'; import { PackageError } from '../../../src/packages'; import * as Event from '../../../src/omnisharp/loggingEvents'; -suite("CsharpLoggerObserver: Download Messages", () => { +suite("CsharpLoggerObserver", () => { suiteSetup(() => should()); - [ - { - events: [], - expected: "" - }, - { - events: [new Event.DownloadStart("Started")], - expected: "Started" - }, - { - events: [new Event.DownloadStart("Started"), new Event.DownloadProgress(100)], - expected: "Started...................." - }, - { - events: [new Event.DownloadStart("Started"), new Event.DownloadProgress(10), new Event.DownloadProgress(50), new Event.DownloadProgress(100)], - expected: "Started...................." - }, - { - events: [new Event.DownloadStart("Started"), new Event.DownloadProgress(10), new Event.DownloadProgress(50)], - expected: "Started.........." - }, - { - events: [new Event.DownloadStart("Started"), new Event.DownloadProgress(50)], - expected: "Started.........." - }, - { - events: [new Event.DownloadStart("Started"), new Event.DownloadProgress(50), new Event.DownloadProgress(50), new Event.DownloadProgress(50)], - expected: "Started.........." - }, - { - events: [new Event.DownloadStart("Started"), new Event.DownloadProgress(100), new Event.DownloadSuccess("Done")], - expected: "Started....................Done\n" - }, - { - events: [new Event.DownloadStart("Started"), new Event.DownloadProgress(50), new Event.DownloadFailure("Failed")], - expected: "Started..........Failed\n" - }, - ].forEach((element) => { - test(`Prints the download status to the logger as ${element.expected}`, () => { - let logOutput = ""; - - let observer = new CsharpLoggerObserver({ - ...getNullChannel(), - appendLine: (text?: string) => { logOutput += `${text}\n`; }, - append: (text?: string) => { logOutput += text; } - }); - - element.events.forEach((message: Event.BaseEvent) => observer.post(message)); - expect(logOutput).to.be.equal(element.expected); - }); - }); -}); - -suite('CsharpLoggerObsever', () => { - suiteSetup(() => should()); let logOutput = ""; let observer = new CsharpLoggerObserver({ ...getNullChannel(), @@ -85,28 +30,83 @@ suite('CsharpLoggerObsever', () => { expect(logOutput).to.contain("MyArchitecture"); }); - test('Event.InstallationFailure: Stage and Error is logged if not a PackageError', () => { - let event = new Event.InstallationFailure("someStage", new Error("someError")); - observer.post(event); - expect(logOutput).to.contain(event.stage); - expect(logOutput).to.contain(event.error.toString()); - }); - - test('Event.InstallationFailure: Stage and Error is logged if a PackageError without inner error', () => { - let event = new Event.InstallationFailure("someStage", new PackageError("someError", null, null)); - observer.post(event); - expect(logOutput).to.contain(event.stage); - expect(logOutput).to.contain(event.error.message); + suite("InstallationFailure", () => { + test('Stage and Error is logged if not a PackageError', () => { + let event = new Event.InstallationFailure("someStage", new Error("someError")); + observer.post(event); + expect(logOutput).to.contain(event.stage); + expect(logOutput).to.contain(event.error.toString()); + }); + + test('Stage and Error is logged if a PackageError without inner error', () => { + let event = new Event.InstallationFailure("someStage", new PackageError("someError", null, null)); + observer.post(event); + expect(logOutput).to.contain(event.stage); + expect(logOutput).to.contain(event.error.message); + }); + + test('Stage and Inner error is logged if a PackageError without inner error', () => { + let event = new Event.InstallationFailure("someStage", new PackageError("someError", null, "innerError")); + observer.post(event); + expect(logOutput).to.contain(event.stage); + expect(logOutput).to.contain(event.error.innerError.toString()); + }); }); - test('Event.InstallationFailure: Stage and Inner error is logged if a PackageError without inner error', () => { - let event = new Event.InstallationFailure("someStage", new PackageError("someError", null, "innerError")); - observer.post(event); - expect(logOutput).to.contain(event.stage); - expect(logOutput).to.contain(event.error.innerError.toString()); + suite('Download',() => { + [ + { + events: [], + expected: "" + }, + { + events: [new Event.DownloadStart("Started")], + expected: "Started" + }, + { + events: [new Event.DownloadStart("Started"), new Event.DownloadProgress(100)], + expected: "Started...................." + }, + { + events: [new Event.DownloadStart("Started"), new Event.DownloadProgress(10), new Event.DownloadProgress(50), new Event.DownloadProgress(100)], + expected: "Started...................." + }, + { + events: [new Event.DownloadStart("Started"), new Event.DownloadProgress(10), new Event.DownloadProgress(50)], + expected: "Started.........." + }, + { + events: [new Event.DownloadStart("Started"), new Event.DownloadProgress(50)], + expected: "Started.........." + }, + { + events: [new Event.DownloadStart("Started"), new Event.DownloadProgress(50), new Event.DownloadProgress(50), new Event.DownloadProgress(50)], + expected: "Started.........." + }, + { + events: [new Event.DownloadStart("Started"), new Event.DownloadProgress(100), new Event.DownloadSuccess("Done")], + expected: "Started....................Done\n" + }, + { + events: [new Event.DownloadStart("Started"), new Event.DownloadProgress(50), new Event.DownloadFailure("Failed")], + expected: "Started..........Failed\n" + }, + ].forEach((element) => { + test(`Prints the download status to the logger as ${element.expected}`, () => { + let logOutput = ""; + + let observer = new CsharpLoggerObserver({ + ...getNullChannel(), + appendLine: (text?: string) => { logOutput += `${text}\n`; }, + append: (text?: string) => { logOutput += text; } + }); + + element.events.forEach((message: Event.BaseEvent) => observer.post(message)); + expect(logOutput).to.be.equal(element.expected); + }); + }); }); - [ { message: new Event.DebuggerPrerequisiteFailure('Some failure message'), @@ -122,25 +122,25 @@ suite('CsharpLoggerObsever', () => { expect(logOutput).to.contain(element.expected); })); - test(`Event.ActivaltionFailure: Some message is logged`, () => { + test(`ActivaltionFailure: Some message is logged`, () => { let event = new Event.ActivationFailure(); observer.post(event); expect(logOutput).to.not.be.empty; }); - test(`Event.ProjectJsonDeprecatedWarning: Some message is logged`, () => { + test(`ProjectJsonDeprecatedWarning: Some message is logged`, () => { let event = new Event.ProjectJsonDeprecatedWarning(); observer.post(event); expect(logOutput).to.not.be.empty; }); - test(`Event.ProjectJsonDeprecatedWarning: Some message is logged`, () => { + test(`InstallationSuccess: Some message is logged`, () => { let event = new Event.InstallationSuccess(); observer.post(event); expect(logOutput).to.not.be.empty; }); - test(`Event.InstallationProgress: Progress message is logged`, () => { + test(`InstallationProgress: Progress message is logged`, () => { let event = new Event.InstallationProgress("someStage", "someMessage"); observer.post(event); expect(logOutput).to.contain(event.message); @@ -151,5 +151,4 @@ suite('CsharpLoggerObsever', () => { observer.post(event); expect(logOutput).to.contain(event.packageInfo); }); - }); From e38c92d04db334eddeff2c7e2ade7283b1c51017 Mon Sep 17 00:00:00 2001 From: Akshita Agarwal Date: Wed, 4 Apr 2018 14:35:07 -0700 Subject: [PATCH 02/11] dotnetchannelobserver --- .../logging/DotnetChannelObserver.test.ts | 40 +++++++------------ 1 file changed, 15 insertions(+), 25 deletions(-) diff --git a/test/unitTests/logging/DotnetChannelObserver.test.ts b/test/unitTests/logging/DotnetChannelObserver.test.ts index 9dd046a3e1..d1c437bd98 100644 --- a/test/unitTests/logging/DotnetChannelObserver.test.ts +++ b/test/unitTests/logging/DotnetChannelObserver.test.ts @@ -10,34 +10,24 @@ import { CommandDotNetRestoreStart, BaseEvent } from '../../../src/omnisharp/log suite("DotnetChannelObserver", () => { suiteSetup(() => should()); + let hasShown: boolean; + let hasCleared: boolean; - [ - new CommandDotNetRestoreStart() - ].forEach((event: BaseEvent) => { - test(`Clears the channel for ${event.constructor.name}`, () => { - let hasCleared = false; - let observer = new DotNetChannelObserver({ - ...getNullChannel(), - clear: () => { hasCleared = true; } - }); - - observer.post(event); - expect(hasCleared).to.be.true; - }); + let observer = new DotNetChannelObserver({ + ...getNullChannel(), + clear: () => { hasCleared = true; }, + show: () => { hasShown = true; } }); - [ - new CommandDotNetRestoreStart() - ].forEach((event: BaseEvent) => { - test(`Shows the channel for ${event.constructor.name}`, () => { - let hasShown = false; - let observer = new DotNetChannelObserver({ - ...getNullChannel(), - show: () => { hasShown = true; } - }); + setup(() => { + hasShown = false; + hasCleared = false; + }); - observer.post(event); - expect(hasShown).to.be.true; - }); + test(`CommandDotNetRestoreStart : Clears and shows the channel`, () => { + let event = new CommandDotNetRestoreStart(); + observer.post(event); + expect(hasCleared).to.be.true; + expect(hasShown).to.be.true; }); }); From 2bd2b31c890b28658ce7c778a0c1b8656c02aee8 Mon Sep 17 00:00:00 2001 From: Akshita Agarwal Date: Wed, 4 Apr 2018 17:06:38 -0700 Subject: [PATCH 03/11] TelemetryObserver --- .../logging/TelemetryObserver.test.ts | 103 +++++++++--------- 1 file changed, 53 insertions(+), 50 deletions(-) diff --git a/test/unitTests/logging/TelemetryObserver.test.ts b/test/unitTests/logging/TelemetryObserver.test.ts index 868b2eb8c7..826d9f8ef7 100644 --- a/test/unitTests/logging/TelemetryObserver.test.ts +++ b/test/unitTests/logging/TelemetryObserver.test.ts @@ -41,23 +41,6 @@ suite('TelemetryReporterObserver', () => { expect(name).to.be.not.empty; }); - test("InstallationFailure: Telemetry Props contains platform information, install stage and an event name", () => { - let event = new InstallationFailure("someStage", "someError"); - observer.post(event); - expect(property).to.have.property("platform.architecture", platformInfo.architecture); - expect(property).to.have.property("platform.platform", platformInfo.platform); - expect(property).to.have.property("installStage"); - expect(name).to.not.be.empty; - }); - - test(`InstallationFailure: Telemetry Props contains message and packageUrl if error is package error`, () => { - let error = new PackageError("someError", { "description": "foo", "url": "someurl" }); - let event = new InstallationFailure("someStage", error); - observer.post(event); - expect(property).to.have.property("error.message", error.message); - expect(property).to.have.property("error.packageUrl", error.pkg.url); - }); - test('InstallationSuccess: Telemetry props contain installation stage', () => { let event = new InstallationSuccess(); observer.post(event); @@ -65,46 +48,66 @@ suite('TelemetryReporterObserver', () => { expect(property).to.have.property("installStage", "completeSuccess"); }); - test('TestExecutionCountReport: SendTelemetryEvent is called for "RunTest" and "DebugTest"', () => { - let event = new TestExecutionCountReport({ "framework1": 20 }, { "framework2": 30 }); - observer.post(event); - expect(name).to.contain("RunTest"); - expect(name).to.contain("DebugTest"); - expect(measure).to.be.containingAllOf([event.debugCounts, event.runCounts]); - }); - - test('TestExecutionCountReport: SendTelemetryEvent is not called for empty run count', () => { - let event = new TestExecutionCountReport({ "framework1": 20 }, null); - observer.post(event); - expect(name).to.not.contain("RunTest"); - expect(name).to.contain("DebugTest"); - expect(measure).to.be.containingAllOf([event.debugCounts]); - }); - - test('TestExecutionCountReport: SendTelemetryEvent is not called for empty debug count', () => { - let event = new TestExecutionCountReport(null, { "framework1": 20 }); - observer.post(event); - expect(name).to.contain("RunTest"); - expect(name).to.not.contain("DebugTest"); - expect(measure).to.be.containingAllOf([event.runCounts]); - }); - - test('TestExecutionCountReport: SendTelemetryEvent is not called for empty debug and run counts', () => { - let event = new TestExecutionCountReport(null, null); - observer.post(event); - expect(name).to.be.empty; - expect(measure).to.be.empty; - }); - [ new OmnisharpDelayTrackerEventMeasures("someEvent", { someKey: 1 }), new OmnisharpStart("startEvent", { someOtherKey: 2 }) ].forEach((event: TelemetryEventWithMeasures) => { - test(`${event.constructor.name}`, () => { + test(`${event.constructor.name}: SendTelemetry event is called with the name and measures`, () => { observer.post(event); expect(name).to.contain(event.eventName); expect(measure).to.be.containingAllOf([event.measures]); }); }); - + + suite('InstallationFailure', () => { + test("Telemetry Props contains platform information, install stage and an event name", () => { + let event = new InstallationFailure("someStage", "someError"); + observer.post(event); + expect(property).to.have.property("platform.architecture", platformInfo.architecture); + expect(property).to.have.property("platform.platform", platformInfo.platform); + expect(property).to.have.property("installStage"); + expect(name).to.not.be.empty; + }); + + test(`Telemetry Props contains message and packageUrl if error is package error`, () => { + let error = new PackageError("someError", { "description": "foo", "url": "someurl" }); + let event = new InstallationFailure("someStage", error); + observer.post(event); + expect(property).to.have.property("error.message", error.message); + expect(property).to.have.property("error.packageUrl", error.pkg.url); + }); + }); + + suite('TestExecutionCountReport', () => { + test('SendTelemetryEvent is called for "RunTest" and "DebugTest"', () => { + let event = new TestExecutionCountReport({ "framework1": 20 }, { "framework2": 30 }); + observer.post(event); + expect(name).to.contain("RunTest"); + expect(name).to.contain("DebugTest"); + expect(measure).to.be.containingAllOf([event.debugCounts, event.runCounts]); + }); + + test('SendTelemetryEvent is not called for empty run count', () => { + let event = new TestExecutionCountReport({ "framework1": 20 }, null); + observer.post(event); + expect(name).to.not.contain("RunTest"); + expect(name).to.contain("DebugTest"); + expect(measure).to.be.containingAllOf([event.debugCounts]); + }); + + test('SendTelemetryEvent is not called for empty debug count', () => { + let event = new TestExecutionCountReport(null, { "framework1": 20 }); + observer.post(event); + expect(name).to.contain("RunTest"); + expect(name).to.not.contain("DebugTest"); + expect(measure).to.be.containingAllOf([event.runCounts]); + }); + + test('SendTelemetryEvent is not called for empty debug and run counts', () => { + let event = new TestExecutionCountReport(null, null); + observer.post(event); + expect(name).to.be.empty; + expect(measure).to.be.empty; + }); + }); }); From b298d12fc078e1a46be79ecba6f370925c06aba8 Mon Sep 17 00:00:00 2001 From: Akshita Agarwal Date: Wed, 4 Apr 2018 17:07:49 -0700 Subject: [PATCH 04/11] DebugModeObserver --- .../OmnisharpDebugModeLoggerObserver.test.ts | 70 ++++++++++--------- 1 file changed, 36 insertions(+), 34 deletions(-) diff --git a/test/unitTests/logging/OmnisharpDebugModeLoggerObserver.test.ts b/test/unitTests/logging/OmnisharpDebugModeLoggerObserver.test.ts index f9c6ac60cc..5dcc988543 100644 --- a/test/unitTests/logging/OmnisharpDebugModeLoggerObserver.test.ts +++ b/test/unitTests/logging/OmnisharpDebugModeLoggerObserver.test.ts @@ -7,9 +7,7 @@ import { getNullChannel } from './Fakes'; import { OmnisharpServerVerboseMessage, EventWithMessage, OmnisharpRequestMessage, OmnisharpServerEnqueueRequest, OmnisharpServerDequeueRequest, OmnisharpServerProcessRequestStart, OmnisharpEventPacketReceived, OmnisharpServerProcessRequestComplete } from '../../../src/omnisharp/loggingEvents'; import { OmnisharpDebugModeLoggerObserver } from '../../../src/observers/OmnisharpDebugModeLoggerObserver'; -use(require("chai-string")); - -suite("OmnisharpLoggerObserver", () => { +suite("OmnisharpDebugModeLoggerObserver", () => { suiteSetup(() => should()); let logOutput = ""; let observer = new OmnisharpDebugModeLoggerObserver({ @@ -30,19 +28,6 @@ suite("OmnisharpLoggerObserver", () => { }); }); - test(`OmnisharpRequestMessage: Request Command and Id is logged`, () => { - let event = new OmnisharpRequestMessage({ command: "someCommand", onSuccess: () => { }, onError: () => { } }, 1); - observer.post(event); - expect(logOutput).to.contain(event.id); - expect(logOutput).to.contain(event.request.command); - }); - - test(`OmnisharpRequestMessage: Request Data is logged when it is not empty`, () => { - let event = new OmnisharpRequestMessage({ command: "someCommand", onSuccess: () => { }, onError: () => { }, data: "someData" }, 1); - observer.post(event); - expect(logOutput).to.contain(event.request.data); - }); - test(`OmnisharpServerEnqueueRequest: Name and Command is logged`, () => { let event = new OmnisharpServerEnqueueRequest("foo", "someCommand"); observer.post(event); @@ -64,36 +49,53 @@ suite("OmnisharpLoggerObserver", () => { expect(logOutput).to.contain(event.name); }); - test(`OmnisharpEventPacketReceived: Information messages with name OmniSharp.Middleware.LoggingMiddleware and follow pattern /^\/[\/\w]+: 200 \d+ms/ are not logged`, () => { - let event = new OmnisharpEventPacketReceived("INFORMATION", "OmniSharp.Middleware.LoggingMiddleware", "/codecheck: 200 339ms"); - observer.post(event); - expect(logOutput).to.contain(event.message); - expect(logOutput).to.contain(event.name); - }); - test(`OmnisharpServer messages increase and decrease indent`, () => { observer.post(new OmnisharpServerVerboseMessage("!indented_1")); observer.post(new OmnisharpServerProcessRequestStart("name")); observer.post(new OmnisharpServerVerboseMessage("indented")); observer.post(new OmnisharpServerProcessRequestComplete()); observer.post(new OmnisharpServerVerboseMessage("!indented_2")); - + expect(logOutput).to.startWith(" !indented_1"); expect(logOutput).to.contain("\n indented"); expect(logOutput).to.contain("\n !indented_2"); }); - [ - new OmnisharpEventPacketReceived("TRACE", "foo", "someMessage"), - new OmnisharpEventPacketReceived("DEBUG", "foo", "someMessage"), - new OmnisharpEventPacketReceived("INFORMATION", "foo", "someMessage"), - new OmnisharpEventPacketReceived("WARNING", "foo", "someMessage"), - new OmnisharpEventPacketReceived("ERROR", "foo", "someMessage"), - new OmnisharpEventPacketReceived("CRITICAL", "foo", "someMessage"), - ].forEach((event: OmnisharpEventPacketReceived) => { - test(`OmnisharpEventPacketReceived: ${event.logLevel} messages are logged with name and the message`, () => { + suite('OmnisharpEventPacketReceived', () => { + test(`Information messages with name OmniSharp.Middleware.LoggingMiddleware and follow pattern /^\/[\/\w]+: 200 \d+ms/ are not logged`, () => { + let event = new OmnisharpEventPacketReceived("INFORMATION", "OmniSharp.Middleware.LoggingMiddleware", "/codecheck: 200 339ms"); + observer.post(event); + expect(logOutput).to.contain(event.message); + expect(logOutput).to.contain(event.name); + }); + + [ + new OmnisharpEventPacketReceived("TRACE", "foo", "someMessage"), + new OmnisharpEventPacketReceived("DEBUG", "foo", "someMessage"), + new OmnisharpEventPacketReceived("INFORMATION", "foo", "someMessage"), + new OmnisharpEventPacketReceived("WARNING", "foo", "someMessage"), + new OmnisharpEventPacketReceived("ERROR", "foo", "someMessage"), + new OmnisharpEventPacketReceived("CRITICAL", "foo", "someMessage"), + ].forEach((event: OmnisharpEventPacketReceived) => { + test(`${event.logLevel} messages are logged with name and the message`, () => { + observer.post(event); + expect(logOutput).to.be.empty; + }); + }); + }); + + suite('OmnisharpRequestMessage', () => { + test(`Request Command and Id is logged`, () => { + let event = new OmnisharpRequestMessage({ command: "someCommand", onSuccess: () => { }, onError: () => { } }, 1); + observer.post(event); + expect(logOutput).to.contain(event.id); + expect(logOutput).to.contain(event.request.command); + }); + + test(`Request Data is logged when it is not empty`, () => { + let event = new OmnisharpRequestMessage({ command: "someCommand", onSuccess: () => { }, onError: () => { }, data: "someData" }, 1); observer.post(event); - expect(logOutput).to.be.empty; + expect(logOutput).to.contain(event.request.data); }); }); }); \ No newline at end of file From fccf113083e9407ccae29320eb2c82cbe579e217 Mon Sep 17 00:00:00 2001 From: Akshita Agarwal Date: Wed, 4 Apr 2018 17:09:18 -0700 Subject: [PATCH 05/11] channel observer --- test/unitTests/logging/CsharpChannelObserver.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/unitTests/logging/CsharpChannelObserver.test.ts b/test/unitTests/logging/CsharpChannelObserver.test.ts index a1fc614490..d849dd65a0 100644 --- a/test/unitTests/logging/CsharpChannelObserver.test.ts +++ b/test/unitTests/logging/CsharpChannelObserver.test.ts @@ -17,7 +17,7 @@ suite("CsharpChannelObserver", () => { new DebuggerPrerequisiteFailure("some failure"), new ProjectJsonDeprecatedWarning() ].forEach((event: BaseEvent) => { - test(`Shows the channel for ${event.constructor.name}`, () => { + test(`${event.constructor.name}: Channel is shown`, () => { let hasShown = false; let observer = new CsharpChannelObserver({ From c5f3cac07a646cb71fa0ac9087f0163e6acb6968 Mon Sep 17 00:00:00 2001 From: Akshita Agarwal Date: Wed, 4 Apr 2018 17:18:46 -0700 Subject: [PATCH 06/11] Logger Observer --- .../logging/OmnisharpLoggerObserver.test.ts | 183 ++++++++---------- 1 file changed, 85 insertions(+), 98 deletions(-) diff --git a/test/unitTests/logging/OmnisharpLoggerObserver.test.ts b/test/unitTests/logging/OmnisharpLoggerObserver.test.ts index 1d8e20eebb..18eedafe65 100644 --- a/test/unitTests/logging/OmnisharpLoggerObserver.test.ts +++ b/test/unitTests/logging/OmnisharpLoggerObserver.test.ts @@ -21,53 +21,53 @@ suite("OmnisharpLoggerObserver", () => { logOutput = ""; }); - [ - new OmnisharpServerMsBuildProjectDiagnostics({ - FileName: "someFile", - Warnings: [{ FileName: "warningFile", LogLevel: "", Text: "", StartLine: 0, EndLine: 0, StartColumn: 0, EndColumn: 0 }], - Errors: [] - }) - ].forEach((event: OmnisharpServerMsBuildProjectDiagnostics) => { - test(`${event.constructor.name}: Logged message contains the Filename if there is atleast one error or warning`, () => { + suite('OmnisharpServerMsBuildProjectDiagnostics', () => { + + test("Logged message is empty if there are no warnings and erros", () => { + let event = new OmnisharpServerMsBuildProjectDiagnostics({ + FileName: "someFile", + Warnings: [], + Errors: [] + }); observer.post(event); - expect(logOutput).to.contain(event.diagnostics.FileName); + expect(logOutput).to.be.empty; }); - }); - test("OmnisharpServerMsBuildProjectDiagnostics: Logged message is empty if there are no warnings and erros", () => { - let event = new OmnisharpServerMsBuildProjectDiagnostics({ - FileName: "someFile", - Warnings: [], - Errors: [] + test(`Logged message contains the Filename if there is atleast one error or warning`, () => { + let event = new OmnisharpServerMsBuildProjectDiagnostics({ + FileName: "someFile", + Warnings: [{ FileName: "warningFile", LogLevel: "", Text: "", StartLine: 0, EndLine: 0, StartColumn: 0, EndColumn: 0 }], + Errors: [] + }); + observer.post(event); + expect(logOutput).to.contain(event.diagnostics.FileName); }); - observer.post(event); - expect(logOutput).to.be.empty; - }); - [ - new OmnisharpServerMsBuildProjectDiagnostics({ - FileName: "someFile", - Warnings: [{ FileName: "warningFile", LogLevel: "", Text: "someWarningText", StartLine: 1, EndLine: 2, StartColumn: 3, EndColumn: 4 }], - Errors: [{ FileName: "errorFile", LogLevel: "", Text: "someErrorText", StartLine: 5, EndLine: 6, StartColumn: 7, EndColumn: 8 }] - }) - ].forEach((event: OmnisharpServerMsBuildProjectDiagnostics) => { - test(`${event.constructor.name}: Logged message contains the Filename, StartColumn, StartLine and Text for the diagnostic warnings`, () => { - observer.post(event); - event.diagnostics.Warnings.forEach(element => { - expect(logOutput).to.contain(element.FileName); - expect(logOutput).to.contain(element.StartLine); - expect(logOutput).to.contain(element.StartColumn); - expect(logOutput).to.contain(element.Text); + [ + new OmnisharpServerMsBuildProjectDiagnostics({ + FileName: "someFile", + Warnings: [{ FileName: "warningFile", LogLevel: "", Text: "someWarningText", StartLine: 1, EndLine: 2, StartColumn: 3, EndColumn: 4 }], + Errors: [{ FileName: "errorFile", LogLevel: "", Text: "someErrorText", StartLine: 5, EndLine: 6, StartColumn: 7, EndColumn: 8 }] + }) + ].forEach((event: OmnisharpServerMsBuildProjectDiagnostics) => { + test(`Logged message contains the Filename, StartColumn, StartLine and Text for the diagnostic warnings`, () => { + observer.post(event); + event.diagnostics.Warnings.forEach(element => { + expect(logOutput).to.contain(element.FileName); + expect(logOutput).to.contain(element.StartLine); + expect(logOutput).to.contain(element.StartColumn); + expect(logOutput).to.contain(element.Text); + }); }); - }); - test(`${event.constructor.name}: Logged message contains the Filename, StartColumn, StartLine and Text for the diagnostics errors`, () => { - observer.post(event); - event.diagnostics.Errors.forEach(element => { - expect(logOutput).to.contain(element.FileName); - expect(logOutput).to.contain(element.StartLine); - expect(logOutput).to.contain(element.StartColumn); - expect(logOutput).to.contain(element.Text); + test(`Logged message contains the Filename, StartColumn, StartLine and Text for the diagnostics errors`, () => { + observer.post(event); + event.diagnostics.Errors.forEach(element => { + expect(logOutput).to.contain(element.FileName); + expect(logOutput).to.contain(element.StartLine); + expect(logOutput).to.contain(element.StartColumn); + expect(logOutput).to.contain(element.Text); + }); }); }); }); @@ -93,44 +93,6 @@ suite("OmnisharpLoggerObserver", () => { }); }); - [ - new OmnisharpLaunch(true, "someCommand", 4), - new OmnisharpLaunch(false, "someCommand", 4) - ].forEach((event: OmnisharpLaunch) => { - test(`${event.constructor.name}: Command and Pid are displayed`, () => { - observer.post(event); - expect(logOutput).to.contain(event.command); - expect(logOutput).to.contain(event.pid); - }); - test(`${event.constructor.name}: Message is displayed depending on usingMono value`, () => { - observer.post(event); - if (event.usingMono) { - expect(logOutput).to.contain("OmniSharp server started with Mono"); - } - else { - expect(logOutput).to.contain("OmniSharp server started"); - } - }); - }); - - [ - new OmnisharpServerOnError({ Text: "someText", FileName: "someFile", Line: 1, Column: 2 }), - ].forEach((event: OmnisharpServerOnError) => { - test(`${event.constructor.name}: Contains the error message text`, () => { - observer.post(event); - expect(logOutput).to.contain(event.errorMessage.Text); - }); - - test(`${event.constructor.name}: Contains the error message FileName, Line and column if FileName is not null`, () => { - observer.post(event); - if (event.errorMessage.FileName) { - expect(logOutput).to.contain(event.errorMessage.FileName); - expect(logOutput).to.contain(event.errorMessage.Line); - expect(logOutput).to.contain(event.errorMessage.Column); - } - }); - }); - test(`OmnisharpServerOnError: Doesnot throw error if FileName is null`, () => { let event = new OmnisharpServerOnError({ Text: "someText", FileName: null, Line: 1, Column: 2 }); let fn = function () { observer.post(event); }; @@ -143,30 +105,55 @@ suite("OmnisharpLoggerObserver", () => { expect(logOutput).to.contain(event.message); }); - [ - new OmnisharpEventPacketReceived("TRACE", "foo", "someMessage"), - new OmnisharpEventPacketReceived("DEBUG", "foo", "someMessage"), - new OmnisharpEventPacketReceived("INFORMATION", "foo", "someMessage"), - new OmnisharpEventPacketReceived("WARNING", "foo", "someMessage"), - new OmnisharpEventPacketReceived("ERROR", "foo", "someMessage"), - new OmnisharpEventPacketReceived("CRITICAL", "foo", "someMessage"), - ].forEach((event: OmnisharpEventPacketReceived) => { - test(`OmnisharpEventPacketReceived: ${event.logLevel} messages are logged with name and the message`, () => { + suite('OmnisharpEventPacketReceived', () => { + [ + new OmnisharpEventPacketReceived("TRACE", "foo", "someMessage"), + new OmnisharpEventPacketReceived("DEBUG", "foo", "someMessage"), + new OmnisharpEventPacketReceived("INFORMATION", "foo", "someMessage"), + new OmnisharpEventPacketReceived("WARNING", "foo", "someMessage"), + new OmnisharpEventPacketReceived("ERROR", "foo", "someMessage"), + new OmnisharpEventPacketReceived("CRITICAL", "foo", "someMessage"), + ].forEach((event: OmnisharpEventPacketReceived) => { + test(`${event.logLevel} messages are logged with name and the message`, () => { + observer.post(event); + expect(logOutput).to.contain(event.name); + expect(logOutput).to.contain(event.message); + }); + }); + + test('Throws error on unknown log level', () => { + let event = new OmnisharpEventPacketReceived("random log level", "foo", "someMessage"); + let fn = function () { observer.post(event); }; + expect(fn).to.throw(Error); + }); + + test(`Information messages with name OmniSharp.Middleware.LoggingMiddleware and follow pattern /^\/[\/\w]+: 200 \d+ms/ are not logged`, () => { + let event = new OmnisharpEventPacketReceived("INFORMATION", "OmniSharp.Middleware.LoggingMiddleware", "/codecheck: 200 339ms"); observer.post(event); - expect(logOutput).to.contain(event.name); - expect(logOutput).to.contain(event.message); + expect(logOutput).to.be.empty; }); }); - test('OmnisharpEventPacketReceived: Throws error on unknown log level', () => { - let event = new OmnisharpEventPacketReceived("random log level", "foo", "someMessage"); - let fn = function () { observer.post(event); }; - expect(fn).to.throw(Error); + suite('OmnisharpLaunch', () => { + [ + new OmnisharpLaunch(true, "someCommand", 4), + new OmnisharpLaunch(false, "someCommand", 4) + ].forEach((event: OmnisharpLaunch) => { + test(`Command and Pid are displayed`, () => { + observer.post(event); + expect(logOutput).to.contain(event.command); + expect(logOutput).to.contain(event.pid); + }); + test(`Message is displayed depending on usingMono value`, () => { + observer.post(event); + if (event.usingMono) { + expect(logOutput).to.contain("OmniSharp server started with Mono"); + } + else { + expect(logOutput).to.contain("OmniSharp server started"); + } + }); + }); }); - test(`OmnisharpEventPacketReceived: Information messages with name OmniSharp.Middleware.LoggingMiddleware and follow pattern /^\/[\/\w]+: 200 \d+ms/ are not logged`, () => { - let event = new OmnisharpEventPacketReceived("INFORMATION", "OmniSharp.Middleware.LoggingMiddleware", "/codecheck: 200 339ms"); - observer.post(event); - expect(logOutput).to.be.empty; - }); }); From c5e365fc70a64281536a9c12d102968a015cce45 Mon Sep 17 00:00:00 2001 From: Akshita Agarwal Date: Wed, 4 Apr 2018 17:20:30 -0700 Subject: [PATCH 07/11] Clean up --- test/unitTests/logging/OmnisharpLoggerObserver.test.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/unitTests/logging/OmnisharpLoggerObserver.test.ts b/test/unitTests/logging/OmnisharpLoggerObserver.test.ts index 18eedafe65..f6f506bc59 100644 --- a/test/unitTests/logging/OmnisharpLoggerObserver.test.ts +++ b/test/unitTests/logging/OmnisharpLoggerObserver.test.ts @@ -139,11 +139,13 @@ suite("OmnisharpLoggerObserver", () => { new OmnisharpLaunch(true, "someCommand", 4), new OmnisharpLaunch(false, "someCommand", 4) ].forEach((event: OmnisharpLaunch) => { + test(`Command and Pid are displayed`, () => { observer.post(event); expect(logOutput).to.contain(event.command); expect(logOutput).to.contain(event.pid); }); + test(`Message is displayed depending on usingMono value`, () => { observer.post(event); if (event.usingMono) { @@ -155,5 +157,4 @@ suite("OmnisharpLoggerObserver", () => { }); }); }); - }); From 5c1a28fa8d48d99ab1d43b25b22fba295a65c49e Mon Sep 17 00:00:00 2001 From: Akshita Agarwal Date: Wed, 4 Apr 2018 17:33:32 -0700 Subject: [PATCH 08/11] Server error test --- .../logging/OmnisharpLoggerObserver.test.ts | 40 ++++++++++++++----- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/test/unitTests/logging/OmnisharpLoggerObserver.test.ts b/test/unitTests/logging/OmnisharpLoggerObserver.test.ts index f6f506bc59..293d840bcb 100644 --- a/test/unitTests/logging/OmnisharpLoggerObserver.test.ts +++ b/test/unitTests/logging/OmnisharpLoggerObserver.test.ts @@ -93,12 +93,6 @@ suite("OmnisharpLoggerObserver", () => { }); }); - test(`OmnisharpServerOnError: Doesnot throw error if FileName is null`, () => { - let event = new OmnisharpServerOnError({ Text: "someText", FileName: null, Line: 1, Column: 2 }); - let fn = function () { observer.post(event); }; - expect(fn).to.not.throw(Error); - }); - test('OmnisharpFailure: Failure message is logged', () => { let event = new OmnisharpFailure("failureMessage", new Error("errorMessage")); observer.post(event); @@ -120,13 +114,13 @@ suite("OmnisharpLoggerObserver", () => { expect(logOutput).to.contain(event.message); }); }); - + test('Throws error on unknown log level', () => { let event = new OmnisharpEventPacketReceived("random log level", "foo", "someMessage"); let fn = function () { observer.post(event); }; expect(fn).to.throw(Error); }); - + test(`Information messages with name OmniSharp.Middleware.LoggingMiddleware and follow pattern /^\/[\/\w]+: 200 \d+ms/ are not logged`, () => { let event = new OmnisharpEventPacketReceived("INFORMATION", "OmniSharp.Middleware.LoggingMiddleware", "/codecheck: 200 339ms"); observer.post(event); @@ -139,13 +133,13 @@ suite("OmnisharpLoggerObserver", () => { new OmnisharpLaunch(true, "someCommand", 4), new OmnisharpLaunch(false, "someCommand", 4) ].forEach((event: OmnisharpLaunch) => { - + test(`Command and Pid are displayed`, () => { observer.post(event); expect(logOutput).to.contain(event.command); expect(logOutput).to.contain(event.pid); }); - + test(`Message is displayed depending on usingMono value`, () => { observer.post(event); if (event.usingMono) { @@ -157,4 +151,30 @@ suite("OmnisharpLoggerObserver", () => { }); }); }); + + suite('OmnisharpServerOnError', () => { + test(`Doesnot throw error if FileName is null`, () => { + let event = new OmnisharpServerOnError({ Text: "someText", FileName: null, Line: 1, Column: 2 }); + let fn = function () { observer.post(event); }; + expect(fn).to.not.throw(Error); + }); + + [ + new OmnisharpServerOnError({ Text: "someText", FileName: "someFile", Line: 1, Column: 2 }), + ].forEach((event: OmnisharpServerOnError) => { + test(`Contains the error message text`, () => { + observer.post(event); + expect(logOutput).to.contain(event.errorMessage.Text); + }); + + test(`Contains the error message FileName, Line and column if FileName is not null`, () => { + observer.post(event); + if (event.errorMessage.FileName) { + expect(logOutput).to.contain(event.errorMessage.FileName); + expect(logOutput).to.contain(event.errorMessage.Line); + expect(logOutput).to.contain(event.errorMessage.Column); + } + }); + }); + }); }); From d1f077e9ceed1d3670f1d7a0c933e886424555e4 Mon Sep 17 00:00:00 2001 From: Akshita Agarwal Date: Wed, 4 Apr 2018 17:40:17 -0700 Subject: [PATCH 09/11] Correct message in the debug observer --- .../logging/OmnisharpDebugModeLoggerObserver.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/unitTests/logging/OmnisharpDebugModeLoggerObserver.test.ts b/test/unitTests/logging/OmnisharpDebugModeLoggerObserver.test.ts index 5dcc988543..1686d487f1 100644 --- a/test/unitTests/logging/OmnisharpDebugModeLoggerObserver.test.ts +++ b/test/unitTests/logging/OmnisharpDebugModeLoggerObserver.test.ts @@ -62,7 +62,7 @@ suite("OmnisharpDebugModeLoggerObserver", () => { }); suite('OmnisharpEventPacketReceived', () => { - test(`Information messages with name OmniSharp.Middleware.LoggingMiddleware and follow pattern /^\/[\/\w]+: 200 \d+ms/ are not logged`, () => { + test(`Information messages with name OmniSharp.Middleware.LoggingMiddleware and follow pattern /^\/[\/\w]+: 200 \d+ms/ are logged`, () => { let event = new OmnisharpEventPacketReceived("INFORMATION", "OmniSharp.Middleware.LoggingMiddleware", "/codecheck: 200 339ms"); observer.post(event); expect(logOutput).to.contain(event.message); @@ -77,7 +77,7 @@ suite("OmnisharpDebugModeLoggerObserver", () => { new OmnisharpEventPacketReceived("ERROR", "foo", "someMessage"), new OmnisharpEventPacketReceived("CRITICAL", "foo", "someMessage"), ].forEach((event: OmnisharpEventPacketReceived) => { - test(`${event.logLevel} messages are logged with name and the message`, () => { + test(`${event.logLevel} messages are not logged`, () => { observer.post(event); expect(logOutput).to.be.empty; }); From a1eb7b8fba2da648fa58dca07c89c265361e1984 Mon Sep 17 00:00:00 2001 From: akshita31 Date: Wed, 4 Apr 2018 17:57:08 -0700 Subject: [PATCH 10/11] Update --- .../logging/OmnisharpDebugModeLoggerObserver.test.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/unitTests/logging/OmnisharpDebugModeLoggerObserver.test.ts b/test/unitTests/logging/OmnisharpDebugModeLoggerObserver.test.ts index 1686d487f1..b200770b51 100644 --- a/test/unitTests/logging/OmnisharpDebugModeLoggerObserver.test.ts +++ b/test/unitTests/logging/OmnisharpDebugModeLoggerObserver.test.ts @@ -7,6 +7,8 @@ import { getNullChannel } from './Fakes'; import { OmnisharpServerVerboseMessage, EventWithMessage, OmnisharpRequestMessage, OmnisharpServerEnqueueRequest, OmnisharpServerDequeueRequest, OmnisharpServerProcessRequestStart, OmnisharpEventPacketReceived, OmnisharpServerProcessRequestComplete } from '../../../src/omnisharp/loggingEvents'; import { OmnisharpDebugModeLoggerObserver } from '../../../src/observers/OmnisharpDebugModeLoggerObserver'; +use(require("chai-string")); + suite("OmnisharpDebugModeLoggerObserver", () => { suiteSetup(() => should()); let logOutput = ""; @@ -98,4 +100,4 @@ suite("OmnisharpDebugModeLoggerObserver", () => { expect(logOutput).to.contain(event.request.data); }); }); -}); \ No newline at end of file +}); From d36f45bc90031786d2270caf86b0688aee5c44d6 Mon Sep 17 00:00:00 2001 From: Unknown Date: Thu, 5 Apr 2018 10:27:24 -0700 Subject: [PATCH 11/11] Corrected spelling --- test/unitTests/logging/CsharpLoggerObserver.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/unitTests/logging/CsharpLoggerObserver.test.ts b/test/unitTests/logging/CsharpLoggerObserver.test.ts index 88b02c4963..96d46237b0 100644 --- a/test/unitTests/logging/CsharpLoggerObserver.test.ts +++ b/test/unitTests/logging/CsharpLoggerObserver.test.ts @@ -122,7 +122,7 @@ suite("CsharpLoggerObserver", () => { expect(logOutput).to.contain(element.expected); })); - test(`ActivaltionFailure: Some message is logged`, () => { + test(`ActivationFailure: Some message is logged`, () => { let event = new Event.ActivationFailure(); observer.post(event); expect(logOutput).to.not.be.empty;