Browse Source

Extract scripting console unread lines code to separate class.

pull/1/head
mrward 15 years ago
parent
commit
b96c13cabb
  1. 1
      src/AddIns/BackendBindings/Scripting/Project/ICSharpCode.Scripting.csproj
  2. 49
      src/AddIns/BackendBindings/Scripting/Project/Src/ScriptingConsole.cs
  3. 54
      src/AddIns/BackendBindings/Scripting/Project/Src/ScriptingConsoleUnreadLines.cs
  4. 17
      src/AddIns/BackendBindings/Scripting/Test/Utils/TestableScriptingConsole.cs

1
src/AddIns/BackendBindings/Scripting/Project/ICSharpCode.Scripting.csproj

@ -86,6 +86,7 @@
<Compile Include="Src\ScriptingConsolePad.cs" /> <Compile Include="Src\ScriptingConsolePad.cs" />
<Compile Include="Src\ScriptingConsoleTextEditor.cs" /> <Compile Include="Src\ScriptingConsoleTextEditor.cs" />
<Compile Include="Src\ScriptingConsoleTextEditorKeyEventArgs.cs" /> <Compile Include="Src\ScriptingConsoleTextEditorKeyEventArgs.cs" />
<Compile Include="Src\ScriptingConsoleUnreadLines.cs" />
<Compile Include="Src\ScriptingDesignerGenerator.cs" /> <Compile Include="Src\ScriptingDesignerGenerator.cs" />
<Compile Include="Src\ScriptingDesignerLoader.cs" /> <Compile Include="Src\ScriptingDesignerLoader.cs" />
<Compile Include="Src\ScriptingFileService.cs" /> <Compile Include="Src\ScriptingFileService.cs" />

49
src/AddIns/BackendBindings/Scripting/Project/Src/ScriptingConsole.cs

@ -13,21 +13,26 @@ namespace ICSharpCode.Scripting
public class ScriptingConsole : IDisposable, IScriptingConsole public class ScriptingConsole : IDisposable, IScriptingConsole
{ {
IScriptingConsoleTextEditor textEditor; IScriptingConsoleTextEditor textEditor;
CommandLineHistory commandLineHistory = new CommandLineHistory();
ScriptingConsoleUnreadLines unreadLines;
int promptLength; int promptLength;
bool firstPromptDisplayed; bool firstPromptDisplayed;
List<string> savedTextLines = new List<string>(); List<string> savedTextLines = new List<string>();
CommandLineHistory commandLineHistory = new CommandLineHistory();
protected List<string> unreadLines = new List<string>();
public event EventHandler LineReceived; public event EventHandler LineReceived;
public IMemberProvider MemberProvider { get; set; } public IMemberProvider MemberProvider { get; set; }
public ScriptingConsole(IScriptingConsoleTextEditor textEditor) public ScriptingConsole(IScriptingConsoleTextEditor textEditor)
: this(textEditor, new ScriptingConsoleUnreadLines())
{
}
public ScriptingConsole(IScriptingConsoleTextEditor textEditor, ScriptingConsoleUnreadLines unreadLines)
{ {
this.textEditor = textEditor; this.textEditor = textEditor;
this.unreadLines = unreadLines;
textEditor.PreviewKeyDown += ProcessPreviewKeyDown; textEditor.PreviewKeyDown += ProcessPreviewKeyDown;
} }
@ -46,7 +51,7 @@ namespace ICSharpCode.Scripting
Write(indent, ScriptingStyle.Prompt); Write(indent, ScriptingStyle.Prompt);
} }
string line = ReadLineFromTextEditor(); string line = ReadFirstUnreadLine();
if (line != null) { if (line != null) {
return indent + line; 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. /// Indicates whether there is a line already read by the console and waiting to be processed.
/// </summary> /// </summary>
public bool IsLineAvailable { public bool IsLineAvailable {
get { get { return (unreadLines.Count > 0); }
return (unreadLines.Count > 0);
}
} }
/// <summary> /// <summary>
@ -121,16 +124,6 @@ namespace ICSharpCode.Scripting
return textEditor.GetLine(textEditor.TotalLines - 1); return textEditor.GetLine(textEditor.TotalLines - 1);
} }
string ReadLineFromTextEditor()
{
if (IsLineAvailable) {
string line = unreadLines[0];
unreadLines.RemoveAt(0);
return line;
}
return null;
}
/// <summary> /// <summary>
/// Processes characters entered into the text editor by the user. /// Processes characters entered into the text editor by the user.
/// </summary> /// </summary>
@ -206,7 +199,7 @@ namespace ICSharpCode.Scripting
void SaveLastTextEditorLine() void SaveLastTextEditorLine()
{ {
string currentLine = GetCurrentLine(); string currentLine = GetCurrentLine();
unreadLines.Add(currentLine); unreadLines.AddLine(currentLine);
commandLineHistory.Add(currentLine); commandLineHistory.Add(currentLine);
} }
@ -290,7 +283,7 @@ namespace ICSharpCode.Scripting
public void SendLine(string line) public void SendLine(string line)
{ {
unreadLines.Add(line); unreadLines.AddLine(line);
FireLineReceivedEvent(); FireLineReceivedEvent();
MoveCursorToEndOfLastTextEditorLine(); MoveCursorToEndOfLastTextEditorLine();
WriteTextIfFirstPromptHasBeenDisplayed(line + "\r\n"); WriteTextIfFirstPromptHasBeenDisplayed(line + "\r\n");
@ -340,7 +333,7 @@ namespace ICSharpCode.Scripting
{ {
List<string> lines = GetLines(text); List<string> lines = GetLines(text);
if (lines.Count > 1) { if (lines.Count > 1) {
AddAllLinesButLastToUnreadLines(lines); unreadLines.AddAllLinesExceptLast(lines);
FireLineReceivedEvent(); FireLineReceivedEvent();
} }
WriteFirstLineIfFirstPromptHasBeenDisplayed(lines); WriteFirstLineIfFirstPromptHasBeenDisplayed(lines);
@ -362,23 +355,9 @@ namespace ICSharpCode.Scripting
return lines[0]; return lines[0];
} }
void AddAllLinesButLastToUnreadLines(List<string> lines)
{
int howMany = lines.Count - 1;
for (int i = 0; i < howMany; ++i) {
string line = lines[i];
unreadLines.Add(line);
}
}
public string ReadFirstUnreadLine() public string ReadFirstUnreadLine()
{ {
if (unreadLines.Count > 0) { return unreadLines.RemoveFirstLine();
string line = unreadLines[0];
unreadLines.RemoveAt(0);
return line;
}
return null;
} }
} }
} }

54
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<string> unreadLines = new List<string>();
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<string> 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();
}
}
}

17
src/AddIns/BackendBindings/Scripting/Test/Utils/TestableScriptingConsole.cs

@ -13,33 +13,30 @@ namespace ICSharpCode.Scripting.Tests.Utils
public FakeConsoleTextEditor FakeConsoleTextEditor; public FakeConsoleTextEditor FakeConsoleTextEditor;
public bool IsLineReceivedEventFired; public bool IsLineReceivedEventFired;
public int UnreadLineCountWhenLineReceivedEventFired = -1; public int UnreadLineCountWhenLineReceivedEventFired = -1;
public ScriptingConsoleUnreadLines UnreadLines;
public TestableScriptingConsole() public TestableScriptingConsole()
: this(new FakeConsoleTextEditor()) : this(new FakeConsoleTextEditor(), new ScriptingConsoleUnreadLines())
{ {
MemberProvider = new MockMemberProvider(); MemberProvider = new MockMemberProvider();
} }
TestableScriptingConsole(IScriptingConsoleTextEditor consoleTextEditor) TestableScriptingConsole(IScriptingConsoleTextEditor consoleTextEditor, ScriptingConsoleUnreadLines unreadLines)
: base(consoleTextEditor) : base(consoleTextEditor, unreadLines)
{ {
FakeConsoleTextEditor = (FakeConsoleTextEditor)consoleTextEditor; FakeConsoleTextEditor = (FakeConsoleTextEditor)consoleTextEditor;
} UnreadLines = unreadLines;
public List<string> GetUnreadLinesList()
{
return base.unreadLines;
} }
public string[] GetUnreadLines() public string[] GetUnreadLines()
{ {
return base.unreadLines.ToArray(); return UnreadLines.ToArray();
} }
protected override void FireLineReceivedEvent() protected override void FireLineReceivedEvent()
{ {
IsLineReceivedEventFired = true; IsLineReceivedEventFired = true;
UnreadLineCountWhenLineReceivedEventFired = base.unreadLines.Count; UnreadLineCountWhenLineReceivedEventFired = UnreadLines.Count;
} }
public void CallBaseFireLineReceivedEvent() public void CallBaseFireLineReceivedEvent()

Loading…
Cancel
Save