mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-14 19:39:39 +02:00
SynEdit: Tests for SharedTextBuffer can share Bookmarks too
git-svn-id: trunk@27815 -
This commit is contained in:
parent
3812c5bc84
commit
35b8ee719e
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -2172,6 +2172,7 @@ components/synedit/test/testmarkupwordgroup.pas svneol=native#text/pascal
|
||||
components/synedit/test/testsynbeautifier.pas svneol=native#text/pascal
|
||||
components/synedit/test/testsyncroedit.pas svneol=native#text/pascal
|
||||
components/synedit/test/testsynselection.pas svneol=native#text/pascal
|
||||
components/synedit/test/testsynsharededits.pas svneol=native#text/pascal
|
||||
components/synedit/test/testtrimspace.pas svneol=native#text/pascal
|
||||
components/synunihighlighter/CHANGES.txt svneol=native#text/plain
|
||||
components/synunihighlighter/CREDITS.txt svneol=native#text/plain
|
||||
|
@ -34,11 +34,11 @@ type
|
||||
FBaseTestNames: Array of String;
|
||||
FFixedBaseTestNames: Integer;
|
||||
FForm : TForm;
|
||||
FSynEdit : TTestSynEdit;
|
||||
function GetClipBoardText: String;
|
||||
procedure SetBaseTestName(const AValue: String);
|
||||
procedure SetClipBoardText(const AValue: String);
|
||||
protected
|
||||
FSynEdit : TTestSynEdit;
|
||||
function LinesToText(Lines: Array of String; Separator: String = LineEnding;
|
||||
SeparatorAtEnd: Boolean = False): String;
|
||||
(* Relpl,must be an alteration of LineNum, LineText+
|
||||
|
@ -109,44 +109,36 @@ begin
|
||||
// check movement
|
||||
SynEdit.CaretXY := Point(1, 3); // between marks (first mar is not *behind*
|
||||
SynEdit.CommandProcessor(ecChar, 'M', nil);
|
||||
SynEdit.Marks.Debug;
|
||||
CheckMarks('ecChar between marks : 3/1 - 3/3 - 5/1', [ 3,3, 3,1, 5,2 ]);
|
||||
|
||||
SynEdit.CaretXY := Point(1, 5); // before mark
|
||||
SynEdit.CommandProcessor(ecLineBreak, ' ', nil);
|
||||
SynEdit.Marks.Debug;
|
||||
CheckMarks('ecLineBreak before mark : 3/1 - 3/3 - 6/1', [ 3,3, 3,1, 6,2 ]);
|
||||
|
||||
SynEdit.CaretXY := Point(2, 6); // after mark
|
||||
SynEdit.CommandProcessor(ecLineBreak, ' ', nil);
|
||||
SynEdit.Marks.Debug;
|
||||
CheckMarks('ecLineBreak after mark : 3/1 - 3/3 - 6/1', [ 3,3, 3,1, 6,2 ]);
|
||||
|
||||
SynEdit.CaretXY := Point(2, 4); // prev line
|
||||
SynEdit.CommandProcessor(ecLineBreak, ' ', nil);
|
||||
SynEdit.Marks.Debug;
|
||||
CheckMarks('ecLineBreak prev line : 3/1 - 3/3 - 7/1', [ 3,3, 3,1, 7,2 ]);
|
||||
|
||||
SynEdit.CaretXY := Point(1, 3); // between marks (first mar is not *behind*
|
||||
SynEdit.CommandProcessor(ecDeleteChar, 'M', nil);
|
||||
SynEdit.Marks.Debug;
|
||||
CheckMarks('ecDeleteChar between marks : 3/1 - 3/2 - 5/1', [ 3,2, 3,1, 7,2 ]);
|
||||
|
||||
SynEdit.CaretXY := Point(1, 6); // prev line
|
||||
SynEdit.CommandProcessor(ecChar, '>', nil);
|
||||
SynEdit.CaretXY := Point(1, 7); // begin line
|
||||
SynEdit.CommandProcessor(ecDeleteLastChar, ' ', nil);
|
||||
SynEdit.Marks.Debug;
|
||||
CheckMarks('ecDeleteLine begin line : 3/1 - 3/3 - 6/3', [ 3,2, 3,1, 6,3 ]);
|
||||
|
||||
SynEdit.CaretXY := Point(1, 5); // prev line
|
||||
SynEdit.CommandProcessor(ecDeleteLastChar, ' ', nil);
|
||||
SynEdit.Marks.Debug;
|
||||
CheckMarks('ecDeleteLine 2-prev line : 3/1 - 3/3 - 6/3', [ 3,2, 3,1, 5,3 ]);
|
||||
|
||||
SynEdit.CaretXY := Point(1, 4); // direct prev line
|
||||
SynEdit.CommandProcessor(ecLineBreak, ' ', nil);
|
||||
SynEdit.Marks.Debug;
|
||||
CheckMarks('ecLineBreak direct-prev line : 3/1 - 3/3 - 7/1', [ 3,2, 3,1, 6,3 ]);
|
||||
|
||||
// more marks
|
||||
|
@ -62,7 +62,7 @@ var
|
||||
end;
|
||||
begin
|
||||
PushBaseName(AName);
|
||||
if EnableDebug then FoldedView.debug;
|
||||
//if EnableDebug then FoldedView.debug;
|
||||
ExpTxt := '';
|
||||
for i := 0 to high(ALines) do ExpTxt := ExpTxt + SynEdit.Lines[ALines[i]] + LineEnding;
|
||||
TestCompareString('', ExpTxt, GetFoldedText);
|
||||
|
165
components/synedit/test/testsynsharededits.pas
Normal file
165
components/synedit/test/testsynsharededits.pas
Normal file
@ -0,0 +1,165 @@
|
||||
unit TestSynSharedEdits;
|
||||
(* Test multiply edits sharing a textbuffer
|
||||
*)
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, testregistry, TestBase, LCLProc,
|
||||
SynEdit, SynEditMarks, SynEditKeyCmds;
|
||||
|
||||
type
|
||||
|
||||
{ TTestSynSharedEdits }
|
||||
|
||||
TTestSynSharedEdits = class(TTestBase)
|
||||
private
|
||||
FSynEdits : Array of TTestSynEdit;
|
||||
protected
|
||||
//procedure SetUp; override;
|
||||
procedure TearDown; override;
|
||||
procedure ReCreateEdit; reintroduce; overload;
|
||||
procedure ReCreateEdit(Count: Integer); overload;
|
||||
procedure SelectEdit(Index: Integer);
|
||||
function TestText1: TStringArray;
|
||||
procedure CheckMarks(Name: String; EditIndex: Integer; MarkList: Array of Integer);
|
||||
function AddMark(EditIndex: Integer; Y, X: Integer) : TSynEditMark;
|
||||
published
|
||||
procedure TestMarks;
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
|
||||
{ TTestSynSharedEdits }
|
||||
|
||||
procedure TTestSynSharedEdits.TearDown;
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
FSynEdit := nil;
|
||||
for i := 0 to length(FSynEdits) - 1 do
|
||||
FSynEdits[i].Free;
|
||||
SetLength(FSynEdits, 0);
|
||||
inherited TearDown;
|
||||
end;
|
||||
|
||||
procedure TTestSynSharedEdits.ReCreateEdit;
|
||||
begin
|
||||
ReCreateEdit(1);
|
||||
end;
|
||||
|
||||
procedure TTestSynSharedEdits.ReCreateEdit(Count: Integer);
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
for i := 0 to length(FSynEdits) - 1 do
|
||||
FSynEdits[i].Free;
|
||||
|
||||
SetLength(FSynEdits, Count);
|
||||
Form.Height := 600;
|
||||
Form.Width := 500;
|
||||
for i := 0 to Count - 1 do begin
|
||||
FSynEdits[i] := TTestSynEdit.Create(Form);
|
||||
FSynEdits[i].Parent := Form;
|
||||
FSynEdits[i].Top := 200 * i;
|
||||
FSynEdits[i].Left := 0;
|
||||
FSynEdits[i].Width:= 500;
|
||||
FSynEdits[i].Height := 200; // FSynEdits[i].Font.Height * 20 + 2;
|
||||
end;
|
||||
|
||||
FSynEdit := FSynEdits[0];
|
||||
end;
|
||||
|
||||
procedure TTestSynSharedEdits.SelectEdit(Index: Integer);
|
||||
begin
|
||||
FSynEdit := FSynEdits[Index];
|
||||
end;
|
||||
|
||||
function TTestSynSharedEdits.TestText1: TStringArray;
|
||||
begin
|
||||
SetLength(Result, 8);
|
||||
Result[0] := 'abc';
|
||||
Result[1] := 'def 123;';
|
||||
Result[2] := 'xyz 098765';
|
||||
Result[3] := '';
|
||||
Result[4] := '1';
|
||||
Result[5] := ' mno...';
|
||||
Result[6] := ' ABCDEF';
|
||||
Result[7] := ' 321';
|
||||
end;
|
||||
|
||||
procedure TTestSynSharedEdits.CheckMarks(Name: String; EditIndex: Integer;
|
||||
MarkList: array of Integer);
|
||||
var
|
||||
m: TSynEditMark;
|
||||
i: Integer;
|
||||
begin
|
||||
AssertEquals(Name + ' Edit: '+IntToStr(EditIndex)+' Count: ', length(MarkList) div 2, FSynEdits[EditIndex].Marks.Count);
|
||||
|
||||
for i := 0 to (length(MarkList) div 2) - 1 do begin
|
||||
m := FSynEdits[EditIndex].Marks[i];
|
||||
AssertEquals(Name + ' Edit: '+IntToStr(EditIndex)+' Mark( '+IntToStr(i)+' ) Line: ', MarkList[i*2+0], m.Line);
|
||||
AssertEquals(Name + ' Edit: '+IntToStr(EditIndex)+' Mark( '+IntToStr(i)+' ) Column: ', MarkList[i*2+1], m.Column);
|
||||
AssertEquals(Name + ' Edit: '+IntToStr(EditIndex)+' Mark( '+IntToStr(i)+' ) IndexOf: ', i, FSynEdits[EditIndex].Marks.IndexOf(m));
|
||||
end;
|
||||
end;
|
||||
|
||||
function TTestSynSharedEdits.AddMark(EditIndex: Integer; Y, X: Integer): TSynEditMark;
|
||||
begin
|
||||
Result := TSynEditMark.Create(SynEdit);
|
||||
Result.Line := Y;
|
||||
Result.Column := X;
|
||||
FSynEdits[EditIndex].Marks.Add(Result);
|
||||
end;
|
||||
|
||||
procedure TTestSynSharedEdits.TestMarks;
|
||||
begin
|
||||
ReCreateEdit(2);
|
||||
|
||||
// default setting is shared marklist
|
||||
FSynEdits[1].ShareOptions := [eosShareMarks];
|
||||
FSynEdits[1].ShareTextBufferFrom(FSynEdits[0]);
|
||||
|
||||
SetLines(TestText1);
|
||||
CheckMarks('empty', 0, []);
|
||||
CheckMarks('empty', 1, []);
|
||||
|
||||
AddMark(0, 3,2);
|
||||
CheckMarks('3/2', 0, [ 3,2 ]);
|
||||
CheckMarks('3/2', 1, [ 3,2 ]);
|
||||
|
||||
AddMark(1, 5,2);
|
||||
CheckMarks('3/2 - 5/1', 0, [ 3,2, 5,2 ]);
|
||||
CheckMarks('3/2 - 5/1', 1, [ 3,2, 5,2 ]);
|
||||
|
||||
|
||||
|
||||
ReCreateEdit(2);
|
||||
|
||||
// setting is not shared marklist
|
||||
FSynEdits[1].ShareOptions := [];
|
||||
FSynEdits[1].ShareTextBufferFrom(FSynEdits[0]);
|
||||
|
||||
SetLines(TestText1);
|
||||
CheckMarks('empty', 0, []);
|
||||
CheckMarks('empty', 1, []);
|
||||
|
||||
AddMark(0, 3,2);
|
||||
CheckMarks('3/2', 0, [ 3,2 ]);
|
||||
CheckMarks('3/2', 1, []);
|
||||
|
||||
AddMark(1, 5,2);
|
||||
CheckMarks('3/2 - 5/1', 0, [ 3,2 ]);
|
||||
CheckMarks('3/2 - 5/1', 1, [ 5,2 ]);
|
||||
|
||||
|
||||
end;
|
||||
|
||||
initialization
|
||||
|
||||
RegisterTest(TTestSynSharedEdits);
|
||||
end.
|
||||
|
Loading…
Reference in New Issue
Block a user