mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-19 10:39:36 +02:00
SynEdit: Ifdef Markup: tests
git-svn-id: trunk@41152 -
This commit is contained in:
parent
34c01dba58
commit
f685df6785
@ -18,6 +18,7 @@ type
|
||||
TPeerExpect = record
|
||||
PeerType: TSynMarkupIfdefNodeTypeTest;
|
||||
PeerY, PeerX: Integer;
|
||||
NoAutoFree: Boolean;
|
||||
end;
|
||||
PPeerExpect = ^TPeerExpect;
|
||||
|
||||
@ -86,6 +87,7 @@ begin
|
||||
Result^.PeerType := PeerType;
|
||||
Result^.PeerY := PeerY;
|
||||
Result^.PeerX := PeerX;
|
||||
Result^.NoAutoFree := False;
|
||||
end;
|
||||
|
||||
function EpIf(PeerY, PeerX: Integer): PPeerExpect;
|
||||
@ -129,7 +131,9 @@ begin
|
||||
Result.ClosePeer := Peer2^;
|
||||
Result.ExpState := ExpState;
|
||||
Result.TestExpState := True;
|
||||
if not Peer1^.NoAutoFree then
|
||||
Dispose(Peer1);
|
||||
if not Peer2^.NoAutoFree then
|
||||
Dispose(Peer2);
|
||||
end;
|
||||
|
||||
@ -303,6 +307,11 @@ function TTestMarkupIfDef.TestTextNoIfDef: TStringArray;
|
||||
Result[Length(Result)-1] := s;
|
||||
end;
|
||||
begin
|
||||
AddLine('//' );
|
||||
AddLine('//' );
|
||||
AddLine('//' );
|
||||
AddLine('//' );
|
||||
|
||||
AddLine('//' );
|
||||
AddLine('//' );
|
||||
AddLine('//' );
|
||||
@ -963,6 +972,8 @@ end;
|
||||
procedure TTestMarkupIfDef.TestIfDefTreePeerConnect;
|
||||
var
|
||||
n: String;
|
||||
i, i2, i3, i4: Integer;
|
||||
epMaybeIf: PPeerExpect;
|
||||
begin
|
||||
FTestTree := nil;
|
||||
|
||||
@ -1143,21 +1154,6 @@ begin
|
||||
|
||||
|
||||
|
||||
n := 'Peers, TestText2: Bad nodes';
|
||||
ReCreateEditForTreeTest(TestText2);
|
||||
FTestTree.ValidateRange(1, 18, FOpenings);
|
||||
// ONe and only one of the 2 ends should have a peer
|
||||
CheckNodes(n, 2, [ ExpN( 1,11, idnIfdef, EpSkip, EpEnd(4, 1)) ]);
|
||||
CheckNodes(n, 4, [ ExpN( 1, 9, idnEndIf, EpIf(2, 1)) ]);
|
||||
CheckNodes(n, 6, [ ExpN( 1, 9, idnEndIf, EpNil) ]); // must not have a peer
|
||||
// One and only one else may be connected to if and one (but maybe the other) to endif
|
||||
CheckNodes(n,10, [ ExpN( 1,11, idnIfdef) ]); // EpElse(12, 1) // or 14
|
||||
CheckNodes(n,12, [ ExpN( 1, 8, idnElse) ]);
|
||||
CheckNodes(n,14, [ ExpN( 1, 8, idnElse) ]);
|
||||
CheckNodes(n,16, [ ExpN( 1, 9, idnEndIf, EpElse(14, 1)) ]);
|
||||
|
||||
|
||||
|
||||
|
||||
n := 'scan plain text, after closed node: step 1: node';
|
||||
ReCreateEditForTreeTest(TestText3);
|
||||
@ -1351,6 +1347,24 @@ begin
|
||||
CheckNodes(n,35, [ ExpN( 3,11, idnEndIf, EpElse(33, 3)) ]);
|
||||
CheckNodes(n,37, [ ExpN( 1, 9, idnEndIf, EpElse(30, 1)) ]);
|
||||
|
||||
{%endregion peers + edit}
|
||||
|
||||
|
||||
{%region UNMATCHED PEERS}
|
||||
|
||||
// NO EDIT
|
||||
n := 'Peers, TestText2: Bad nodes';
|
||||
ReCreateEditForTreeTest(TestText2);
|
||||
FTestTree.ValidateRange(1, 18, FOpenings);
|
||||
// ONe and only one of the 2 ends should have a peer
|
||||
CheckNodes(n, 2, [ ExpN( 1,11, idnIfdef, EpSkip, EpEnd(4, 1)) ]);
|
||||
CheckNodes(n, 4, [ ExpN( 1, 9, idnEndIf, EpIf(2, 1)) ]);
|
||||
CheckNodes(n, 6, [ ExpN( 1, 9, idnEndIf, EpNil) ]); // must not have a peer
|
||||
// One and only one else may be connected to if and one (but maybe the other) to endif
|
||||
CheckNodes(n,10, [ ExpN( 1,11, idnIfdef) ]); // EpElse(12, 1) // or 14
|
||||
CheckNodes(n,12, [ ExpN( 1, 8, idnElse) ]);
|
||||
CheckNodes(n,14, [ ExpN( 1, 8, idnElse) ]);
|
||||
CheckNodes(n,16, [ ExpN( 1, 9, idnEndIf, EpElse(14, 1)) ]);
|
||||
|
||||
|
||||
{%region Insert If/end to create invalid peering, that must be resolved }
|
||||
@ -1466,6 +1480,136 @@ begin
|
||||
{%endregion Insert If/end to create invalid peering, that must be resolved }
|
||||
|
||||
|
||||
{%region ELSE WITHOUT IFDEF and DOUBLE ELSE }
|
||||
// TODO: Else and ifdef on same line
|
||||
for i := 0 to 2 do begin
|
||||
for i2 := 0 to 7 do
|
||||
for i3 := 0 to 2 do // ifdef
|
||||
for i4 := 0 to 1 do // endif TODO
|
||||
begin
|
||||
case i of
|
||||
0: begin
|
||||
PushBaseName('Scan empty, then add else at line 3 (after scan-start-marker)');
|
||||
ReCreateEditForTreeTest(TestTextNoIfDef);
|
||||
FTestTree.ValidateRange(1, 9, FOpenings);
|
||||
end;
|
||||
1: begin
|
||||
PushBaseName('Scan empty (form 3), then add else at line 3 (AT scan-start-marker)');
|
||||
ReCreateEditForTreeTest(TestTextNoIfDef);
|
||||
FTestTree.ValidateRange(3, 9, FOpenings);
|
||||
end;
|
||||
2:begin
|
||||
PushBaseName('Add else (before first scan) at line 3');
|
||||
ReCreateEditForTreeTest(TestTextNoIfDef);
|
||||
end;
|
||||
end;
|
||||
|
||||
SynEdit.TextBetweenPoints[point(1, 3),point(1, 3)] := ' {$ELSE} //';
|
||||
FTestTree.ValidateRange(1, 9, FOpenings);
|
||||
CheckNodes(n, 3, [ ExpN(21,28, idnElse, EpNil, EpNil ) ]);
|
||||
|
||||
SynEdit.TextBetweenPoints[point(1, 3),point(28, 3)] := '';
|
||||
FTestTree.ValidateRange(1, 9, FOpenings);
|
||||
CheckNodes(n+'undone', 3, [ ]);
|
||||
|
||||
SynEdit.TextBetweenPoints[point(1, 3),point(1, 3)] := ' {$ELSE} //';
|
||||
FTestTree.ValidateRange(1, 9, FOpenings);
|
||||
CheckNodes(n+'redone', 3, [ ExpN(21,28, idnElse, EpNil, EpNil ) ]);
|
||||
|
||||
n := '['+IntToStr(i2)+']';
|
||||
|
||||
// Maybe ifdef
|
||||
epMaybeIf := EpNil;
|
||||
if i3 >= 1 then begin
|
||||
n := n + 'Insert leading IFDEF';
|
||||
SynEdit.TextBetweenPoints[point(1, 1),point(1, 1)] := '{$IFDEF a}';
|
||||
if i4 = 2 then begin
|
||||
n := n + '(scanned)';
|
||||
FTestTree.ValidateRange(1, 9, FOpenings);
|
||||
CheckNodes(n+'ifdef', 1, [ ExpN( 1,11, idnIfdef, EpNil, EpElse(3,21) ) ]);
|
||||
CheckNodes(n+'ifdef', 3, [ ExpN(21,28, idnElse, EpIf(1,1), EpNil ) ]);
|
||||
end;
|
||||
epMaybeIf := EpIf(1,1);
|
||||
end;
|
||||
epMaybeIf^.NoAutoFree := True;
|
||||
|
||||
if (i2 and 1) = 0 then begin
|
||||
// 2nd before first
|
||||
SynEdit.TextBetweenPoints[point(1, 2),point(1, 2)] := ' {$ELSE}';
|
||||
FTestTree.ValidateRange(1, 9, FOpenings);
|
||||
if i3 >= 1 then
|
||||
CheckNodes(n+'2nd else before 1st', 1, [ ExpN( 1,11, idnIfdef, EpNil, EpElse(2,2) ) ]);
|
||||
CheckNodes(n+'2nd else before 1st', 2, [ ExpN( 2, 9, idnElse, epMaybeIf, EpNil ) ]);
|
||||
CheckNodes(n+'2nd else before 1st', 3, [ ExpN(21,28, idnElse, EpNil, EpNil ) ]);
|
||||
|
||||
SynEdit.TextBetweenPoints[point(1, 2),point(9, 2)] := '';
|
||||
FTestTree.ValidateRange(1, 9, FOpenings);
|
||||
if i3 >= 1 then
|
||||
CheckNodes(n+'undone 2nd before 1st', 1, [ ExpN( 1,11, idnIfdef, EpNil, EpElse(3,21) ) ]);
|
||||
CheckNodes(n+'undone 2nd before 1st', 2, [ ]);
|
||||
CheckNodes(n+'undone 2nd before 1st', 3, [ ExpN(21,28, idnElse, epMaybeIf, EpNil ) ]);
|
||||
end;
|
||||
|
||||
if (i2 and 2) = 0 then begin
|
||||
// 2nd after first
|
||||
SynEdit.TextBetweenPoints[point(1, 4),point(1, 4)] := ' {$ELSE}';
|
||||
FTestTree.ValidateRange(1, 9, FOpenings);
|
||||
if i3 >= 1 then
|
||||
CheckNodes(n+'2nd after 1st', 1, [ ExpN( 1,11, idnIfdef, EpNil, EpElse(3,21) ) ]);
|
||||
CheckNodes(n+'2nd else after 1st', 3, [ ExpN(21,28, idnElse, epMaybeIf, EpNil ) ]);
|
||||
CheckNodes(n+'2nd else after 1st', 4, [ ExpN( 2, 9, idnElse, EpNil, EpNil ) ]);
|
||||
|
||||
SynEdit.TextBetweenPoints[point(1, 4),point(9, 4)] := '';
|
||||
FTestTree.ValidateRange(1, 9, FOpenings);
|
||||
if i3 >= 1 then
|
||||
CheckNodes(n+'undone 2nd after 1st', 1, [ ExpN( 1,11, idnIfdef, EpNil, EpElse(3,21) ) ]);
|
||||
CheckNodes(n+'undone 2nd after 1st', 3, [ ExpN(21,28, idnElse, epMaybeIf, EpNil ) ]);
|
||||
CheckNodes(n+'undone 2nd after 1st', 4, [ ]);
|
||||
end;
|
||||
|
||||
if (i2 and 3) = 0 then begin
|
||||
// 2nd before first (same line)
|
||||
SynEdit.TextBetweenPoints[point(11, 3),point(18, 3)] := '{$ELSE}';
|
||||
FTestTree.ValidateRange(1, 9, FOpenings);
|
||||
if i3 >= 1 then
|
||||
CheckNodes(n+'2nd before 1st (same line)', 1, [ ExpN( 1,11, idnIfdef, EpNil, EpElse(3,11) ) ]);
|
||||
CheckNodes(n+'2nd else before 1st (same line)', 3, [
|
||||
ExpN(11,18, idnElse, epMaybeIf, EpNil ),
|
||||
ExpN(21,28, idnElse, EpNil, EpNil )
|
||||
]);
|
||||
|
||||
SynEdit.TextBetweenPoints[point(11, 3),point(18, 3)] := ' ';
|
||||
FTestTree.ValidateRange(1, 9, FOpenings);
|
||||
if i3 >= 1 then
|
||||
CheckNodes(n+'undone 2nd before 1st (same line)', 1, [ ExpN( 1,11, idnIfdef, EpNil, EpElse(3,21) ) ]);
|
||||
CheckNodes(n+'undone 2nd before 1st (same line)', 3, [ ExpN(21,28, idnElse, epMaybeIf, EpNil ) ]);
|
||||
end;
|
||||
|
||||
// 2nd after first (same line)
|
||||
SynEdit.TextBetweenPoints[point(31, 3),point(38, 3)] := '{$ELSE}';
|
||||
FTestTree.ValidateRange(1, 9, FOpenings);
|
||||
if i3 >= 1 then
|
||||
CheckNodes(n+'2nd after 1st (same line)', 1, [ ExpN( 1,11, idnIfdef, EpNil, EpElse(3,21) ) ]);
|
||||
CheckNodes(n+'2nd else after 1st (same line)', 3, [
|
||||
ExpN(21,28, idnElse, epMaybeIf, EpNil ),
|
||||
ExpN(31,38, idnElse, EpNil, EpNil )
|
||||
]);
|
||||
|
||||
SynEdit.TextBetweenPoints[point(31, 3),point(38, 3)] := ' ';
|
||||
FTestTree.ValidateRange(1, 9, FOpenings);
|
||||
if i3 >= 1 then
|
||||
CheckNodes(n+'undone 2nd after 1st (same line)', 1, [ ExpN( 1,11, idnIfdef, EpNil, EpElse(3,21) ) ]);
|
||||
CheckNodes(n+'undone 2nd after 1st (same line)', 3, [ ExpN(21,28, idnElse, epMaybeIf, EpNil ) ]);
|
||||
|
||||
Dispose(epMaybeIf);
|
||||
end;
|
||||
PopBaseName;
|
||||
end;
|
||||
{%endregion ELSE WITHOUT IFDEF and DOUBLE ELSE }
|
||||
|
||||
|
||||
|
||||
|
||||
{%region }
|
||||
n := 'P';
|
||||
ReCreateEditForTreeTest(TestText2);
|
||||
@ -1475,10 +1619,10 @@ begin
|
||||
{%endregion }
|
||||
|
||||
|
||||
{%endregion UNMATCHED PEERS}
|
||||
|
||||
|
||||
|
||||
{%endregion peers}
|
||||
|
||||
|
||||
FTestTree.DiscardOpeningList(FOpenings);
|
||||
|
Loading…
Reference in New Issue
Block a user