diff --git a/.gitignore b/.gitignore index 3cbf0fa..cc9aa5c 100644 --- a/.gitignore +++ b/.gitignore @@ -155,3 +155,4 @@ $RECYCLE.BIN/ # Mac desktop service store files .DS_Store /VsDingExtensionProject/pingme.txt +/VsDingExtensionProject/*.csdat diff --git a/VsDingExtension.sln b/VsDingExtension.sln index 930e6ee..7100bf6 100644 --- a/VsDingExtension.sln +++ b/VsDingExtension.sln @@ -1,6 +1,8 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 +# Visual Studio 14 +VisualStudioVersion = 14.0.24720.0 +MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{5BD9D4DB-8683-4698-8D24-01EE7306F73A}" ProjectSection(SolutionItems) = preProject IntegrationTests.testsettings = IntegrationTests.testsettings diff --git a/VsDingExtensionFor2012/VsDingExtensionFor2012.csproj b/VsDingExtensionFor2012/VsDingExtensionFor2012.csproj index 576c0c6..e849744 100644 --- a/VsDingExtensionFor2012/VsDingExtensionFor2012.csproj +++ b/VsDingExtensionFor2012/VsDingExtensionFor2012.csproj @@ -1,7 +1,7 @@  - 11.0 + 14.0 11.0 $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) @@ -56,6 +56,9 @@ true + + $(DevEnvDir)\CommonExtensions\Microsoft\TestWindow\Microsoft.VisualStudio.TestWindow.Core.dll + diff --git a/VsDingExtensionProject/OptionsDialog.cs b/VsDingExtensionProject/OptionsDialog.cs index ad73042..131da46 100644 --- a/VsDingExtensionProject/OptionsDialog.cs +++ b/VsDingExtensionProject/OptionsDialog.cs @@ -22,7 +22,12 @@ namespace VitaliiGanzha.VsDingExtension [Category("Beeps")] [DisplayName("Tests")] [Description("Beep when a test run is completed")] - public bool IsBuildOnTestComplete { get; set; } + public bool IsBeepOnTestComplete { get; set; } + + [Category("Beeps")] + [DisplayName("Failed Tests")] + [Description("Beep only when a test failed")] + public bool IsBeepOnTestFailed { get; set; } [DisplayName("Only when in background")] [Description("Beep only when Visual Studio does not have focus")] @@ -36,7 +41,8 @@ namespace VitaliiGanzha.VsDingExtension { IsBeepOnBreakpointHit = true; IsBeepOnBuildComplete = true; - IsBuildOnTestComplete = true; + IsBeepOnTestComplete = true; + IsBeepOnTestFailed = false; ShowTrayNotifications = true; IsBeepOnlyWhenVisualStudioIsInBackground = false; } diff --git a/VsDingExtensionProject/Resources.Designer.cs b/VsDingExtensionProject/Resources.Designer.cs index d98eab0..b0f2be0 100644 --- a/VsDingExtensionProject/Resources.Designer.cs +++ b/VsDingExtensionProject/Resources.Designer.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.18449 +// Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. diff --git a/VsDingExtensionProject/VsDingExtensionProject.csproj b/VsDingExtensionProject/VsDingExtensionProject.csproj index cf98311..02f873f 100644 --- a/VsDingExtensionProject/VsDingExtensionProject.csproj +++ b/VsDingExtensionProject/VsDingExtensionProject.csproj @@ -1,10 +1,15 @@  - 12.0 + 14.0 12.0 $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + + 12.0 speaker.ico @@ -58,6 +63,9 @@ true + + $(DevEnvDir)\CommonExtensions\Microsoft\TestWindow\Microsoft.VisualStudio.TestWindow.Core.dll + $(DevEnvDir)\CommonExtensions\Microsoft\TestWindow\Microsoft.VisualStudio.TestWindow.Interfaces.dll diff --git a/VsDingExtensionProject/VsDingExtensionProjectPackage.cs b/VsDingExtensionProject/VsDingExtensionProjectPackage.cs index 0d85223..a5fed66 100644 --- a/VsDingExtensionProject/VsDingExtensionProjectPackage.cs +++ b/VsDingExtensionProject/VsDingExtensionProjectPackage.cs @@ -15,9 +15,10 @@ using Microsoft.VisualStudio.ComponentModelHost; using Microsoft.VisualStudio.Shell; using Microsoft.VisualStudio.TestWindow.Extensibility; + using Microsoft.VisualStudio.TestWindow.Controller; using Process = System.Diagnostics.Process; - + [PackageRegistration(UseManagedResourcesOnly = true)] [InstalledProductRegistration("#110", "#112", "1.1", IconResourceID = 400)] [Guid(GuidList.guidVsDingExtensionProjectPkgString)] @@ -67,7 +68,7 @@ } }; - debugEvents.OnEnterBreakMode += delegate(dbgEventReason reason, ref dbgExecutionAction action) + debugEvents.OnEnterBreakMode += delegate (dbgEventReason reason, ref dbgExecutionAction action) { if (reason != dbgEventReason.dbgEventReasonStep && Options.IsBeepOnBreakpointHit) { @@ -163,9 +164,20 @@ private void OperationStateOnStateChanged(object sender, OperationStateChangedEventArgs operationStateChangedEventArgs) { - if (Options.IsBuildOnTestComplete && operationStateChangedEventArgs.State.HasFlag(TestOperationStates.TestExecutionFinished)) + if (Options.IsBeepOnTestComplete && operationStateChangedEventArgs.State.HasFlag(TestOperationStates.TestExecutionFinished)) { - HandleEventSafe(testCompleteSoundPlayer, "Test execution has been completed."); + if (Options.IsBeepOnTestFailed) + { + var testOperation = ((TestRunRequest)operationStateChangedEventArgs.Operation); + if (testOperation.DominantTestState == TestState.Failed) + { + HandleEventSafe(testCompleteSoundPlayer, "Test execution failed!"); + } + } + else + { + HandleEventSafe(testCompleteSoundPlayer, "Test execution has been completed."); + } } } #endregion @@ -180,7 +192,7 @@ var procId = Process.GetCurrentProcess().Id; int activeProcId; GetWindowThreadProcessId(activatedHandle, out activeProcId); - return activeProcId == procId; + return activeProcId == procId; } public void Dispose()