From 5dbdd6ad3030ffc7d04ce78bb6e2afaf35831433 Mon Sep 17 00:00:00 2001 From: mrward Date: Sun, 12 Sep 2010 16:27:10 +0100 Subject: [PATCH] Fix problem with lines not being sent to scripting console when console not currently open. --- .../Scripting/Project/Src/ScriptingConsole.cs | 17 +++++++++----- .../Console/ScriptingConsoleSendTextTests.cs | 23 +++++++++++++++++-- 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/src/AddIns/BackendBindings/Scripting/Project/Src/ScriptingConsole.cs b/src/AddIns/BackendBindings/Scripting/Project/Src/ScriptingConsole.cs index afe8f15e3b..f738d3f703 100644 --- a/src/AddIns/BackendBindings/Scripting/Project/Src/ScriptingConsole.cs +++ b/src/AddIns/BackendBindings/Scripting/Project/Src/ScriptingConsole.cs @@ -310,6 +310,16 @@ namespace ICSharpCode.Scripting } } + void WriteFirstLineIfFirstPromptHasBeenDisplayed(List lines) + { + string firstLine = GetFirstLineOfText(lines); + if (firstPromptDisplayed) { + Write(firstLine, ScriptingStyle.Out); + lines.RemoveAt(0); + } + savedTextLines = lines; + } + public virtual IList GetMemberNames(string name) { return new string[0]; @@ -329,16 +339,11 @@ namespace ICSharpCode.Scripting void WriteFirstLineOfTextIfFirstPromptHasBeenDisplayed(string text) { List lines = GetLines(text); - string firstLine = GetFirstLineOfText(lines); - if (lines.Count > 1) { AddAllLinesButLastToUnreadLines(lines); FireLineReceivedEvent(); } - lines.RemoveAt(0); - savedTextLines = lines; - - WriteTextIfFirstPromptHasBeenDisplayed(firstLine); + WriteFirstLineIfFirstPromptHasBeenDisplayed(lines); } List GetLines(string text) diff --git a/src/AddIns/BackendBindings/Scripting/Test/Console/ScriptingConsoleSendTextTests.cs b/src/AddIns/BackendBindings/Scripting/Test/Console/ScriptingConsoleSendTextTests.cs index d8325f1cf0..c43afd5597 100644 --- a/src/AddIns/BackendBindings/Scripting/Test/Console/ScriptingConsoleSendTextTests.cs +++ b/src/AddIns/BackendBindings/Scripting/Test/Console/ScriptingConsoleSendTextTests.cs @@ -4,6 +4,7 @@ using System; using ICSharpCode.NRefactory; using ICSharpCode.Scripting; +using ICSharpCode.Scripting.Tests.Utils; using NUnit.Framework; namespace ICSharpCode.Scripting.Tests.Console @@ -65,12 +66,30 @@ namespace ICSharpCode.Scripting.Tests.Console TestableScriptingConsole.SendText("test"); TestableScriptingConsole.Write(">>> ", ScriptingStyle.Prompt); - string text = FakeConsoleTextEditor.Text; + string text = FakeConsoleTextEditor.TextPassedToWrite; - string expectedText = ">>> test"; + string expectedText = "test"; Assert.AreEqual(expectedText, text); } + [Test] + public void Write_SendTextCalledWithTwoLinesButNoPromptWrittenAndWriteCalledTwice_WritesOutSecondLineOfSavedText() + { + base.CreateConsole(); + string text = + "first\r\n" + + "second"; + TestableScriptingConsole.SendText(text); + + TestableScriptingConsole.Write(">>> ", ScriptingStyle.Prompt); + TestableScriptingConsole.Write(">>> ", ScriptingStyle.Prompt); + + string textPassedToWrite = FakeConsoleTextEditor.TextPassedToWrite; + string expectedText = "second"; + + Assert.AreEqual(expectedText, textPassedToWrite); + } + [Test] public void SendText_TwoLinesSelected_FirstLineOfTextWrittenToTextEditor() {