Skip to content

Commit 1d23697

Browse files
authored
Add regression tests for parse error DiagnosticMarkers (#1872)
* Add `DoesNotClearParseErrorsAsync` regression test * Add `UpdatesParseErrorDiagnosticMarkers` test
1 parent 7853976 commit 1d23697

File tree

2 files changed

+66
-0
lines changed

2 files changed

+66
-0
lines changed

Diff for: test/PowerShellEditorServices.Test/Services/Symbols/PSScriptAnalyzerTests.cs

+24
Original file line numberDiff line numberDiff line change
@@ -76,5 +76,29 @@ await analysisService
7676
.ConfigureAwait(true);
7777
Assert.Single(scriptFile.DiagnosticMarkers);
7878
}
79+
80+
[Fact]
81+
public async Task DoesNotClearParseErrorsAsync()
82+
{
83+
// Causing a missing closing } parser error
84+
ScriptFile scriptFile = workspaceService.GetFileBuffer("untitled:Untitled-2", script.TrimEnd('}'));
85+
ScriptFile[] scriptFiles = { scriptFile };
86+
87+
await analysisService
88+
.DelayThenInvokeDiagnosticsAsync(scriptFiles, CancellationToken.None)
89+
.ConfigureAwait(true);
90+
91+
Assert.Collection(scriptFile.DiagnosticMarkers,
92+
(actual) =>
93+
{
94+
Assert.Equal("Missing closing '}' in statement block or type definition.", actual.Message);
95+
Assert.Equal("PowerShell", actual.Source);
96+
},
97+
(actual) =>
98+
{
99+
Assert.Equal("PSUseSingularNouns", actual.RuleName);
100+
Assert.Equal("PSScriptAnalyzer", actual.Source);
101+
});
102+
}
79103
}
80104
}

Diff for: test/PowerShellEditorServices.Test/Session/ScriptFileTests.cs

+42
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,48 @@ public void CanDeleteFromEndOfFile()
237237
);
238238
}
239239

240+
[Trait("Category", "ScriptFile")]
241+
[Fact]
242+
public void UpdatesParseErrorDiagnosticMarkers()
243+
{
244+
ScriptFile myScript = CreateScriptFile(TestUtilities.NormalizeNewlines("{\n{"));
245+
246+
// Verify parse errors were detected on file open
247+
Assert.Collection(myScript.DiagnosticMarkers.OrderBy(dm => dm.ScriptRegion.StartLineNumber),
248+
(actual) =>
249+
{
250+
Assert.Equal(1, actual.ScriptRegion.StartLineNumber);
251+
Assert.Equal("Missing closing '}' in statement block or type definition.", actual.Message);
252+
Assert.Equal("PowerShell", actual.Source);
253+
},
254+
(actual) =>
255+
{
256+
Assert.Equal(2, actual.ScriptRegion.StartLineNumber);
257+
Assert.Equal("Missing closing '}' in statement block or type definition.", actual.Message);
258+
Assert.Equal("PowerShell", actual.Source);
259+
});
260+
261+
// Remove second {
262+
myScript.ApplyChange(
263+
new FileChange
264+
{
265+
Line = 2,
266+
EndLine = 2,
267+
Offset = 1,
268+
EndOffset = 2,
269+
InsertString = ""
270+
});
271+
272+
// Verify parse errors were updated on file change
273+
Assert.Collection(myScript.DiagnosticMarkers,
274+
(actual) =>
275+
{
276+
Assert.Equal(1, actual.ScriptRegion.StartLineNumber);
277+
Assert.Equal("Missing closing '}' in statement block or type definition.", actual.Message);
278+
Assert.Equal("PowerShell", actual.Source);
279+
});
280+
}
281+
240282
internal static ScriptFile CreateScriptFile(string initialString)
241283
{
242284
using StringReader stringReader = new(initialString);

0 commit comments

Comments
 (0)