public void CancelScriptRun()
        {
            using (var source = new CancellationTokenSource())
            {
                using (var task = Task.Factory.StartNew(
                    () => { },
                    source.Token,
                    TaskCreationOptions.None,
                    new CurrentThreadTaskScheduler()))
                {
                    var tuple = new Tuple<Task, CancellationTokenSource>(task, source);
                    var scriptHost = new Mock<IHostScripts>();
                    {
                        scriptHost.Setup(s => s.Execute(It.IsAny<ScriptLanguage>(), It.IsAny<string>(), It.IsAny<TextWriter>()))
                            .Returns(tuple);
                    }

                    var command = new RunScriptCommand(scriptHost.Object);
                    Assert.IsTrue(command.CanExecute(null));

                    var info = new ScriptRunInformation
                    {
                        Language = ScriptLanguage.IronPython,
                        Script = "a",
                        ScriptOutput = new ScriptOutputPipe(),
                    };
                    command.Execute(info);

                    Assert.AreSame(tuple.Item1, info.ScriptRunningTask);
                    Assert.AreSame(tuple.Item2, info.CancellationToken);
                }
            }
        }
        public void CloseScript()
        {
            var scriptHost = new Mock<IHostScripts>();
            {
                scriptHost.Setup(s => s.IsExecutingScript)
                    .Returns(true);
            }

            Func<string, IDisposable> func = s => new MockDisposable();

            var command = new CloseScriptCommand(scriptHost.Object, func);
            Assert.IsTrue(command.CanExecute(null));

            var info = new ScriptRunInformation
            {
                ScriptRunningTask = Task.Factory.StartNew(() => { }),
                CancellationToken = new CancellationTokenSource(),
            };
            command.Execute(info);

            Assert.IsTrue(info.CancellationToken.IsCancellationRequested);
        }
Example #3
0
        private void CommandRunScriptExecuted(object sender, ExecutedRoutedEventArgs e)
        {
            e.Handled = true;

            var pipe = m_CreateNewScriptOutputPipe();
            pipe.OnScriptOutput += new EventHandler<ScriptOutputEventArgs>(OnScriptOutput);

            m_ScriptRunInfo = new ScriptRunInformation
            {
                Language = Model.ScriptLanguage.Language,
                Script = textEditor.Text,
                ScriptOutput = pipe,
            };
            Model.RunCommand.Execute(m_ScriptRunInfo);
            m_ScriptRunInfo.ScriptRunningTask.ContinueWith(
                t =>
                {
                    if (t.Status == TaskStatus.Faulted)
                    {
                        WriteToOutputWindow(t.Exception.ToString());
                    }

                    m_ScriptRunInfo.ScriptOutput.OnScriptOutput += new EventHandler<ScriptOutputEventArgs>(OnScriptOutput);
                    m_ScriptRunInfo = null;
                },
                TaskContinuationOptions.None);
        }
Example #4
0
 private void CommandCancelRunScriptExecuted(object sender, ExecutedRoutedEventArgs e)
 {
     e.Handled = true;
     try
     {
         Model.CancelRunCommand.Execute(m_ScriptRunInfo);
         try
         {
             m_ScriptRunInfo.ScriptRunningTask.Wait();
         }
         catch (AggregateException exception)
         {
             WriteToOutputWindow(exception.ToString());
         }
     }
     finally
     {
         m_ScriptRunInfo.ScriptOutput.OnScriptOutput -= new EventHandler<ScriptOutputEventArgs>(OnScriptOutput);
         m_ScriptRunInfo = null;
     }
 }