mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-31 01:47:43 +02:00
SynEdit: Test for updating bookmarks
git-svn-id: trunk@27821 -
This commit is contained in:
parent
8d09d0abf3
commit
b22fb772ba
@ -28,6 +28,7 @@ type
|
||||
function AddMark(EditIndex: Integer; Y, X: Integer) : TSynEditMark;
|
||||
published
|
||||
procedure TestMarks;
|
||||
procedure TestBookMarks;
|
||||
end;
|
||||
|
||||
implementation
|
||||
@ -122,8 +123,8 @@ begin
|
||||
// default setting is shared marklist
|
||||
FSynEdits[1].ShareOptions := [eosShareMarks];
|
||||
FSynEdits[1].ShareTextBufferFrom(FSynEdits[0]);
|
||||
|
||||
SetLines(TestText1);
|
||||
|
||||
CheckMarks('empty', 0, []);
|
||||
CheckMarks('empty', 1, []);
|
||||
|
||||
@ -142,8 +143,8 @@ begin
|
||||
// setting is not shared marklist
|
||||
FSynEdits[1].ShareOptions := [];
|
||||
FSynEdits[1].ShareTextBufferFrom(FSynEdits[0]);
|
||||
|
||||
SetLines(TestText1);
|
||||
|
||||
CheckMarks('empty', 0, []);
|
||||
CheckMarks('empty', 1, []);
|
||||
|
||||
@ -158,6 +159,146 @@ begin
|
||||
|
||||
end;
|
||||
|
||||
procedure TTestSynSharedEdits.TestBookMarks;
|
||||
procedure CheckBMarks(Name: String; EditIndex: Integer; MarkList: Array of Integer);
|
||||
var
|
||||
m: TSynEditMark;
|
||||
l: Array of Integer;
|
||||
i, j: Integer;
|
||||
begin
|
||||
Name := BaseTestName + Name;
|
||||
AssertEquals(Name + ' Edit: '+IntToStr(EditIndex)+' Count: ', length(MarkList) div 2, FSynEdits[EditIndex].Marks.Count);
|
||||
|
||||
SetLength(l, FSynEdits[EditIndex].Lines.Count);
|
||||
for i := 0 to length(l)-1 do
|
||||
l[i] := 0;
|
||||
|
||||
for i := 0 to (length(MarkList) div 2) - 1 do begin
|
||||
l[MarkList[i*2+0]] := l[MarkList[i*2+0]] + 1;
|
||||
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)+' ) BookNum: ', MarkList[i*2+1], m.BookmarkNumber);
|
||||
AssertEquals(Name + ' Edit: '+IntToStr(EditIndex)+' Mark( '+IntToStr(i)+' ) IndexOf: ', i, FSynEdits[EditIndex].Marks.IndexOf(m));
|
||||
end;
|
||||
|
||||
for i := 0 to length(l)-1 do begin
|
||||
j := 0;
|
||||
if FSynEdits[EditIndex].Marks.Line[i] <> nil then
|
||||
j := FSynEdits[EditIndex].Marks.Line[i].Count;
|
||||
AssertEquals(Name + ' Edit: '+IntToStr(EditIndex)+' Count in line '+IntToStr(i)+': ', l[i], j);
|
||||
end;
|
||||
|
||||
end;
|
||||
|
||||
var
|
||||
e1, e2, e3: Integer;
|
||||
begin
|
||||
{%region edits already shared }
|
||||
ReCreateEdit(2);
|
||||
// default setting is shared marklist
|
||||
FSynEdits[1].ShareOptions := [eosShareMarks];
|
||||
FSynEdits[1].ShareTextBufferFrom(FSynEdits[0]);
|
||||
SetLines(TestText1);
|
||||
PushBaseName('2 shared');
|
||||
|
||||
PushBaseName('');
|
||||
for e1 := 0 to 1 do begin
|
||||
for e2 := 0 to 1 do begin
|
||||
PopPushBaseName('e1='+IntToStr(e1) + ' e2='+IntToStr(e2) );
|
||||
// Set Mark
|
||||
FSynEdits[e1].SetBookMark(1, 2, 4);
|
||||
CheckBMarks('bm 1', 0, [ 4, 1 ]);
|
||||
CheckBMarks('bm 1', 1, [ 4, 1 ]);
|
||||
|
||||
// goto
|
||||
SelectEdit(0);
|
||||
SynEdit.GotoBookMark(1);
|
||||
TestIsCaret('Goto1 /0', 2, 4);
|
||||
SelectEdit(1);
|
||||
SynEdit.GotoBookMark(1);
|
||||
TestIsCaret('Goto1 /1', 2, 4);
|
||||
|
||||
// clear
|
||||
FSynEdits[e2].ClearBookMark(1);
|
||||
CheckBMarks('bm clear', 0, [] );
|
||||
CheckBMarks('bm clear', 1, [] );
|
||||
end;
|
||||
end;
|
||||
PopBaseName;
|
||||
|
||||
PushBaseName('');
|
||||
for e1 := 0 to 1 do begin
|
||||
for e2 := 0 to 1 do begin
|
||||
for e3 := 0 to 1 do begin
|
||||
PopPushBaseName('e1='+IntToStr(e1) + ' e2='+IntToStr(e2) + ' e3='+IntToStr(e3));
|
||||
FSynEdits[e1].ClearBookMark(1);
|
||||
FSynEdits[e1].ClearBookMark(2);
|
||||
// set 1 on ed1
|
||||
FSynEdits[e1].SetBookMark(1, 2, 4);
|
||||
CheckBMarks('bm set 1', 0, [ 4, 1 ]);
|
||||
CheckBMarks('bm set 1', 1, [ 4, 1 ]);
|
||||
|
||||
// set 2 on ed2
|
||||
FSynEdits[e2].SetBookMark(2, 2, 5);
|
||||
CheckBMarks('bm set 2', 0, [ 4,1, 5,2 ]);
|
||||
CheckBMarks('bm set 2', 1, [ 4,1, 5,2 ]);
|
||||
|
||||
// move 1 on ed3
|
||||
FSynEdits[e3].SetBookMark(1, 2, 3);
|
||||
CheckBMarks('bm move 1', 0, [ 3,1, 5,2 ]);
|
||||
CheckBMarks('bm move 1', 1, [ 3,1, 5,2 ]);
|
||||
|
||||
// move 2 over 1 on ed3
|
||||
FSynEdits[e3].SetBookMark(2, 3, 3);
|
||||
CheckBMarks('bm move 2 over 1', 0, [ 3,2 ]);
|
||||
CheckBMarks('bm move 2 over 1', 1, [ 3,2 ]);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
PopBaseName;
|
||||
{%endregion}
|
||||
|
||||
|
||||
{%region edits shared after bookmark set }
|
||||
ReCreateEdit(2);
|
||||
// default setting is shared marklist
|
||||
FSynEdits[1].ShareOptions := [eosShareMarks];
|
||||
SetLines(TestText1);
|
||||
PopPushBaseName('2 shared after bm set');
|
||||
|
||||
FSynEdits[0].SetBookMark(1, 2, 4);
|
||||
CheckBMarks('bm 1', 0, [ 4, 1 ]);
|
||||
CheckBMarks('bm 1', 1, [ ]);
|
||||
|
||||
FSynEdits[1].ShareTextBufferFrom(FSynEdits[0]);
|
||||
|
||||
CheckBMarks('bm shared 1', 0, [ 4, 1 ]);
|
||||
CheckBMarks('bm shared 1', 1, [ 4, 1 ]);
|
||||
|
||||
FSynEdits[1].ClearBookMark(1);
|
||||
|
||||
CheckBMarks('clear', 0, []);
|
||||
CheckBMarks('clear', 1, []);
|
||||
|
||||
// unshare edits
|
||||
FSynEdits[0].SetBookMark(1, 2, 4);
|
||||
CheckBMarks('bm 1', 0, [ 4, 1 ]);
|
||||
CheckBMarks('bm 1', 1, [ 4, 1 ]);
|
||||
|
||||
FSynEdits[1].UnShareTextBuffer;
|
||||
CheckBMarks('unshare 1', 0, [ 4, 1 ]);
|
||||
CheckBMarks('unshare 1', 1, [ ]);
|
||||
|
||||
FSynEdits[1].ClearBookMark(1);
|
||||
CheckBMarks('unshare 1', 0, [ 4, 1 ]); // not affected
|
||||
CheckBMarks('unshare 1', 1, [ ]);
|
||||
|
||||
FSynEdits[0].ClearBookMark(1);
|
||||
CheckBMarks('unshare 1', 0, [ ]);
|
||||
CheckBMarks('unshare 1', 1, [ ]);
|
||||
{%endregion}
|
||||
end;
|
||||
|
||||
initialization
|
||||
|
||||
RegisterTest(TTestSynSharedEdits);
|
||||
|
Loading…
Reference in New Issue
Block a user