public void ShouldSupportRemoteSession()
        {
            var sbps = new List <ScriptBreakpoint>();

            _debugger = new ScriptDebugger(true, null);

            _runspace.Dispose();
            _runspace = RunspaceFactory.CreateRunspace(_debugger);
            _runspace.Open();
            _debugger.SetRunspace(_runspace);
            _debugger.SetBreakpoints(sbps);

            var node = new ScriptProgramNode(null);

            node.FileName = "Enter-PSSession localhost";

            var    mre          = new ManualResetEvent(false);
            string outputString = null;

            _debugger.DebuggingFinished += (sender, args) => mre.Set();
            _debugger.OutputString      += (sender, args) => outputString = args.Value;
            _debugger.Execute(node);

            Assert.IsTrue(mre.WaitOne(5000));

            mre.Reset();
            node          = new ScriptProgramNode(null);
            node.FileName = "$host.Name";
            _debugger.Execute(node);
            Assert.IsTrue(mre.WaitOne(5000));

            Assert.AreEqual("ServerRemoteHost", outputString);
        }
예제 #2
0
        public void ShouldBreakOnBreakPoint()
        {
            var engineEvents = new Mock <IEngineEvents>();

            var fi = new FileInfo(".\\TestFile.ps1");

            var sbps = new List <ScriptBreakpoint>
            {
                new ScriptBreakpoint(null, fi.FullName, 3, 0, engineEvents.Object)
            };

            _debugger.BreakpointManager.SetBreakpoints(sbps);
            foreach (var bp in sbps)
            {
                bp.Bind();
            }

            var node = new ScriptProgramNode(null);

            node.IsFile   = true;
            node.FileName = fi.FullName;

            var mre = new ManualResetEvent(false);

            bool breakpointHit = false;

            _debugger.BreakpointManager.BreakpointHit += (sender, args) => { breakpointHit = true; System.Threading.Tasks.Task.Factory.StartNew(() => _debugger.Continue()); };
            _debugger.DebuggingFinished += (sender, args) => mre.Set();
            _debugger.IsDebugging        = true;
            _debugger.Execute(node);
            _debugger.IsDebugging = false;

            Assert.IsTrue(mre.WaitOne(5000));
            Assert.IsTrue(breakpointHit);
        }
        public void ShouldAcceptArguments()
        {
            var fi = new FileInfo(".\\TestFile.ps1");

            var sbps = new List <ScriptBreakpoint>();

            _debugger = new ScriptDebugger(true, null);
            _debugger.SetRunspace(_runspace);
            _debugger.SetBreakpoints(sbps);

            var node = new ScriptProgramNode(null);

            node.FileName  = fi.FullName;
            node.IsFile    = true;
            node.Arguments = "'Arg1' 'Arg2'";

            var mre = new ManualResetEvent(false);

            _debugger.DebuggingFinished += (sender, args) => mre.Set();

            _debugger.Execute(node);

            Assert.IsTrue(mre.WaitOne(5000));

            var arg1 = _runspace.SessionStateProxy.GetVariable("Argument1");
            var arg2 = _runspace.SessionStateProxy.GetVariable("Argument2");

            Assert.AreEqual("Arg1", arg1);
            Assert.AreEqual("Arg2", arg2);
        }
        public void ShouldBreakOnBreakPoint()
        {
            var engineEvents = new Mock <IEngineEvents>();

            var fi = new FileInfo(".\\TestFile.ps1");

            var sbps = new List <ScriptBreakpoint>
            {
                new ScriptBreakpoint(null, fi.FullName, 3, 0, engineEvents.Object)
            };

            _debugger = new ScriptDebugger(true, null);
            _debugger.SetRunspace(_runspace);
            _debugger.SetBreakpoints(sbps);

            var node = new ScriptProgramNode(null);

            node.IsFile   = true;
            node.FileName = fi.FullName;

            var mre = new ManualResetEvent(false);

            bool breakpointHit = false;

            _debugger.BreakpointHit     += (sender, args) => { breakpointHit = true; _debugger.Continue(); };
            _debugger.DebuggingFinished += (sender, args) => mre.Set();
            _debugger.Execute(node);

            Assert.IsTrue(mre.WaitOne(5000));
            Assert.IsTrue(breakpointHit);
        }
        public void ShouldExecuteSnippet()
        {
            var sbps = new List <ScriptBreakpoint>();

            _debugger = new ScriptDebugger(true, null);
            _debugger.SetRunspace(_runspace);
            _debugger.SetBreakpoints(sbps);

            var node = new ScriptProgramNode(null);

            node.FileName = "$Global:MyVariable = 'Test'";

            var mre = new ManualResetEvent(false);

            _debugger.DebuggingFinished += (sender, args) => mre.Set();

            _debugger.Execute(node);

            Assert.IsTrue(mre.WaitOne(5000));

            var myVariable = _runspace.SessionStateProxy.GetVariable("MyVariable");

            Assert.AreEqual("Test", myVariable);
        }