From 4060f6bdbc308f1265e334be07c6913d12e2e091 Mon Sep 17 00:00:00 2001 From: Frode Flaten <3436158+fflaten@users.noreply.github.com> Date: Thu, 4 Aug 2022 20:36:15 +0000 Subject: [PATCH 1/2] add DoesNotClearParseErrorsAsync regression test --- .../Services/Symbols/PSScriptAnalyzerTests.cs | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/test/PowerShellEditorServices.Test/Services/Symbols/PSScriptAnalyzerTests.cs b/test/PowerShellEditorServices.Test/Services/Symbols/PSScriptAnalyzerTests.cs index 9e8c00dde..93cb08122 100644 --- a/test/PowerShellEditorServices.Test/Services/Symbols/PSScriptAnalyzerTests.cs +++ b/test/PowerShellEditorServices.Test/Services/Symbols/PSScriptAnalyzerTests.cs @@ -76,5 +76,29 @@ await analysisService .ConfigureAwait(true); Assert.Single(scriptFile.DiagnosticMarkers); } + + [Fact] + public async Task DoesNotClearParseErrorsAsync() + { + // Causing a missing closing } parser error + ScriptFile scriptFile = workspaceService.GetFileBuffer("untitled:Untitled-2", script.TrimEnd('}')); + ScriptFile[] scriptFiles = { scriptFile }; + + await analysisService + .DelayThenInvokeDiagnosticsAsync(scriptFiles, CancellationToken.None) + .ConfigureAwait(true); + + Assert.Collection(scriptFile.DiagnosticMarkers, + (actual) => + { + Assert.Equal("Missing closing '}' in statement block or type definition.", actual.Message); + Assert.Equal("PowerShell", actual.Source); + }, + (actual) => + { + Assert.Equal("PSUseSingularNouns", actual.RuleName); + Assert.Equal("PSScriptAnalyzer", actual.Source); + }); + } } } From af84737626c52da4d9d893dac8f46c480a1f1bf3 Mon Sep 17 00:00:00 2001 From: Frode Flaten <3436158+fflaten@users.noreply.github.com> Date: Thu, 4 Aug 2022 20:36:39 +0000 Subject: [PATCH 2/2] add UpdatesParseErrorDiagnosticMarkers test --- .../Session/ScriptFileTests.cs | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/test/PowerShellEditorServices.Test/Session/ScriptFileTests.cs b/test/PowerShellEditorServices.Test/Session/ScriptFileTests.cs index df70f0463..40efc5c26 100644 --- a/test/PowerShellEditorServices.Test/Session/ScriptFileTests.cs +++ b/test/PowerShellEditorServices.Test/Session/ScriptFileTests.cs @@ -237,6 +237,48 @@ public void CanDeleteFromEndOfFile() ); } + [Trait("Category", "ScriptFile")] + [Fact] + public void UpdatesParseErrorDiagnosticMarkers() + { + ScriptFile myScript = CreateScriptFile(TestUtilities.NormalizeNewlines("{\n{")); + + // Verify parse errors were detected on file open + Assert.Collection(myScript.DiagnosticMarkers.OrderBy(dm => dm.ScriptRegion.StartLineNumber), + (actual) => + { + Assert.Equal(1, actual.ScriptRegion.StartLineNumber); + Assert.Equal("Missing closing '}' in statement block or type definition.", actual.Message); + Assert.Equal("PowerShell", actual.Source); + }, + (actual) => + { + Assert.Equal(2, actual.ScriptRegion.StartLineNumber); + Assert.Equal("Missing closing '}' in statement block or type definition.", actual.Message); + Assert.Equal("PowerShell", actual.Source); + }); + + // Remove second { + myScript.ApplyChange( + new FileChange + { + Line = 2, + EndLine = 2, + Offset = 1, + EndOffset = 2, + InsertString = "" + }); + + // Verify parse errors were updated on file change + Assert.Collection(myScript.DiagnosticMarkers, + (actual) => + { + Assert.Equal(1, actual.ScriptRegion.StartLineNumber); + Assert.Equal("Missing closing '}' in statement block or type definition.", actual.Message); + Assert.Equal("PowerShell", actual.Source); + }); + } + internal static ScriptFile CreateScriptFile(string initialString) { using StringReader stringReader = new(initialString);