SynEdit: Test for updating bookmarks

git-svn-id: trunk@27821 -
This commit is contained in:
martin 2010-10-24 00:29:53 +00:00
parent 8d09d0abf3
commit b22fb772ba

View File

@ -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);