@@ -32,6 +32,16 @@ public class DebugServiceTests : IDisposable
3232 private AsyncQueue < SessionStateChangedEventArgs > sessionStateQueue =
3333 new AsyncQueue < SessionStateChangedEventArgs > ( ) ;
3434
35+ private ScriptFile GetDebugScript ( string fileName )
36+ {
37+ return this . workspace . GetFile (
38+ TestUtilities . NormalizePath ( Path . Combine (
39+ Path . GetDirectoryName ( typeof ( DebugServiceTests ) . Assembly . Location ) ,
40+ "../../../../PowerShellEditorServices.Test.Shared/Debugging" ,
41+ fileName
42+ ) ) ) ;
43+ }
44+
3545 public DebugServiceTests ( )
3646 {
3747 var logger = NullLogger . Instance ;
@@ -41,18 +51,9 @@ public DebugServiceTests()
4151
4252 this . workspace = new WorkspaceService ( NullLoggerFactory . Instance ) ;
4353
44- // Load the test debug file
45- this . debugScriptFile =
46- this . workspace . GetFile (
47- TestUtilities . NormalizePath ( Path . Combine (
48- Path . GetDirectoryName ( typeof ( DebugServiceTests ) . Assembly . Location ) ,
49- "../../../../PowerShellEditorServices.Test.Shared/Debugging/VariableTest.ps1" ) ) ) ;
50-
51- this . variableScriptFile =
52- this . workspace . GetFile (
53- TestUtilities . NormalizePath ( Path . Combine (
54- Path . GetDirectoryName ( typeof ( DebugServiceTests ) . Assembly . Location ) ,
55- "../../../../PowerShellEditorServices.Test.Shared/Debugging/VariableTest.ps1" ) ) ) ;
54+ // Load the test debug files
55+ this . debugScriptFile = GetDebugScript ( "DebugTest.ps1" ) ;
56+ this . variableScriptFile = GetDebugScript ( "VariableTest.ps1" ) ;
5657
5758 this . debugService = new DebugService (
5859 this . powerShellContext ,
@@ -65,13 +66,6 @@ public DebugServiceTests()
6566
6667 this . debugService . DebuggerStopped += debugService_DebuggerStopped ;
6768 this . debugService . BreakpointUpdated += debugService_BreakpointUpdated ;
68-
69- // Load the test debug file
70- this . debugScriptFile =
71- this . workspace . GetFile (
72- TestUtilities . NormalizePath ( Path . Combine (
73- Path . GetDirectoryName ( typeof ( DebugServiceTests ) . Assembly . Location ) ,
74- "../../../../PowerShellEditorServices.Test.Shared/Debugging/DebugTest.ps1" ) ) ) ;
7569 }
7670
7771 async void powerShellContext_SessionStateChanged ( object sender , SessionStateChangedEventArgs e )
@@ -123,11 +117,7 @@ public async Task DebuggerAcceptsScriptArgs(string[] args)
123117 // The path is intentionally odd (some escaped chars but not all) because we are testing
124118 // the internal path escaping mechanism - it should escape certains chars ([, ] and space) but
125119 // it should not escape already escaped chars.
126- ScriptFile debugWithParamsFile =
127- this . workspace . GetFile (
128- TestUtilities . NormalizePath ( Path . Combine (
129- Path . GetDirectoryName ( typeof ( DebugServiceTests ) . Assembly . Location ) ,
130- "../../../../PowerShellEditorServices.Test.Shared/Debugging/Debug W&ith Params [Test].ps1" ) ) ) ;
120+ ScriptFile debugWithParamsFile = GetDebugScript ( "Debug W&ith Params [Test].ps1" ) ;
131121
132122 await this . debugService . SetLineBreakpointsAsync (
133123 debugWithParamsFile ,
@@ -889,7 +879,7 @@ await this.debugService.SetLineBreakpointsAsync(
889879
890880 var nullStringVar = variables . FirstOrDefault ( v => v . Name == "$nullString" ) ;
891881 Assert . NotNull ( nullStringVar ) ;
892- Assert . True ( "[NullString]" . Equals ( nullStringVar . ValueString ) ) ;
882+ Assert . Equal ( "[NullString]" , nullStringVar . ValueString ) ;
893883 Assert . True ( nullStringVar . IsExpandable ) ;
894884
895885 // Abort script execution early and wait for completion
@@ -973,6 +963,7 @@ await this.debugService.SetLineBreakpointsAsync(
973963
974964 // Verifies fix for issue #86, $proc = Get-Process foo displays just the ETS property set
975965 // and not all process properties.
966+ [ Trait ( "Category" , "DebugService" ) ]
976967 [ Fact ]
977968 public async Task DebuggerVariableProcessObjDisplaysCorrectly ( )
978969 {
@@ -1005,6 +996,36 @@ await this.debugService.SetLineBreakpointsAsync(
1005996 await executeTask . ConfigureAwait ( false ) ;
1006997 }
1007998
999+ [ Trait ( "Category" , "DebugService" ) ]
1000+ [ SkippableFact ]
1001+ public async Task DebuggerStepsPastForms ( )
1002+ {
1003+ Skip . If ( ! VersionUtils . IsWindows ) ;
1004+
1005+ ScriptFile formsFile = GetDebugScript ( "FormsTest.ps1" ) ;
1006+
1007+ await debugService . SetCommandBreakpointsAsync (
1008+ new [ ] { CommandBreakpointDetails . Create ( "Write-Host" ) } ) . ConfigureAwait ( false ) ;
1009+
1010+ Task executeTask = powerShellContext . ExecuteScriptWithArgsAsync ( formsFile . FilePath ) ;
1011+
1012+ // Wait for function breakpoint to hit
1013+ await AssertDebuggerStopped ( formsFile . FilePath , 3 ) . ConfigureAwait ( false ) ;
1014+
1015+ StackFrameDetails [ ] stackFrames = debugService . GetStackFrames ( ) ;
1016+ VariableDetailsBase [ ] variables =
1017+ debugService . GetVariables ( stackFrames [ 0 ] . LocalVariables . Id ) ;
1018+
1019+ // Verify $form exists and is correct
1020+ var form = variables . FirstOrDefault ( v => v . Name == "$form" ) ;
1021+ Assert . NotNull ( form ) ;
1022+ Assert . StartsWith ( "System.Windows.Forms.Form" , form . ValueString ) ;
1023+
1024+ // Abort script execution early and wait for completion
1025+ debugService . Abort ( ) ;
1026+ await executeTask . ConfigureAwait ( false ) ;
1027+ }
1028+
10081029 public async Task AssertDebuggerPaused ( )
10091030 {
10101031 DebuggerStoppedEventArgs eventArgs =
0 commit comments