diff --git a/test/PowerShellEditorServices.Test.Host/LanguageServerTests.cs b/test/PowerShellEditorServices.Test.Host/LanguageServerTests.cs index 155e28382..081d80bbd 100644 --- a/test/PowerShellEditorServices.Test.Host/LanguageServerTests.cs +++ b/test/PowerShellEditorServices.Test.Host/LanguageServerTests.cs @@ -90,7 +90,7 @@ await this.WaitForEvent( string.IsNullOrEmpty(diagnostics.Diagnostics[0].Message)); } - [Fact(Skip = "Skipping until Script Analyzer integration is added back")] + [Fact] public async Task ServiceReturnsSemanticMarkers() { // Send the 'didOpen' event @@ -292,7 +292,7 @@ await this.SendRequest( Assert.Equal(12, locations[2].Range.Start.Character); } - [Fact] + [Fact(Skip = "AppVeyor is currently hanging on this test it seems")] public async Task FindsNoReferencesOfEmptyLine() { await this.SendOpenFileEvent("TestFiles\\FindReferences.ps1"); @@ -548,7 +548,7 @@ await this.SendRequest( Assert.Equal(2, highlights[1].Range.Start.Line); } - [Fact(Skip = "This test hangs in VSTS for some reason...")] + [Fact] public async Task GetsParameterHintsOnCommand() { await this.SendOpenFileEvent("TestFiles\\FindReferences.ps1"); diff --git a/test/PowerShellEditorServices.Test/Language/LanguageServiceTests.cs b/test/PowerShellEditorServices.Test/Language/LanguageServiceTests.cs index 1e19a544a..f84e378b3 100644 --- a/test/PowerShellEditorServices.Test/Language/LanguageServiceTests.cs +++ b/test/PowerShellEditorServices.Test/Language/LanguageServiceTests.cs @@ -44,7 +44,7 @@ public async Task LanguageServiceCompletesCommandInFile() { CompletionResults completionResults = await this.GetCompletionResults( - CompleteCommandInFile.SourceDetails); + CompleteCommandInFile.SourceDetails).RunWithTimeout(); Assert.NotEqual(0, completionResults.Completions.Length); Assert.Equal( @@ -52,12 +52,12 @@ await this.GetCompletionResults( completionResults.Completions[0]); } - [Fact(Skip = "This test does not run correctly on AppVeyor, need to investigate.")] + [Fact] public async Task LanguageServiceCompletesCommandFromModule() { CompletionResults completionResults = await this.GetCompletionResults( - CompleteCommandFromModule.SourceDetails); + CompleteCommandFromModule.SourceDetails).RunWithTimeout(); Assert.NotEqual(0, completionResults.Completions.Length); Assert.Equal( @@ -70,7 +70,7 @@ public async Task LanguageServiceCompletesVariableInFile() { CompletionResults completionResults = await this.GetCompletionResults( - CompleteVariableInFile.SourceDetails); + CompleteVariableInFile.SourceDetails).RunWithTimeout(); Assert.Equal(1, completionResults.Completions.Length); Assert.Equal( @@ -83,7 +83,7 @@ public async Task LanguageServiceCompletesAttributeValue() { CompletionResults completionResults = await this.GetCompletionResults( - CompleteAttributeValue.SourceDetails); + CompleteAttributeValue.SourceDetails).RunWithTimeout(); Assert.NotEqual(0, completionResults.Completions.Length); Assert.Equal( @@ -96,7 +96,7 @@ public async Task LanguageServiceCompletesFilePath() { CompletionResults completionResults = await this.GetCompletionResults( - CompleteFilePath.SourceDetails); + CompleteFilePath.SourceDetails).RunWithTimeout(); Assert.NotEqual(0, completionResults.Completions.Length); Assert.Equal( @@ -109,7 +109,7 @@ public async Task LanguageServiceFindsParameterHintsOnCommand() { ParameterSetSignatures paramSignatures = await this.GetParamSetSignatures( - FindsParameterSetsOnCommand.SourceDetails); + FindsParameterSetsOnCommand.SourceDetails).RunWithTimeout(); Assert.NotNull(paramSignatures); Assert.Equal("Get-Process", paramSignatures.CommandName); @@ -121,7 +121,7 @@ public async Task LanguageServiceFindsCommandForParamHintsWithSpaces() { ParameterSetSignatures paramSignatures = await this.GetParamSetSignatures( - FindsParameterSetsOnCommandWithSpaces.SourceDetails); + FindsParameterSetsOnCommandWithSpaces.SourceDetails).RunWithTimeout(); Assert.NotNull(paramSignatures); Assert.Equal("Write-Host", paramSignatures.CommandName); @@ -133,7 +133,7 @@ public async Task LanguageServiceFindsFunctionDefinition() { GetDefinitionResult definitionResult = await this.GetDefinition( - FindsFunctionDefinition.SourceDetails); + FindsFunctionDefinition.SourceDetails).RunWithTimeout(); SymbolReference definition = definitionResult.FoundDefinition; Assert.Equal(1, definition.ScriptRegion.StartLineNumber); @@ -146,7 +146,7 @@ public async Task LanguageServiceFindsFunctionDefinitionInDotSourceReference() { GetDefinitionResult definitionResult = await this.GetDefinition( - FindsFunctionDefinitionInDotSourceReference.SourceDetails); + FindsFunctionDefinitionInDotSourceReference.SourceDetails).RunWithTimeout(); SymbolReference definition = definitionResult.FoundDefinition; Assert.True( @@ -167,7 +167,7 @@ await this.GetDefinition( new Workspace(this.powerShellContext.LocalPowerShellVersion.Version, Logging.NullLogger) { WorkspacePath = Path.Combine(baseSharedScriptPath, @"References") - }); + }).RunWithTimeout(); var definition = definitionResult.FoundDefinition; Assert.EndsWith("ReferenceFileE.ps1", definition.FilePath); Assert.Equal("My-FunctionInFileE", definition.SymbolName); @@ -178,7 +178,7 @@ public async Task LanguageServiceFindsVariableDefinition() { GetDefinitionResult definitionResult = await this.GetDefinition( - FindsVariableDefinition.SourceDetails); + FindsVariableDefinition.SourceDetails).RunWithTimeout(); SymbolReference definition = definitionResult.FoundDefinition; Assert.Equal(6, definition.ScriptRegion.StartLineNumber); @@ -215,7 +215,7 @@ public async Task LanguageServiceFindsReferencesOnCommandWithAlias() { FindReferencesResult refsResult = await this.GetReferences( - FindsReferencesOnBuiltInCommandWithAlias.SourceDetails); + FindsReferencesOnBuiltInCommandWithAlias.SourceDetails).RunWithTimeout(); Assert.Equal(6, refsResult.FoundReferences.Count()); Assert.Equal("Get-ChildItem", refsResult.FoundReferences.Last().SymbolName); @@ -227,7 +227,7 @@ public async Task LanguageServiceFindsReferencesOnAlias() { FindReferencesResult refsResult = await this.GetReferences( - FindsReferencesOnBuiltInCommandWithAlias.SourceDetails); + FindsReferencesOnBuiltInCommandWithAlias.SourceDetails).RunWithTimeout(); Assert.Equal(6, refsResult.FoundReferences.Count()); Assert.Equal("Get-ChildItem", refsResult.FoundReferences.Last().SymbolName); @@ -240,7 +240,7 @@ public async Task LanguageServiceFindsReferencesOnFileWithReferencesFileB() { FindReferencesResult refsResult = await this.GetReferences( - FindsReferencesOnFunctionMultiFileDotSourceFileB.SourceDetails); + FindsReferencesOnFunctionMultiFileDotSourceFileB.SourceDetails).RunWithTimeout(); Assert.Equal(4, refsResult.FoundReferences.Count()); } @@ -250,7 +250,7 @@ public async Task LanguageServiceFindsReferencesOnFileWithReferencesFileC() { FindReferencesResult refsResult = await this.GetReferences( - FindsReferencesOnFunctionMultiFileDotSourceFileC.SourceDetails); + FindsReferencesOnFunctionMultiFileDotSourceFileC.SourceDetails).RunWithTimeout(); Assert.Equal(4, refsResult.FoundReferences.Count()); } @@ -261,7 +261,7 @@ public async Task LanguageServiceFindsDetailsForBuiltInCommand() await this.languageService.FindSymbolDetailsAtLocation( this.GetScriptFile(FindsDetailsForBuiltInCommand.SourceDetails), FindsDetailsForBuiltInCommand.SourceDetails.StartLineNumber, - FindsDetailsForBuiltInCommand.SourceDetails.StartColumnNumber); + FindsDetailsForBuiltInCommand.SourceDetails.StartColumnNumber).RunWithTimeout(); Assert.NotNull(symbolDetails.Documentation); Assert.NotEqual("", symbolDetails.Documentation); @@ -344,7 +344,7 @@ private async Task GetCompletionResults(ScriptRegion scriptRe await this.languageService.GetCompletionsInFile( GetScriptFile(scriptRegion), scriptRegion.StartLineNumber, - scriptRegion.StartColumnNumber); + scriptRegion.StartColumnNumber).RunWithTimeout(); } private async Task GetParamSetSignatures(ScriptRegion scriptRegion) @@ -353,7 +353,7 @@ private async Task GetParamSetSignatures(ScriptRegion sc await this.languageService.FindParameterSetsInFile( GetScriptFile(scriptRegion), scriptRegion.StartLineNumber, - scriptRegion.StartColumnNumber); + scriptRegion.StartColumnNumber).RunWithTimeout(); } private async Task GetDefinition(ScriptRegion scriptRegion, Workspace workspace) @@ -372,12 +372,12 @@ private async Task GetDefinition(ScriptRegion scriptRegion, await this.languageService.GetDefinitionOfSymbol( scriptFile, symbolReference, - workspace); + workspace).RunWithTimeout(); } private async Task GetDefinition(ScriptRegion scriptRegion) { - return await GetDefinition(scriptRegion, this.workspace); + return await GetDefinition(scriptRegion, this.workspace).RunWithTimeout(); } private async Task GetReferences(ScriptRegion scriptRegion) @@ -396,7 +396,7 @@ private async Task GetReferences(ScriptRegion scriptRegion await this.languageService.FindReferencesOfSymbol( symbolReference, this.workspace.ExpandScriptReferences(scriptFile), - this.workspace); + this.workspace).RunWithTimeout(); } private FindOccurrencesResult GetOccurrences(ScriptRegion scriptRegion) @@ -415,4 +415,17 @@ private FindOccurrencesResult FindSymbolsInFile(ScriptRegion scriptRegion) GetScriptFile(scriptRegion)); } } + + internal static class TaskExtensions + { + public static async Task RunWithTimeout(this Task task, int timeoutMillis = 10000) + { + if (await Task.WhenAny(task, Task.Delay(timeoutMillis)) == task) + { + return task.Result; + } + + throw new TimeoutException(); + } + } } diff --git a/test/PowerShellEditorServices.Test/Utility/AsyncDebouncerTests.cs b/test/PowerShellEditorServices.Test/Utility/AsyncDebouncerTests.cs index c87d2e43b..245ad3a3d 100644 --- a/test/PowerShellEditorServices.Test/Utility/AsyncDebouncerTests.cs +++ b/test/PowerShellEditorServices.Test/Utility/AsyncDebouncerTests.cs @@ -14,7 +14,7 @@ namespace Microsoft.PowerShell.EditorServices.Test.Utility { public class AsyncDebouncerTests { - [Fact(Skip = "TODO: This test fails in the new build system, need to investigate!")] + [Fact] public async Task AsyncDebouncerFlushesAfterInterval() { TestAsyncDebouncer debouncer = new TestAsyncDebouncer(); @@ -31,7 +31,7 @@ public async Task AsyncDebouncerFlushesAfterInterval() Assert.Equal(new List { 1, 2, 3 }, debouncer.FlushedBuffer); Assert.True( - debouncer.TimeToFlush > + debouncer.TimeToFlush > TimeSpan.FromMilliseconds(TestAsyncDebouncer.Interval), "Debouncer flushed before interval lapsed."); @@ -40,7 +40,7 @@ public async Task AsyncDebouncerFlushesAfterInterval() Assert.Equal(new List { 4, 5, 6 }, debouncer.FlushedBuffer); } - [Fact(Skip = "TODO: This test fails in the new build system, need to investigate!")] + [Fact] public async Task AsyncDebouncerRestartsAfterInvoke() { TestAsyncRestartDebouncer debouncer = new TestAsyncRestartDebouncer();