From e1fffd38c74694dbae494835e6c057b4ff3227ac Mon Sep 17 00:00:00 2001 From: martin Date: Thu, 19 Dec 2019 18:04:19 +0000 Subject: [PATCH] SynEdit: TEST for Improve SetTextBetweenPoints and IncPersistentLock(weak) git-svn-id: trunk@62421 - --- components/synedit/test/testsynselection.pas | 148 +++++++++++++++++-- 1 file changed, 137 insertions(+), 11 deletions(-) diff --git a/components/synedit/test/testsynselection.pas b/components/synedit/test/testsynselection.pas index 5abcbf231d..e93e925cfe 100644 --- a/components/synedit/test/testsynselection.pas +++ b/components/synedit/test/testsynselection.pas @@ -1542,6 +1542,7 @@ end; procedure TTestSynSelection.MoveOnSetTextBeween; var TheText: TStringArray; + TheInsert: String; function GetTheText: TStringArray; begin @@ -1566,7 +1567,8 @@ var SetCaretAndSel(SelBx, SelBy, SelEx,SelEy); s := SynEdit.SelAvail; p := Point(Textx,TextY); - SynEdit.SetTextBetweenPoints(p, p, 'X', aFlags, aCaretMode); + SynEdit.SetTextBetweenPoints(p, p, TheInsert, aFlags, aCaretMode); + debugln(['Caret ', dbgs(SynEdit.CaretXY), ' Sel ', dbgs(SynEdit.BlockBegin), ' ',dbgs(SynEdit.BlockEnd)]); TestIsBlock('After Replace', ExpBx,ExpBy, ExpEx,ExpEy); @@ -1578,11 +1580,44 @@ var SynEdit.Redo; TestIsBlock('After Redo', ExpBx,ExpBy, ExpEx,ExpEy); end; + + procedure DoTest(AName: String; + SelBX, SelBY, SelEX, SelEY, + TextX, TextY, TextX2, TextY2, + ExpBx, ExpBy, ExpEx, ExpEy: Integer; + aFlags: TSynEditTextFlags = []; aCaretMode: TSynCaretAdjustMode = scamIgnore); + var + s: Boolean; + p, p2: TPoint; + begin + PopPushBaseName(AName); + SetLines(TheText); + if Length(TheText) = 0 then SynEdit.Lines.Clear; + + SetCaretAndSel(SelBx, SelBy, SelEx,SelEy); + s := SynEdit.SelAvail; + p := Point(Textx,TextY); + p2 := Point(Textx2,TextY2); + SynEdit.SetTextBetweenPoints(p, p2, TheInsert, aFlags, aCaretMode); + debugln(['Caret ', dbgs(SynEdit.CaretXY), ' Sel ', dbgs(SynEdit.BlockBegin), ' ',dbgs(SynEdit.BlockEnd)]); + + TestIsBlock('After Replace', ExpBx,ExpBy, ExpEx,ExpEy); + + SynEdit.Undo; + if s + then TestIsBlock('After Undo', SelBx, SelBy, SelEx,SelEy) + else TestIsNoBlock('After Undo'); + + SynEdit.Redo; + TestIsBlock('After Redo', ExpBx,ExpBy, ExpEx,ExpEy); + end; + var p: TPoint; begin PushBaseName(''); TheText := GetTheText; + TheInsert := 'X'; DoTest('NO Flag - BlockBegin', 2,1, 4,1, 2,1, -1,-1,-1,-1, [], scamAdjust); DoTest('NO Flag - BlockEnd', 2,1, 4,1, 4,1, -1,-1,-1,-1, [], scamAdjust); @@ -1596,13 +1631,24 @@ begin DoTest('setPersistentBlock - BlockEnd', 2,1, 4,1, 4,1, 2,1, 5,1, [setPersistentBlock], scamAdjust); // extended block DoTest('setPersistentBlock - Empty', 2,1, 2,1, 2,1, -1,1,-1,1, [setPersistentBlock], scamAdjust); // adjusted/moved block - DoTest('setMoveBlock - BlockBegin', 2,1, 4,1, 2,1, 3,1, 5,1, [setMoveBlock], scamAdjust); - DoTest('setMoveBlock - BlockEnd', 2,1, 4,1, 4,1, 2,1, 4,1, [setMoveBlock], scamIgnore); // so caret will not destroy selection + DoTest('setMoveBlock - BlockBegin', 2,1, 4,1, 2,1, 3,1, 5,1, [setMoveBlock], scamAdjust); + DoTest('setMoveBlock - BlockBegin 1-EOL', 1,1, 9,1, 1,1, 2,1,10,1, [setMoveBlock], scamAdjust); // start to end of line + DoTest('setMoveBlock - BlockBegin Line', 1,1, 1,2, 1,1, 2,1, 1,2, [setMoveBlock], scamAdjust); // full line with eol + DoTest('setMoveBlock - BlockBegin Line+', 1,1, 2,2, 1,1, 2,1, 2,2, [setMoveBlock], scamAdjust); // full line, and start of next + DoTest('setMoveBlock - BlockEnd', 2,1, 4,1, 4,1, 2,1, 4,1, [setMoveBlock], scamAdjust); // so caret will not destroy selection + DoTest('setMoveBlock - BlockEnd 1-EOL', 1,1, 9,1, 9,1, 1,1, 9,1, [setMoveBlock], scamAdjust); + DoTest('setMoveBlock - BlockEnd Line', 1,1, 1,2, 1,2, 1,1, 1,2, [setMoveBlock], scamAdjust); // full line with eol + DoTest('setMoveBlock - BlockEnd Line+', 1,1, 2,2, 2,2, 1,1, 2,2, [setMoveBlock], scamAdjust); // full line, and start of next DoTest('setMoveBlock - Empty', 2,1, 2,1, 2,1, -1,1,-1,1, [setMoveBlock], scamAdjust); - DoTest('setExtendBlock - BlockBegin', 2,1, 4,1, 2,1, 2,1, 5,1, [setExtendBlock], scamAdjust); - DoTest('setExtendBlock - BlockEnd', 2,1, 4,1, 4,1, 2,1, 5,1, [setExtendBlock], scamAdjust); -//TODO: should this create a selection? + DoTest('setExtendBlock - BlockBegin', 2,1, 4,1, 2,1, 2,1, 5,1, [setExtendBlock], scamAdjust); + DoTest('setExtendBlock - BlockBegin 1-EOL', 1,1, 9,1, 1,1, 1,1,10,1, [setExtendBlock], scamAdjust); // start to end of line + DoTest('setExtendBlock - BlockBegin Line', 1,1, 1,2, 1,1, 1,1, 1,2, [setExtendBlock], scamAdjust); // full line with eol + DoTest('setExtendBlock - BlockBegin Line+', 1,1, 2,2, 1,1, 1,1, 2,2, [setExtendBlock], scamAdjust); // full line, and start of next + DoTest('setExtendBlock - BlockEnd', 2,1, 4,1, 4,1, 2,1, 5,1, [setExtendBlock], scamAdjust); + DoTest('setExtendBlock - BlockEnd 1-EOL', 1,1, 9,1, 9,1, 1,1,10,1, [setExtendBlock], scamAdjust); + DoTest('setExtendBlock - BlockEnd Line', 1,1, 1,2, 1,2, 1,1, 2,2, [setExtendBlock], scamAdjust); // full line with eol + DoTest('setExtendBlock - BlockEnd Line+', 1,1, 2,2, 2,2, 1,1, 3,2, [setExtendBlock], scamAdjust); // full line, and start of next DoTest('setExtendBlock - Empty', 2,1, 2,1, 2,1, -1,1, -1,1, [setExtendBlock], scamAdjust); // Backward @@ -1617,13 +1663,93 @@ begin DoTest('setPersistentBlock - BlockBegin', 4,1, 2,1, 2,1, 5,1, 3,1, [setPersistentBlock], scamAdjust); // adjusted/moved block DoTest('setPersistentBlock - BlockEnd', 4,1, 2,1, 4,1, 5,1, 2,1, [setPersistentBlock], scamAdjust); // extended block - DoTest('setMoveBlock - BlockBegin', 4,1, 2,1, 2,1, 5,1, 3,1, [setMoveBlock], scamAdjust); - DoTest('setMoveBlock - BlockEnd', 4,1, 2,1, 4,1, 2,1, 4,1, [setMoveBlock], scamIgnore); // so caret will not destroy selection + DoTest('setMoveBlock - BlockBegin', 4,1, 2,1, 2,1, 5,1, 3,1, [setMoveBlock], scamAdjust); + DoTest('setMoveBlock - BlockBegin 1-EOL', 9,1, 1,1, 1,1, 10,1, 2,1, [setMoveBlock], scamAdjust); + DoTest('setMoveBlock - BlockBegin Line', 1,2, 1,1, 1,1, 1,2, 2,1, [setMoveBlock], scamAdjust); // full line with eol + DoTest('setMoveBlock - BlockBegin Line+', 2,2, 1,1, 1,1, 2,2, 2,1, [setMoveBlock], scamAdjust); // full line, and start of next + DoTest('setMoveBlock - BlockEnd', 4,1, 2,1, 4,1, 2,1, 4,1, [setMoveBlock], scamAdjust); // so caret will not destroy selection + DoTest('setMoveBlock - BlockEnd 1-EOL', 9,1, 1,1, 9,1, 9,1, 1,1, [setMoveBlock], scamAdjust); + DoTest('setMoveBlock - BlockEnd Line', 1,2, 1,1, 1,2, 1,2, 1,1, [setMoveBlock], scamAdjust); + DoTest('setMoveBlock - BlockEnd Line+', 2,2, 1,1, 2,2, 2,2, 1,1, [setMoveBlock], scamAdjust); - DoTest('setExtendBlock - BlockBegin', 4,1, 2,1, 2,1, 5,1, 2,1, [setExtendBlock], scamBegin); - DoTest('setExtendBlock - BlockEnd', 4,1, 2,1, 4,1, 5,1, 2,1, [setExtendBlock], scamAdjust); + DoTest('setExtendBlock - BlockBegin', 4,1, 2,1, 2,1, 5,1, 2,1, [setExtendBlock], scamAdjust); + DoTest('setExtendBlock - BlockBegin 1-EOL', 9,1, 1,1, 1,1, 10,1, 1,1, [setExtendBlock], scamAdjust); // start to end of line + DoTest('setExtendBlock - BlockBegin Line', 1,2, 1,1, 1,1, 1,2, 1,1, [setExtendBlock], scamAdjust); // full line with eol + DoTest('setExtendBlock - BlockBegin Line+', 2,2, 1,1, 1,1, 2,2, 1,1, [setExtendBlock], scamAdjust); // full line, and start of next + DoTest('setExtendBlock - BlockEnd', 4,1, 2,1, 4,1, 5,1, 2,1, [setExtendBlock], scamAdjust); + DoTest('setExtendBlock - BlockEnd 1-EOL', 9,1, 1,1, 9,1, 10,1, 1,1, [setExtendBlock], scamAdjust); + DoTest('setExtendBlock - BlockEnd Line', 1,2, 1,1, 1,2, 2,2, 1,1, [setExtendBlock], scamAdjust); // full line with eol + DoTest('setExtendBlock - BlockEnd Line+', 2,2, 1,1, 2,2, 3,2, 1,1, [setExtendBlock], scamAdjust); // full line, and start of next - TheText := nil; + TheInsert := LineEnding; // insert a new line + PopPushBaseName('CR'); + DoTest('setMoveBlock - BlockBegin', 2,1, 4,1, 2,1, 1,2, 3,2, [setMoveBlock], scamAdjust); + DoTest('setMoveBlock - BlockBegin 1-EOL', 1,1, 9,1, 1,1, 1,2, 9,2, [setMoveBlock], scamAdjust); // start to end of line + DoTest('setMoveBlock - BlockBegin Line', 1,1, 1,2, 1,1, 1,2, 1,3, [setMoveBlock], scamAdjust); // full line with eol + DoTest('setMoveBlock - BlockBegin Line+', 1,1, 2,2, 1,1, 1,2, 2,3, [setMoveBlock], scamAdjust); // full line, and start of next + DoTest('setMoveBlock - BlockEnd', 2,1, 4,1, 4,1, 2,1, 4,1, [setMoveBlock], scamAdjust); // so caret will not destroy selection + DoTest('setMoveBlock - BlockEnd 1-EOL', 1,1, 9,1, 9,1, 1,1, 9,1, [setMoveBlock], scamAdjust); + DoTest('setMoveBlock - BlockEnd Line', 1,1, 1,2, 1,2, 1,1, 1,2, [setMoveBlock], scamAdjust); // full line with eol + DoTest('setMoveBlock - BlockEnd Line+', 1,1, 2,2, 2,2, 1,1, 2,2, [setMoveBlock], scamAdjust); // full line, and start of next + DoTest('setMoveBlock - Empty', 2,1, 2,1, 2,1, -1,1,-1,1, [setMoveBlock], scamAdjust); + + DoTest('setExtendBlock - BlockBegin', 2,1, 4,1, 2,1, 2,1, 3,2, [setExtendBlock], scamAdjust); + DoTest('setExtendBlock - BlockBegin 1-EOL', 1,1, 9,1, 1,1, 1,1, 9,2, [setExtendBlock], scamAdjust); // start to end of line + DoTest('setExtendBlock - BlockBegin Line', 1,1, 1,2, 1,1, 1,1, 1,3, [setExtendBlock], scamAdjust); // full line with eol + DoTest('setExtendBlock - BlockBegin Line+', 1,1, 2,2, 1,1, 1,1, 2,3, [setExtendBlock], scamAdjust); // full line, and start of next + DoTest('setExtendBlock - BlockEnd', 2,1, 4,1, 4,1, 2,1, 1,2, [setExtendBlock], scamAdjust); + DoTest('setExtendBlock - BlockEnd 1-EOL', 1,1, 9,1, 9,1, 1,1, 1,2, [setExtendBlock], scamAdjust); + DoTest('setExtendBlock - BlockEnd Line', 1,1, 1,2, 1,2, 1,1, 1,3, [setExtendBlock], scamAdjust); // full line with eol + DoTest('setExtendBlock - BlockEnd Line+', 1,1, 2,2, 2,2, 1,1, 1,3, [setExtendBlock], scamAdjust); // full line, and start of next + DoTest('setExtendBlock - Empty', 2,1, 2,1, 2,1, -1,1, -1,1, [setExtendBlock], scamAdjust); + + // Backward // new line + PopPushBaseName('CR Backward'); + DoTest('setMoveBlock - BlockBegin', 4,1, 2,1, 2,1, 3,2, 1,2, [setMoveBlock], scamAdjust); + DoTest('setMoveBlock - BlockBegin 1-EOL', 9,1, 1,1, 1,1, 9,2, 1,2, [setMoveBlock], scamAdjust); + DoTest('setMoveBlock - BlockBegin Line', 1,2, 1,1, 1,1, 1,3, 1,2, [setMoveBlock], scamAdjust); // full line with eol + DoTest('setMoveBlock - BlockBegin Line+', 2,2, 1,1, 1,1, 2,3, 1,2, [setMoveBlock], scamAdjust); // full line, and start of next + DoTest('setMoveBlock - BlockEnd', 4,1, 2,1, 4,1, 4,1, 2,1, [setMoveBlock], scamAdjust); // so caret will not destroy selection + DoTest('setMoveBlock - BlockEnd 1-EOL', 9,1, 1,1, 9,1, 9,1, 1,1, [setMoveBlock], scamAdjust); + DoTest('setMoveBlock - BlockEnd Line', 1,2, 1,1, 1,2, 1,2, 1,1, [setMoveBlock], scamAdjust); + DoTest('setMoveBlock - BlockEnd Line+', 2,2, 1,1, 2,2, 2,2, 1,1, [setMoveBlock], scamAdjust); + + DoTest('setExtendBlock - BlockBegin', 4,1, 2,1, 2,1, 3,2, 2,1, [setExtendBlock], scamAdjust); + DoTest('setExtendBlock - BlockBegin 1-EOL', 9,1, 1,1, 1,1, 9,2, 1,1, [setExtendBlock], scamAdjust); // start to end of line + DoTest('setExtendBlock - BlockBegin Line', 1,2, 1,1, 1,1, 1,3, 1,1, [setExtendBlock], scamAdjust); // full line with eol + DoTest('setExtendBlock - BlockBegin Line+', 2,2, 1,1, 1,1, 2,3, 1,1, [setExtendBlock], scamAdjust); // full line, and start of next + DoTest('setExtendBlock - BlockEnd', 4,1, 2,1, 4,1, 1,2, 2,1, [setExtendBlock], scamAdjust); + DoTest('setExtendBlock - BlockEnd 1-EOL', 9,1, 1,1, 9,1, 1,2, 1,1, [setExtendBlock], scamAdjust); + DoTest('setExtendBlock - BlockEnd Line', 1,2, 1,1, 1,2, 1,3, 1,1, [setExtendBlock], scamAdjust); // full line with eol + DoTest('setExtendBlock - BlockEnd Line+', 2,2, 1,1, 2,2, 1,3, 1,1, [setExtendBlock], scamAdjust); // full line, and start of next + + TheInsert := LineEnding+'X'; // insert a new line + 'X' + PopPushBaseName('CR X'); + DoTest('setMoveBlock - BlockBegin Line', 1,1, 1,2, 1,1, 2,2, 1,3, [setMoveBlock], scamAdjust); // full line with eol + DoTest('setMoveBlock - BlockEnd Line', 1,1, 1,2, 1,2, 1,1, 1,2, [setMoveBlock], scamAdjust); // full line with eol + DoTest('setExtendBlock - BlockBegin Line', 1,1, 1,2, 1,1, 1,1, 1,3, [setExtendBlock], scamAdjust); // full line with eol + DoTest('setExtendBlock - BlockEnd Line', 1,1, 1,2, 1,2, 1,1, 2,3, [setExtendBlock], scamAdjust); // full line with eol + PopPushBaseName('CR X Backward'); + DoTest('setMoveBlock - BlockBegin Line', 1,2, 1,1, 1,1, 1,3, 2,2, [setMoveBlock], scamAdjust); // full line with eol + DoTest('setMoveBlock - BlockEnd Line', 1,2, 1,1, 1,2, 1,2, 1,1, [setMoveBlock], scamAdjust); + DoTest('setExtendBlock - BlockBegin Line', 1,2, 1,1, 1,1, 1,3, 1,1, [setExtendBlock], scamAdjust); // full line with eol + DoTest('setExtendBlock - BlockEnd Line', 1,2, 1,1, 1,2, 2,3, 1,1, [setExtendBlock], scamAdjust); // full line with eol + + TheInsert := ''; // delete + PopPushBaseName('delete'); + DoTest('setMoveBlock - BlockBegin A', 2,1, 6,1, 2,1, 3,1, 2,1, 5,1, [setMoveBlock], scamAdjust); + DoTest('setMoveBlock - BlockBegin B', 2,1, 6,1, 1,1, 2,1, 1,1, 5,1, [setMoveBlock], scamAdjust); + DoTest('setMoveBlock - BlockEnd A', 2,1, 6,1, 5,1, 6,1, 2,1, 5,1, [setMoveBlock], scamAdjust); // so caret will not destroy selection + DoTest('setMoveBlock - BlockEnd B', 2,1, 6,1, 6,1, 7,1, 2,1, 6,1, [setMoveBlock], scamAdjust); // so caret will not destroy selection + + DoTest('setExtendBlock - BlockBegin A', 2,1, 6,1, 2,1, 3,1, 2,1, 5,1, [setExtendBlock], scamAdjust); + DoTest('setExtendBlock - BlockBegin B', 2,1, 6,1, 1,1, 2,1, 1,1, 5,1, [setExtendBlock], scamAdjust); + DoTest('setExtendBlock - BlockEnd A', 2,1, 6,1, 5,1, 6,1, 2,1, 5,1, [setExtendBlock], scamAdjust); // so caret will not destroy selection + DoTest('setExtendBlock - BlockEnd B', 2,1, 6,1, 6,1, 7,1, 2,1, 6,1, [setExtendBlock], scamAdjust); // so caret will not destroy selection + + + TheText := nil; // empty text + TheInsert := 'X'; PopPushBaseName('syn clear'); DoTest('setMoveBlock - Empty', 1,1, 1,1, 1,1, -1,1,-1,1, [setMoveBlock], scamAdjust);