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()