SynEdit: test for fix crash in fold structure code TLazSynEditNestedFoldsList

git-svn-id: trunk@55614 -
This commit is contained in:
martin 2017-07-31 02:56:44 +00:00
parent 5e2dd67c2e
commit a5564ccfa1
3 changed files with 145 additions and 2 deletions

1
.gitattributes vendored
View File

@ -4252,6 +4252,7 @@ components/synedit/test/testmarkupifdef.pas svneol=native#text/pascal
components/synedit/test/testmarkupwordgroup.pas svneol=native#text/pascal components/synedit/test/testmarkupwordgroup.pas svneol=native#text/pascal
components/synedit/test/testmulticaret.pas svneol=native#text/plain components/synedit/test/testmulticaret.pas svneol=native#text/plain
components/synedit/test/testnavigation.pas svneol=native#text/pascal components/synedit/test/testnavigation.pas svneol=native#text/pascal
components/synedit/test/testnestedfoldslist.pas svneol=native#text/pascal
components/synedit/test/testpaintcolormerging.pas svneol=native#text/pascal components/synedit/test/testpaintcolormerging.pas svneol=native#text/pascal
components/synedit/test/testsearch.pas svneol=native#text/pascal components/synedit/test/testsearch.pas svneol=native#text/pascal
components/synedit/test/testsynbeautifier.pas svneol=native#text/pascal components/synedit/test/testsynbeautifier.pas svneol=native#text/pascal

View File

@ -8,8 +8,8 @@ uses
TestSynBeautifier, TestTrimSpace, TestSyncroEdit, TestSynTextArea, TestSynBeautifier, TestTrimSpace, TestSyncroEdit, TestSynTextArea,
TestHighlightPas, TestHighlightXml, TestHighlightMulti, TestMarkupwordGroup, TestHighlightPas, TestHighlightXml, TestHighlightMulti, TestMarkupwordGroup,
TestMarkupHighAll, TestFoldedView, TestSynSharedEdits, TestHighlighterLfm, TestMarkupHighAll, TestFoldedView, TestSynSharedEdits, TestHighlighterLfm,
TestHighlightFoldBase, TestMarkupIfDef, testPaintColorMerging, TestNestedFoldsList, TestMarkupIfDef, testPaintColorMerging,
TestMarkupFoldColoring; TestMarkupFoldColoring;
{$IFDEF WINDOWS}{ $R SynTest.rc}{$ENDIF} {$IFDEF WINDOWS}{ $R SynTest.rc}{$ENDIF}

View File

@ -0,0 +1,142 @@
unit TestNestedFoldsList;
{$mode objfpc}{$H+}
interface
uses
SysUtils, TestBase, testregistry, SynEdit, SynHighlighterPas,
SynEditHighlighterFoldBase, LazLoggerBase, TestHighlightPas;
type
{ TTestNestedFoldsList }
TTestNestedFoldsList = class(TTestBaseHighlighterPas)
private
FNestList: TLazSynEditNestedFoldsList;
protected
procedure TearDown; override;
procedure ReCreateEdit; reintroduce;
procedure ReCreateList;
function TestText1: TStringArray;
published
procedure Test1;
end;
implementation
{ TTestNestedFoldsList }
procedure TTestNestedFoldsList.TearDown;
begin
FreeAndNil(FNestList);
inherited TearDown;
end;
procedure TTestNestedFoldsList.ReCreateEdit;
begin
FreeAndNil(FNestList);
inherited ReCreateEdit;
ReCreateList;
end;
procedure TTestNestedFoldsList.ReCreateList;
begin
FreeAndNil(FNestList);
FNestList := TLazSynEditNestedFoldsList.Create(SynEdit.TextBuffer, PasHighLighter);
FNestList.ResetFilter;
FNestList.FoldGroup := 0;
FNestList.FoldFlags := [sfbIncludeDisabled];
FNestList.IncludeOpeningOnLine := True;
end;
function TTestNestedFoldsList.TestText1: TStringArray;
begin
SetLength(Result, 26);
Result[0] := 'program Foo;';
Result[1] := 'begin';
Result[2] := ' while FTheDebugger.DebugProcessRunning and not(FTheDebugger.State in [dsError, dsDestroying]) do';
Result[3] := ' begin';
Result[4] := '';
Result[5] := ' {$IFDEF DBG_ASYNC_WAIT}';
Result[6] := ' if GotPrompt > 0 then begin';
Result[7] := ' {$ENDIF}';
Result[8] := '';
Result[9] := ' if (S = ''(gdb) '') or';
Result[10] := ' ( (S = '') and FDidKillNow )';
Result[11] := ' then';
Result[12] := ' {$IFDEF DBG_ASYNC_WAIT}';
Result[13] := ' begin';
Result[14] := ' if (not FGotStopped) and (not FDidKillNow) and (GotPrompt = 0) then';
Result[15] := ' GotPrompt := 1';
Result[16] := ' else';
Result[17] := ' break;';
Result[18] := ' end;';
Result[19] := ' {$ELSE}';
Result[20] := ' Break;';
Result[21] := ' {$ENDIF}';
Result[22] := '';
Result[23] := ' end;';
Result[24] := ' end;';
Result[25] := '';
end;
procedure TTestNestedFoldsList.Test1;
var
start, start2, nth, grp, i, j: Integer;
begin
// this test currently only checks that no ASSERT is triggered
// PushBaseName('');
for start := 0 to 24 do begin
for start2 := 0 to 3 do begin
for nth := 1 to 4 do begin
for grp := 0 to 1 do begin
ReCreateEdit;
//PopPushBaseName('Text 1 -- [cfbtBeginEnd..cfbtNone], [], 0');
SetLines(TestText1);
EnableFolds([cfbtBeginEnd..cfbtNone], []);
FNestList.FoldGroup := grp;
for i := start to 25 do begin
FNestList.Line := i;
if i mod nth = 0 then
for j := start2*2 to FNestList.Count - 1 do begin
FNestList.HLNode[j];
FNestList.NodeEndLine[j]
end;
end;
ReCreateEdit;
//PopPushBaseName('Text 1 -- [cfbtBeginEnd..cfbtNone], [], 0');
SetLines(TestText1);
EnableFolds([cfbtBeginEnd..cfbtNone], []);
FNestList.FoldGroup := grp;
FNestList.FoldFlags := [];
for i := start to 25 do begin
FNestList.Line := i;
if i mod nth = 0 then
for j := start2*2 to FNestList.Count - 1 do begin
FNestList.HLNode[j];
FNestList.NodeEndLine[j]
end;
end;
end;
end;
end;
end;
end;
initialization
RegisterTest(TTestNestedFoldsList);
end.