diff --git a/src/AddIns/BackendBindings/Scripting/Project/ICSharpCode.Scripting.csproj b/src/AddIns/BackendBindings/Scripting/Project/ICSharpCode.Scripting.csproj index 5b1c706ebc..0975ee52a7 100644 --- a/src/AddIns/BackendBindings/Scripting/Project/ICSharpCode.Scripting.csproj +++ b/src/AddIns/BackendBindings/Scripting/Project/ICSharpCode.Scripting.csproj @@ -86,6 +86,7 @@ + diff --git a/src/AddIns/BackendBindings/Scripting/Project/Src/ScriptingConsole.cs b/src/AddIns/BackendBindings/Scripting/Project/Src/ScriptingConsole.cs index f738d3f703..7f239f1ad1 100644 --- a/src/AddIns/BackendBindings/Scripting/Project/Src/ScriptingConsole.cs +++ b/src/AddIns/BackendBindings/Scripting/Project/Src/ScriptingConsole.cs @@ -13,21 +13,26 @@ namespace ICSharpCode.Scripting public class ScriptingConsole : IDisposable, IScriptingConsole { IScriptingConsoleTextEditor textEditor; + CommandLineHistory commandLineHistory = new CommandLineHistory(); + ScriptingConsoleUnreadLines unreadLines; int promptLength; bool firstPromptDisplayed; List savedTextLines = new List(); - CommandLineHistory commandLineHistory = new CommandLineHistory(); - - protected List unreadLines = new List(); public event EventHandler LineReceived; public IMemberProvider MemberProvider { get; set; } public ScriptingConsole(IScriptingConsoleTextEditor textEditor) + : this(textEditor, new ScriptingConsoleUnreadLines()) + { + } + + public ScriptingConsole(IScriptingConsoleTextEditor textEditor, ScriptingConsoleUnreadLines unreadLines) { this.textEditor = textEditor; + this.unreadLines = unreadLines; textEditor.PreviewKeyDown += ProcessPreviewKeyDown; } @@ -46,7 +51,7 @@ namespace ICSharpCode.Scripting Write(indent, ScriptingStyle.Prompt); } - string line = ReadLineFromTextEditor(); + string line = ReadFirstUnreadLine(); if (line != null) { return indent + line; } @@ -101,9 +106,7 @@ namespace ICSharpCode.Scripting /// Indicates whether there is a line already read by the console and waiting to be processed. /// public bool IsLineAvailable { - get { - return (unreadLines.Count > 0); - } + get { return (unreadLines.Count > 0); } } /// @@ -121,16 +124,6 @@ namespace ICSharpCode.Scripting return textEditor.GetLine(textEditor.TotalLines - 1); } - string ReadLineFromTextEditor() - { - if (IsLineAvailable) { - string line = unreadLines[0]; - unreadLines.RemoveAt(0); - return line; - } - return null; - } - /// /// Processes characters entered into the text editor by the user. /// @@ -206,7 +199,7 @@ namespace ICSharpCode.Scripting void SaveLastTextEditorLine() { string currentLine = GetCurrentLine(); - unreadLines.Add(currentLine); + unreadLines.AddLine(currentLine); commandLineHistory.Add(currentLine); } @@ -290,7 +283,7 @@ namespace ICSharpCode.Scripting public void SendLine(string line) { - unreadLines.Add(line); + unreadLines.AddLine(line); FireLineReceivedEvent(); MoveCursorToEndOfLastTextEditorLine(); WriteTextIfFirstPromptHasBeenDisplayed(line + "\r\n"); @@ -340,7 +333,7 @@ namespace ICSharpCode.Scripting { List lines = GetLines(text); if (lines.Count > 1) { - AddAllLinesButLastToUnreadLines(lines); + unreadLines.AddAllLinesExceptLast(lines); FireLineReceivedEvent(); } WriteFirstLineIfFirstPromptHasBeenDisplayed(lines); @@ -362,23 +355,9 @@ namespace ICSharpCode.Scripting return lines[0]; } - void AddAllLinesButLastToUnreadLines(List lines) - { - int howMany = lines.Count - 1; - for (int i = 0; i < howMany; ++i) { - string line = lines[i]; - unreadLines.Add(line); - } - } - public string ReadFirstUnreadLine() { - if (unreadLines.Count > 0) { - string line = unreadLines[0]; - unreadLines.RemoveAt(0); - return line; - } - return null; + return unreadLines.RemoveFirstLine(); } } } diff --git a/src/AddIns/BackendBindings/Scripting/Project/Src/ScriptingConsoleUnreadLines.cs b/src/AddIns/BackendBindings/Scripting/Project/Src/ScriptingConsoleUnreadLines.cs new file mode 100644 index 0000000000..9c085a8617 --- /dev/null +++ b/src/AddIns/BackendBindings/Scripting/Project/Src/ScriptingConsoleUnreadLines.cs @@ -0,0 +1,54 @@ +// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) + +using System; +using System.Collections.Generic; + +namespace ICSharpCode.Scripting +{ + public class ScriptingConsoleUnreadLines + { + List unreadLines = new List(); + + public ScriptingConsoleUnreadLines() + { + } + + public bool IsLineAvailable { + get { return unreadLines.Count > 0; } + } + + public int Count { + get { return unreadLines.Count; } + } + + public string RemoveFirstLine() + { + if (IsLineAvailable) { + string line = unreadLines[0]; + unreadLines.RemoveAt(0); + return line; + } + return null; + } + + public void AddLine(string line) + { + unreadLines.Add(line); + } + + public void AddAllLinesExceptLast(IList lines) + { + int howMany = lines.Count - 1; + for (int i = 0; i < howMany; ++i) { + string line = lines[i]; + unreadLines.Add(line); + } + } + + public string[] ToArray() + { + return unreadLines.ToArray(); + } + } +} diff --git a/src/AddIns/BackendBindings/Scripting/Test/Utils/TestableScriptingConsole.cs b/src/AddIns/BackendBindings/Scripting/Test/Utils/TestableScriptingConsole.cs index 6343cbe08f..acdf98260d 100644 --- a/src/AddIns/BackendBindings/Scripting/Test/Utils/TestableScriptingConsole.cs +++ b/src/AddIns/BackendBindings/Scripting/Test/Utils/TestableScriptingConsole.cs @@ -13,33 +13,30 @@ namespace ICSharpCode.Scripting.Tests.Utils public FakeConsoleTextEditor FakeConsoleTextEditor; public bool IsLineReceivedEventFired; public int UnreadLineCountWhenLineReceivedEventFired = -1; + public ScriptingConsoleUnreadLines UnreadLines; public TestableScriptingConsole() - : this(new FakeConsoleTextEditor()) + : this(new FakeConsoleTextEditor(), new ScriptingConsoleUnreadLines()) { MemberProvider = new MockMemberProvider(); } - TestableScriptingConsole(IScriptingConsoleTextEditor consoleTextEditor) - : base(consoleTextEditor) + TestableScriptingConsole(IScriptingConsoleTextEditor consoleTextEditor, ScriptingConsoleUnreadLines unreadLines) + : base(consoleTextEditor, unreadLines) { FakeConsoleTextEditor = (FakeConsoleTextEditor)consoleTextEditor; - } - - public List GetUnreadLinesList() - { - return base.unreadLines; + UnreadLines = unreadLines; } public string[] GetUnreadLines() { - return base.unreadLines.ToArray(); + return UnreadLines.ToArray(); } protected override void FireLineReceivedEvent() { IsLineReceivedEventFired = true; - UnreadLineCountWhenLineReceivedEventFired = base.unreadLines.Count; + UnreadLineCountWhenLineReceivedEventFired = UnreadLines.Count; } public void CallBaseFireLineReceivedEvent()