mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-18 12:19:21 +02:00
SynEdit: Fixed search replace with newline (Issue #0026227) / Fixed incorrect caret x after replace
git-svn-id: trunk@47504 -
This commit is contained in:
parent
69bb12286a
commit
ea99a9bc11
@ -202,7 +202,7 @@ begin
|
|||||||
+length(AReplacement);
|
+length(AReplacement);
|
||||||
end else begin
|
end else begin
|
||||||
// replace word with lines
|
// replace word with lines
|
||||||
Result.X:=Result.X-ReplaceEnd.X+GetLastLineLength(AReplacement);
|
Result.X:=1+GetLastLineLength(AReplacement)+(Result.X-ReplaceEnd.X);
|
||||||
end;
|
end;
|
||||||
end else begin
|
end else begin
|
||||||
if aLineCount=0 then begin
|
if aLineCount=0 then begin
|
||||||
@ -210,7 +210,7 @@ begin
|
|||||||
Result.X:=ReplaceStart.X+length(AReplacement)+(Result.X-ReplaceEnd.X);
|
Result.X:=ReplaceStart.X+length(AReplacement)+(Result.X-ReplaceEnd.X);
|
||||||
end else begin
|
end else begin
|
||||||
// replace lines with lines
|
// replace lines with lines
|
||||||
Result.X:=GetLastLineLength(AReplacement)+(Result.X-ReplaceEnd.X);
|
Result.X:=1+GetLastLineLength(AReplacement)+(Result.X-ReplaceEnd.X);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
@ -563,7 +563,7 @@ var
|
|||||||
dec(LineEndPos, length(LineEnding));
|
dec(LineEndPos, length(LineEnding));
|
||||||
CurLineStr:=Lines[CurY];
|
CurLineStr:=Lines[CurY];
|
||||||
if LineEndPos = 0 then begin // match empty string
|
if LineEndPos = 0 then begin // match empty string
|
||||||
FoundStartPos:=Point(length(CurLineStr),CurY+1);
|
FoundStartPos:=Point(length(CurLineStr)+1,CurY+1);
|
||||||
exit(WholeWordAtStartFits);
|
exit(WholeWordAtStartFits);
|
||||||
end;
|
end;
|
||||||
LineStartPos:=FindPrevPatternLineEnd(Pat,LineEndPos)+1;
|
LineStartPos:=FindPrevPatternLineEnd(Pat,LineEndPos)+1;
|
||||||
@ -754,7 +754,7 @@ begin
|
|||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
MinY:=Max(0,StartPos.Y-1);
|
MinY:=Max(0,StartPos.Y-1);
|
||||||
MaxY:=Min(Lines.Count-1,EndPos.Y-1);
|
MaxY:=Min(Lines.Count,EndPos.Y-1);
|
||||||
if MinY>MaxY then exit;
|
if MinY>MaxY then exit;
|
||||||
if Backwards then begin
|
if Backwards then begin
|
||||||
// backwards
|
// backwards
|
||||||
@ -862,12 +862,14 @@ begin
|
|||||||
if (SearchLen=0) and ((LineLen=0) or IsMultiLinePattern) then
|
if (SearchLen=0) and ((LineLen=0) or IsMultiLinePattern) then
|
||||||
begin
|
begin
|
||||||
// first (last if backwards) line of pattern is empty line
|
// first (last if backwards) line of pattern is empty line
|
||||||
if FBackwards then
|
if FBackwards then begin
|
||||||
FoundStartPos:=Point(LineLen,y+1)
|
|
||||||
else
|
|
||||||
FoundStartPos:=Point(1,y+1);
|
FoundStartPos:=Point(1,y+1);
|
||||||
|
x:=0; // FoundStartPos.x-1;
|
||||||
|
end else begin
|
||||||
|
FoundStartPos:=Point(LineLen+1,y+1);
|
||||||
|
x:=MaxPos; //FoundStartPos.x-1;
|
||||||
|
end;
|
||||||
FoundEndPos:=FoundStartPos;
|
FoundEndPos:=FoundStartPos;
|
||||||
x:=MaxPos;
|
|
||||||
if CheckFound then exit(true);
|
if CheckFound then exit(true);
|
||||||
end else begin
|
end else begin
|
||||||
//DebugLn(['TSynEditSearch.FindNextOne x=',x,' MaxPos=',MaxPos,' Line="',Line,'"']);
|
//DebugLn(['TSynEditSearch.FindNextOne x=',x,' MaxPos=',MaxPos,' Line="',Line,'"']);
|
||||||
|
@ -106,6 +106,7 @@ type
|
|||||||
procedure TestIsCaretPhys(Name: String; X, Y: Integer);
|
procedure TestIsCaretPhys(Name: String; X, Y: Integer);
|
||||||
procedure TestIsCaretAndSel(Name: String; LogX1, LogY1, LogX2, LogY2: Integer); // logical caret
|
procedure TestIsCaretAndSel(Name: String; LogX1, LogY1, LogX2, LogY2: Integer); // logical caret
|
||||||
procedure TestIsCaretAndSelBackward(Name: String; LogX1, LogY1, LogX2, LogY2: Integer); // logical caret
|
procedure TestIsCaretAndSelBackward(Name: String; LogX1, LogY1, LogX2, LogY2: Integer); // logical caret
|
||||||
|
procedure TestIsSelection(Name: String; LogX1, LogY1, LogX2, LogY2: Integer);
|
||||||
|
|
||||||
procedure TestCompareString(Name, Expect, Value: String; DbgInfo: String = '');
|
procedure TestCompareString(Name, Expect, Value: String; DbgInfo: String = '');
|
||||||
procedure TestCompareString(Name: String; Expect, Value: Array of String; DbgInfo: String = '');
|
procedure TestCompareString(Name: String; Expect, Value: Array of String; DbgInfo: String = '');
|
||||||
@ -303,6 +304,18 @@ begin
|
|||||||
Format('X/Y=(%d, %d)', [SynEdit.BlockEnd.X, SynEdit.BlockEnd.Y]));
|
Format('X/Y=(%d, %d)', [SynEdit.BlockEnd.X, SynEdit.BlockEnd.Y]));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TTestBase.TestIsSelection(Name: String; LogX1, LogY1, LogX2, LogY2: Integer);
|
||||||
|
begin
|
||||||
|
if (SynEdit.BlockBegin.X <> LogX1) or (SynEdit.BlockBegin.Y <> LogY1) then
|
||||||
|
TestFail(Name, 'IsBlockBegin(Log)',
|
||||||
|
Format('X/Y=(%d, %d)', [LogX1, LogY1]),
|
||||||
|
Format('X/Y=(%d, %d)', [SynEdit.BlockBegin.X, SynEdit.BlockBegin.Y]));
|
||||||
|
if (SynEdit.BlockEnd.X <> LogX2) or (SynEdit.BlockEnd.Y <> LogY2) then
|
||||||
|
TestFail(Name, 'IsBlockEnd(Log)',
|
||||||
|
Format('X/Y=(%d, %d)', [LogX2, LogY2]),
|
||||||
|
Format('X/Y=(%d, %d)', [SynEdit.BlockEnd.X, SynEdit.BlockEnd.Y]));
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TTestBase.TestCompareString(Name, Expect, Value: String; DbgInfo: String);
|
procedure TTestBase.TestCompareString(Name, Expect, Value: String; DbgInfo: String);
|
||||||
var
|
var
|
||||||
i, j, x, y: Integer;
|
i, j, x, y: Integer;
|
||||||
@ -366,7 +379,7 @@ begin
|
|||||||
TestIsText(Name, LinesToText(Lines));
|
TestIsText(Name, LinesToText(Lines));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TTestBase.TestIsText(Name: String; Lines: Array of String; Repl: array of const);
|
procedure TTestBase.TestIsText(Name: String; Lines: array of String; Repl: array of const);
|
||||||
begin
|
begin
|
||||||
TestIsText(Name, LinesToText(LinesReplace(Lines, Repl)));
|
TestIsText(Name, LinesToText(LinesReplace(Lines, Repl)));
|
||||||
end;
|
end;
|
||||||
@ -426,7 +439,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TTestBase.LinesReplace(Lines: Array of String; Repl: array of const): TStringArray;
|
function TTestBase.LinesReplace(Lines: array of String; Repl: array of const): TStringArray;
|
||||||
var
|
var
|
||||||
i, j, k: Integer;
|
i, j, k: Integer;
|
||||||
s: String;
|
s: String;
|
||||||
|
@ -12,7 +12,7 @@ interface
|
|||||||
uses
|
uses
|
||||||
Classes, SysUtils, testregistry, LCLProc, LCLType, Forms, TestBase, SynEdit,
|
Classes, SysUtils, testregistry, LCLProc, LCLType, Forms, TestBase, SynEdit,
|
||||||
SynEditTextTrimmer, SynEditKeyCmds, LazSynEditText, SynEditPointClasses,
|
SynEditTextTrimmer, SynEditKeyCmds, LazSynEditText, SynEditPointClasses,
|
||||||
SynEditMiscClasses;
|
SynEditMiscClasses, SynEditTypes, SynEditMiscProcs;
|
||||||
|
|
||||||
type
|
type
|
||||||
|
|
||||||
@ -36,6 +36,7 @@ type
|
|||||||
procedure TestCaretAutoMove;
|
procedure TestCaretAutoMove;
|
||||||
procedure TestCaretDeleteWord_LastWord;
|
procedure TestCaretDeleteWord_LastWord;
|
||||||
procedure TestWordBreaker;
|
procedure TestWordBreaker;
|
||||||
|
procedure TestSearchReplace;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
@ -2240,6 +2241,279 @@ begin
|
|||||||
FreeAndNil(WBrker);
|
FreeAndNil(WBrker);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TTestBasicSynEdit.TestSearchReplace;
|
||||||
|
function TestText1: TStringArray;
|
||||||
|
begin
|
||||||
|
SetLength(Result, 9);
|
||||||
|
Result[0] := 'aaaa';
|
||||||
|
Result[1] := 'xx11';
|
||||||
|
Result[2] := 'cccc';
|
||||||
|
Result[3] := '1 1 x';
|
||||||
|
Result[4] := '9';
|
||||||
|
Result[5] := '1 1 x';
|
||||||
|
Result[6] := '9';
|
||||||
|
Result[7] := '';
|
||||||
|
Result[8] := '';
|
||||||
|
end;
|
||||||
|
|
||||||
|
type
|
||||||
|
TCaretBlockCoordinates = record x,y, BBx, BBy, BEx, BEy: Integer end;
|
||||||
|
|
||||||
|
function expC(ExpCaretX, ExpCaretY, ExpBBX, ExpBBY, ExpBEX, ExpBEY : Integer): TCaretBlockCoordinates;
|
||||||
|
begin
|
||||||
|
with result do begin
|
||||||
|
x := ExpCaretX; y := ExpCaretY;
|
||||||
|
BBx := ExpBBX; BBy := ExpBBY;
|
||||||
|
BEx := ExpBEX; BEy := ExpBEY;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
function expC(ExpCaretX, ExpCaretY: Integer; ExpBBX : Integer = -1): TCaretBlockCoordinates;
|
||||||
|
begin
|
||||||
|
Result := ExpC(ExpCaretX, ExpCaretY, ExpBBX, -1, -1, -1);
|
||||||
|
end;
|
||||||
|
function expC(ExpBBX, ExpBBY, ExpBEX, ExpBEY: Integer): TCaretBlockCoordinates;
|
||||||
|
begin
|
||||||
|
with result do begin
|
||||||
|
x := -1; y := -1;
|
||||||
|
BBx := ExpBBX; BBy := ExpBBY;
|
||||||
|
BEx := ExpBEX; BEy := ExpBEY;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
function expCNo(ExpCaretX, ExpCaretY: Integer): TCaretBlockCoordinates; // no solection
|
||||||
|
begin
|
||||||
|
Result := expC(ExpCaretX, ExpCaretY, -2);
|
||||||
|
end;
|
||||||
|
function expCFw(ExpBBX, ExpBBY, ExpBEX, ExpBEY: Integer): TCaretBlockCoordinates;
|
||||||
|
begin // Forward selection
|
||||||
|
with result do begin
|
||||||
|
x := ExpBEX; y := ExpBEY;
|
||||||
|
BBx := ExpBBX; BBy := ExpBBY;
|
||||||
|
BEx := ExpBEX; BEy := ExpBEY;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
function expCBw(ExpBBX, ExpBBY, ExpBEX, ExpBEY: Integer): TCaretBlockCoordinates;
|
||||||
|
begin // Backward selection
|
||||||
|
with result do begin
|
||||||
|
x := ExpBBX; y := ExpBBY;
|
||||||
|
BBx := ExpBBX; BBy := ExpBBY;
|
||||||
|
BEx := ExpBEX; BEy := ExpBEY;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function nextSel(ExpBBX, ExpBBY, ExpBEX, ExpBEY: Integer): TCaretBlockCoordinates;
|
||||||
|
begin
|
||||||
|
Result := expC(ExpBBX, ExpBBY, ExpBEX, ExpBEY);
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
TheTestText: TStringArray;
|
||||||
|
NextTestSetSelection: TCaretBlockCoordinates;
|
||||||
|
|
||||||
|
procedure TestCoord(Name: String; ExpCoord: TCaretBlockCoordinates);
|
||||||
|
begin
|
||||||
|
if ExpCoord.x > 0 then
|
||||||
|
TestIsCaret(Name+' Caret ', ExpCoord.x, ExpCoord.y);
|
||||||
|
if ExpCoord.BBx > 0 then
|
||||||
|
TestIsSelection(Name+' Selection ', ExpCoord.BBx, ExpCoord.BBy, ExpCoord.BEx, ExpCoord.BEy);
|
||||||
|
if ExpCoord.BBx = -2 then
|
||||||
|
TestIsSelection(Name+' NO Selection ', SynEdit.LogicalCaretXY.x, SynEdit.CaretY, SynEdit.LogicalCaretXY.x, SynEdit.CaretY);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TestSearch(Name, Find, Repl: String; SrcOpts: TSynSearchOptions;
|
||||||
|
CaretX, CaretY: Integer;
|
||||||
|
ExpCnt: Integer; ExpTxt: Array of const;
|
||||||
|
ExpSearchCoord, ExpReplCoord: TCaretBlockCoordinates
|
||||||
|
);
|
||||||
|
var
|
||||||
|
got: Integer;
|
||||||
|
begin
|
||||||
|
ReCreateEdit;
|
||||||
|
SynEdit.Options := SynEdit.Options + [eoScrollPastEol];
|
||||||
|
Name := ' - ' + Name;
|
||||||
|
|
||||||
|
PushBaseName('Search');
|
||||||
|
SetLines(TheTestText);
|
||||||
|
if NextTestSetSelection.BBx > 0 then
|
||||||
|
with NextTestSetSelection do SetCaretAndSel(BBx, BBy, BEx, BEy)
|
||||||
|
else
|
||||||
|
SetCaret(CaretX, CaretY);
|
||||||
|
got := SynEdit.SearchReplace(Find, '', SrcOpts - [ssoReplace, ssoReplaceAll]);
|
||||||
|
AssertEquals(BaseTestName + Name + 'Result Count', Min(ExpCnt,1), got);
|
||||||
|
TestCoord(Name, ExpSearchCoord);
|
||||||
|
PopBaseName;
|
||||||
|
|
||||||
|
if (SrcOpts * [ssoReplace, ssoReplaceAll]) = [] then exit;
|
||||||
|
|
||||||
|
PushBaseName('Replace');
|
||||||
|
SetLines(TheTestText);
|
||||||
|
if NextTestSetSelection.BBx > 0 then
|
||||||
|
with NextTestSetSelection do SetCaretAndSel(BBx, BBy, BEx, BEy)
|
||||||
|
else
|
||||||
|
SetCaret(CaretX, CaretY);
|
||||||
|
got := SynEdit.SearchReplace(Find, Repl, SrcOpts);
|
||||||
|
AssertEquals(BaseTestName + Name + 'Result Count', ExpCnt, got);
|
||||||
|
TestIsText(Name + 'Result Text', TheTestText, ExpTxt);
|
||||||
|
TestCoord(Name, ExpReplCoord);
|
||||||
|
PopBaseName;
|
||||||
|
|
||||||
|
NextTestSetSelection := expCNo(-1,-1);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TestSearch(Name, Find, Repl: String; SrcOpts: TSynSearchOptions;
|
||||||
|
CaretX, CaretY: Integer; ExpCnt: Integer; ExpTxt: Array of const);
|
||||||
|
begin
|
||||||
|
TestSearch(Name, Find, Repl, SrcOpts, CaretX, CaretY, ExpCnt, ExpTxt, ExpC(-1,-1), ExpC(-1,-1));
|
||||||
|
end;
|
||||||
|
procedure TestSearch(Name, Find, Repl: String; Opts: TSynSearchOptions;
|
||||||
|
ExpCnt: Integer; ExpTxt: Array of const);
|
||||||
|
begin
|
||||||
|
if ssoBackwards in Opts
|
||||||
|
then TestSearch(Name, Find, Repl, Opts, 1,length(TheTestText)-1, ExpCnt, ExpTxt)
|
||||||
|
else TestSearch(Name, Find, Repl, Opts, 1,1, ExpCnt, ExpTxt);
|
||||||
|
end;
|
||||||
|
procedure TestSearch(Name, Find, Repl: String; Opts: TSynSearchOptions;
|
||||||
|
ExpCnt: Integer; ExpTxt: Array of const; ExpSearchCoord, ExpReplCoord: TCaretBlockCoordinates);
|
||||||
|
begin
|
||||||
|
if ssoBackwards in Opts
|
||||||
|
then TestSearch(Name, Find, Repl, Opts, 1,length(TheTestText)-1, ExpCnt, ExpTxt, ExpSearchCoord, ExpReplCoord)
|
||||||
|
else TestSearch(Name, Find, Repl, Opts, 1,1, ExpCnt, ExpTxt, ExpSearchCoord, ExpReplCoord);
|
||||||
|
end;
|
||||||
|
|
||||||
|
const
|
||||||
|
LE = LineEnding;
|
||||||
|
optAllAll: TSynSearchOptions = [ssoEntireScope, ssoReplace, ssoReplaceAll];
|
||||||
|
optAllAllB: TSynSearchOptions = [ssoEntireScope, ssoReplace, ssoReplaceAll, ssoBackwards];
|
||||||
|
optSelAll: TSynSearchOptions = [ssoSelectedOnly, ssoReplace, ssoReplaceAll];
|
||||||
|
optSelAllB: TSynSearchOptions = [ssoSelectedOnly, ssoReplace, ssoReplaceAll, ssoBackwards];
|
||||||
|
var f, r: String;
|
||||||
|
var txl: Integer;
|
||||||
|
begin
|
||||||
|
TheTestText := TestText1;
|
||||||
|
txl := length(TheTestText)-1;
|
||||||
|
|
||||||
|
PushBaseName('Find single line term ');
|
||||||
|
PushBaseName('no match ');
|
||||||
|
f := '11xx';
|
||||||
|
r := '2222';
|
||||||
|
TestSearch('', f, r, optAllAll, 0, [], expCNo(1,1), expCNo(1,1) );
|
||||||
|
TestSearch('backward', f, r, optAllAllB, 0, [], expCNo(1,txl), expCNo(1,txl) );
|
||||||
|
|
||||||
|
PopPushBaseName('match - full line');
|
||||||
|
f := 'xx11';
|
||||||
|
r := '2222';
|
||||||
|
TestSearch('', f, r, optAllAll, 1, [2, '2222'], expCFw(1,2, 5,2), expCFw(1,2, 5,2) );
|
||||||
|
TestSearch('backward', f, r, optAllAllB, 1, [2, '2222'], expCBw(1,2, 5,2), expCBw(1,2, 5,2) );
|
||||||
|
|
||||||
|
r := '';
|
||||||
|
TestSearch('repl-empty ', f, r, optAllAll, 1, [2, ''], expCFw(1,2, 5,2), expCNo(1,2) );
|
||||||
|
TestSearch('repl-empty backward', f, r, optAllAllB, 1, [2, ''], expCBw(1,2, 5,2), expCNo(1,2) );
|
||||||
|
|
||||||
|
r := LE;
|
||||||
|
TestSearch('repl-CR ', f, r, optAllAll, 1, [2, '', ''], expCFw(1,2, 5,2), expCFw(1,2, 1,3) );
|
||||||
|
TestSearch('repl-CR backward', f, r, optAllAllB, 1, [2, '', ''], expCBw(1,2, 5,2), expCBw(1,2, 1,3) );
|
||||||
|
|
||||||
|
PopPushBaseName('match - part line (end)');
|
||||||
|
f := 'x11';
|
||||||
|
r := '22';
|
||||||
|
TestSearch('repl-shorter ', f, r, optAllAll, 1, [2, 'x22'], expCFw(2,2, 5,2), expCFw(2,2, 4,2) );
|
||||||
|
TestSearch('repl-shorter backward', f, r, optAllAllB, 1, [2, 'x22'], expCBw(2,2, 5,2), expCBw(2,2, 4,2) );
|
||||||
|
|
||||||
|
r := '2222';
|
||||||
|
TestSearch('repl-longer ', f, r, optAllAll, 1, [2, 'x2222'], expCFw(2,2, 5,2), expCFw(2,2, 6,2) );
|
||||||
|
TestSearch('repl-longer backward', f, r, optAllAllB, 1, [2, 'x2222'], expCBw(2,2, 5,2), expCBw(2,2, 6,2) );
|
||||||
|
|
||||||
|
r := LE;
|
||||||
|
TestSearch('repl-CR ', f, r, optAllAll, 1, [2, 'x', ''], expCFw(2,2, 5,2), expCFw(2,2, 1,3) );
|
||||||
|
TestSearch('repl-CR backward', f, r, optAllAllB, 1, [2, 'x', ''], expCBw(2,2, 5,2), expCBw(2,2, 1,3) );
|
||||||
|
|
||||||
|
PopPushBaseName('match in selection');
|
||||||
|
f := '1';
|
||||||
|
r := 'N';
|
||||||
|
NextTestSetSelection := nextSel(1,4, 2,6);
|
||||||
|
TestSearch('repl-at-end ', f, r, optSelAll, 3, [4,'N N x', 6,'N 1 x'], expCFw(1,4, 2,4), expCFw(1,6, 2,6) );
|
||||||
|
NextTestSetSelection := nextSel(1,4, 2,6);
|
||||||
|
TestSearch('repl-at-end backward', f, r, optSelAllB, 3, [4,'N N x', 6,'N 1 x'], expCBw(1,6, 2,6), expCBw(1,4, 2,4) );
|
||||||
|
|
||||||
|
NextTestSetSelection := nextSel(1,4, 3,6);
|
||||||
|
TestSearch('no-repl-after-end ', f, r, optSelAll, 3, [4,'N N x', 6,'N 1 x'], expCFw(1,4, 2,4), expCFw(1,6, 2,6) );
|
||||||
|
NextTestSetSelection := nextSel(1,4, 3,6);
|
||||||
|
TestSearch('no-repl-after-end backward', f, r, optSelAllB, 3, [4,'N N x', 6,'N 1 x'], expCBw(1,6, 2,6), expCBw(1,4, 2,4) );
|
||||||
|
|
||||||
|
NextTestSetSelection := nextSel(1,4, 1,6);
|
||||||
|
TestSearch('no-repl-after-end(BOL) ', f, r, optSelAll, 2, [4,'N N x'], expCFw(1,4, 2,4), expCFw(3,4, 4,4) );
|
||||||
|
NextTestSetSelection := nextSel(1,4, 1,6);
|
||||||
|
TestSearch('no-repl-after-end(BOL) backward', f, r, optSelAllB, 2, [4,'N N x'], expCBw(3,4, 4,4), expCBw(1,4, 2,4) );
|
||||||
|
|
||||||
|
PopPushBaseName('match in selection, repl-SHORTER - to empty');
|
||||||
|
r := '';
|
||||||
|
NextTestSetSelection := nextSel(1,4, 4,6);
|
||||||
|
TestSearch('repl-at-end ', f, r, optSelAll, 4, [4,' x', 6,' x'], expCFw(1,4, 2,4), expCNo(2,6) );
|
||||||
|
NextTestSetSelection := nextSel(1,4, 4,6);
|
||||||
|
TestSearch('repl-at-end backward', f, r, optSelAllB, 4, [4,' x', 6,' x'], expCBw(3,6, 4,6), expCNo(1,4) );
|
||||||
|
|
||||||
|
NextTestSetSelection := nextSel(1,4, 3,6);
|
||||||
|
TestSearch('no-repl-after-end ', f, r, optSelAll, 3, [4,' x', 6,' 1 x'], expCFw(1,4, 2,4), expCNo(1,6) );
|
||||||
|
NextTestSetSelection := nextSel(1,4, 3,6);
|
||||||
|
TestSearch('no-repl-after-end backward', f, r, optSelAllB, 3, [4,' x', 6,' 1 x'], expCBw(1,6, 2,6), expCNo(1,4) );
|
||||||
|
|
||||||
|
PopPushBaseName('match in selection, repl-LONGER');
|
||||||
|
r := 'NN';
|
||||||
|
NextTestSetSelection := nextSel(1,4, 4,6);
|
||||||
|
TestSearch('repl-at-end ', f, r, optSelAll, 4, [4,'NN NN x', 6,'NN NN x'], expCFw(1,4, 2,4), expCFw(4,6, 6,6) );
|
||||||
|
NextTestSetSelection := nextSel(1,4, 4,6);
|
||||||
|
TestSearch('repl-at-end backward', f, r, optSelAllB, 4, [4,'NN NN x', 6,'NN NN x'], expCBw(3,6, 4,6), expCBw(1,4, 3,4) );
|
||||||
|
|
||||||
|
NextTestSetSelection := nextSel(1,4, 3,6);
|
||||||
|
TestSearch('no-repl-after-end ', f, r, optSelAll, 3, [4,'NN NN x', 6,'NN 1 x'], expCFw(1,4, 2,4), expCFw(1,6, 3,6) );
|
||||||
|
NextTestSetSelection := nextSel(1,4, 3,6);
|
||||||
|
TestSearch('no-repl-after-end backward', f, r, optSelAllB, 3, [4,'NN NN x', 6,'NN 1 x'], expCBw(1,6, 2,6), expCBw(1,4, 3,4) );
|
||||||
|
|
||||||
|
PopPushBaseName('match in selection, repl-CR');
|
||||||
|
r := LE;
|
||||||
|
NextTestSetSelection := nextSel(1,4, 4,6);
|
||||||
|
TestSearch('repl-at-end ', f, r, optSelAll, 4, [4,'',' ',' x', 8,'',' ',' x'], expCFw(1,4, 2,4), expCFw(2,9, 1,10) );
|
||||||
|
NextTestSetSelection := nextSel(1,4, 4,6);
|
||||||
|
TestSearch('repl-at-end backward', f, r, optSelAllB, 4, [4,'',' ',' x', 8,'',' ',' x'], expCBw(3,6, 4,6), expCBw(1,4, 1,5) );
|
||||||
|
|
||||||
|
NextTestSetSelection := nextSel(1,4, 3,6);
|
||||||
|
TestSearch('no-repl-after-end ', f, r, optSelAll, 3, [4,'',' ',' x', 8,'',' 1 x'], expCFw(1,4, 2,4), expCFw(1,8, 1,9) );
|
||||||
|
NextTestSetSelection := nextSel(1,4, 3,6);
|
||||||
|
TestSearch('no-repl-after-end backward', f, r, optSelAllB, 3, [4,'',' ',' x', 8,'',' 1 x'], expCBw(1,6, 2,6), expCBw(1,4, 1,5) );
|
||||||
|
|
||||||
|
PopBaseName;
|
||||||
|
|
||||||
|
|
||||||
|
PopPushBaseName('Find with trailing CR ');
|
||||||
|
PushBaseName('no match ');
|
||||||
|
f := 'xx'+LE;
|
||||||
|
r := '11'+LE;
|
||||||
|
TestSearch('', f, r, optSelAll, 0, [], expCNo(1,1), expCNo(1,1) );
|
||||||
|
TestSearch('backward', f, r, optSelAllB, 0, [], expCNo(1,txl), expCNo(1,txl) );
|
||||||
|
|
||||||
|
PopPushBaseName('match ');
|
||||||
|
f := '11'+LE;
|
||||||
|
r := 'bb'+LE;
|
||||||
|
TestSearch('', f, r, optSelAll, 1, [2, 'xxbb'], expCFw(3,2, 1,3), expCFw(3,2, 1,3) );
|
||||||
|
TestSearch('backward', f, r, optSelAllB, 1, [2, 'xxbb'], expCBw(3,2, 1,3), expCBw(3,2, 1,3) );
|
||||||
|
PopBaseName;
|
||||||
|
|
||||||
|
PopPushBaseName('Find with leading CR ');
|
||||||
|
PushBaseName('no match ');
|
||||||
|
f := LE+'11';
|
||||||
|
r := LE+'xx';
|
||||||
|
TestSearch('', f, r, optSelAll, 0, [], expCNo(1,1), expCNo(1,1) );
|
||||||
|
TestSearch('backward', f, r, optSelAllB, 0, [], expCNo(1,txl), expCNo(1,txl) );
|
||||||
|
|
||||||
|
PopPushBaseName('match ');
|
||||||
|
f := LE+'xx';
|
||||||
|
r := LE+'bb';
|
||||||
|
TestSearch('', f, r, optSelAll, 1, [2, 'bb11'], expCFw(5,1, 3,2), expCFw(5,1, 3,2) );
|
||||||
|
TestSearch('backward', f, r, optSelAllB, 1, [2, 'bb11'], expCBw(5,1, 3,2), expCBw(5,1, 3,2) );
|
||||||
|
PopBaseName;
|
||||||
|
|
||||||
|
PopBaseName;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
initialization
|
initialization
|
||||||
|
Loading…
Reference in New Issue
Block a user