From 6d0120907014333c1e9f805e6a8a1043bd0dda24 Mon Sep 17 00:00:00 2001 From: Keith Hill Date: Thu, 22 Mar 2018 20:49:05 -0600 Subject: [PATCH] Add support for running xUnit tests in VS Test Explorer Fix issue with running xUnit tests over and over. Have a better way to detect when the session details file has been written. Fix issue with ServiceReturnsPowerShellVersionDetails test, where it only worked when you ran the tests using x86 arch. It now runs correctly using x64. --- .../LanguageServerTests.cs | 4 ++- .../PowerShellEditorServices.Test.Host.csproj | 1 + .../ServerTestsBase.cs | 35 ++++++++++++++++--- ...erShellEditorServices.Test.Protocol.csproj | 1 + .../PowerShellEditorServices.Test.csproj | 1 + 5 files changed, 37 insertions(+), 5 deletions(-) diff --git a/test/PowerShellEditorServices.Test.Host/LanguageServerTests.cs b/test/PowerShellEditorServices.Test.Host/LanguageServerTests.cs index eeaac47cb..b4d9fbd6b 100644 --- a/test/PowerShellEditorServices.Test.Host/LanguageServerTests.cs +++ b/test/PowerShellEditorServices.Test.Host/LanguageServerTests.cs @@ -825,7 +825,9 @@ await this.SendRequest( Assert.StartsWith("5.", versionDetails.Version); Assert.StartsWith("5.", versionDetails.DisplayVersion); Assert.Equal("Desktop", versionDetails.Edition); - Assert.Equal("x86", versionDetails.Architecture); + + string expectedArchitecture = (IntPtr.Size == 8) ? "x64" : "x86"; + Assert.Equal(expectedArchitecture, versionDetails.Architecture); } private async Task SendOpenFileEvent(string filePath, bool waitForDiagnostics = true) diff --git a/test/PowerShellEditorServices.Test.Host/PowerShellEditorServices.Test.Host.csproj b/test/PowerShellEditorServices.Test.Host/PowerShellEditorServices.Test.Host.csproj index c3344c0d1..7aec43019 100644 --- a/test/PowerShellEditorServices.Test.Host/PowerShellEditorServices.Test.Host.csproj +++ b/test/PowerShellEditorServices.Test.Host/PowerShellEditorServices.Test.Host.csproj @@ -22,6 +22,7 @@ 6.0.0-alpha13 + diff --git a/test/PowerShellEditorServices.Test.Host/ServerTestsBase.cs b/test/PowerShellEditorServices.Test.Host/ServerTestsBase.cs index 0d89acf51..741b69abe 100644 --- a/test/PowerShellEditorServices.Test.Host/ServerTestsBase.cs +++ b/test/PowerShellEditorServices.Test.Host/ServerTestsBase.cs @@ -51,6 +51,11 @@ protected async Task> LaunchService( Path.Combine( Path.GetDirectoryName(assemblyPath), $"session-{++sessionCounter}.json"); + if (File.Exists(sessionPath)) + { + File.Delete(sessionPath); + } + string editorServicesModuleVersion = string.Format( "{0}.{1}.{2}", @@ -106,13 +111,33 @@ protected async Task> LaunchService( // Start the process this.serviceProcess.Start(); - // Wait for the server to finish initializing - while (!File.Exists(sessionPath) || (new FileInfo(sessionPath).Length == 0)) + string sessionDetailsText = string.Empty; + + // Wait up to ~5 seconds for the server to finish initializing + var maxRetryAttempts = 10; + while (maxRetryAttempts-- > 0) { - Thread.Sleep(100); + try + { + using (var stream = new FileStream(sessionPath, FileMode.Open, FileAccess.Read, FileShare.None)) + using (var reader = new StreamReader(stream)) + { + sessionDetailsText = reader.ReadToEnd(); + break; + } + } + catch (FileNotFoundException) + { + } + catch (Exception ex) + { + Debug.WriteLine($"Session details at '{sessionPath}' not available: {ex.Message}"); + } + + Thread.Sleep(500); } - JObject result = JObject.Parse(File.ReadAllText(sessionPath)); + JObject result = JObject.Parse(sessionDetailsText); if (result["status"].Value() == "started") { return new Tuple( @@ -120,6 +145,8 @@ protected async Task> LaunchService( result["debugServicePort"].Value()); } + Debug.WriteLine($"Failed to read session details from '{sessionPath}'"); + return null; } diff --git a/test/PowerShellEditorServices.Test.Protocol/PowerShellEditorServices.Test.Protocol.csproj b/test/PowerShellEditorServices.Test.Protocol/PowerShellEditorServices.Test.Protocol.csproj index 7b8db1e84..9f10745c8 100644 --- a/test/PowerShellEditorServices.Test.Protocol/PowerShellEditorServices.Test.Protocol.csproj +++ b/test/PowerShellEditorServices.Test.Protocol/PowerShellEditorServices.Test.Protocol.csproj @@ -12,6 +12,7 @@ + 9.0.1 diff --git a/test/PowerShellEditorServices.Test/PowerShellEditorServices.Test.csproj b/test/PowerShellEditorServices.Test/PowerShellEditorServices.Test.csproj index 8eb7f18df..199cd3b52 100644 --- a/test/PowerShellEditorServices.Test/PowerShellEditorServices.Test.csproj +++ b/test/PowerShellEditorServices.Test/PowerShellEditorServices.Test.csproj @@ -15,6 +15,7 @@ 6.0.0-alpha13 +