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); }
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); }
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; } }