lazarus/components/synedit/test/testhighlighterlfm.pas
martin 77f02e3f39 SynEdit: test, clean up
git-svn-id: trunk@39804 -
2013-01-08 10:05:46 +00:00

136 lines
4.0 KiB
ObjectPascal

unit TestHighlighterLfm;
{$mode objfpc}{$H+}
interface
uses
SysUtils, testregistry, TestBase, TestHighlightFoldBase, SynHighlighterLFM, SynEditHighlighterFoldBase;
type
{ TTestBaseHighlighterLem }
TTestBaseHighlighterLem = class(TTestBaseHighlighterFoldBase)
protected
function LfmHighLighter: TSynLFMSyn;
function CreateTheHighLighter: TSynCustomFoldHighlighter; override;
procedure EnableFolds(AEnbledTypes: TLfmCodeFoldBlockTypes;
AHideTypes: TLfmCodeFoldBlockTypes = [];
ANoFoldTypes: TLfmCodeFoldBlockTypes = []
);
//procedure DebugFoldInfo(ALineIdx: Integer; AFilter: TSynFoldActions; Group: Integer=0);
//procedure DebugFoldInfo(AFilter: TSynFoldActions; Group: Integer=0);
//function FoldActionsToString(AFoldActions: TSynFoldActions): String;
end;
{ TTestHighlighterLfm }
TTestHighlighterLfm = class(TTestBaseHighlighterLem)
protected
function TestTextFoldInfo1: TStringArray;
procedure CheckTokensForLine(Name: String; LineIdx: Integer; ExpTokens: Array of TtkTokenKind);
published
procedure TestFoldInfo;
end;
implementation
{ TTestBaseHighlighterLem }
function TTestBaseHighlighterLem.LfmHighLighter: TSynLFMSyn;
begin
Result := TSynLFMSyn(FTheHighLighter);
end;
function TTestBaseHighlighterLem.CreateTheHighLighter: TSynCustomFoldHighlighter;
begin
Result := TSynLFMSyn.Create(nil);
end;
procedure TTestBaseHighlighterLem.EnableFolds(AEnbledTypes: TLfmCodeFoldBlockTypes;
AHideTypes: TLfmCodeFoldBlockTypes; ANoFoldTypes: TLfmCodeFoldBlockTypes);
var
i: TLfmCodeFoldBlockType;
begin
for i := low(TLfmCodeFoldBlockType) to high(TLfmCodeFoldBlockType) do begin
LfmHighLighter.FoldConfig[ord(i)].Enabled := i in AEnbledTypes;
if (i in ANoFoldTypes) then
LfmHighLighter.FoldConfig[ord(i)].Modes := []
else
LfmHighLighter.FoldConfig[ord(i)].Modes := [fmFold];
if i in AHideTypes then
LfmHighLighter.FoldConfig[ord(i)].Modes := LfmHighLighter.FoldConfig[ord(i)].Modes + [fmHide]
end;
end;
function TTestHighlighterLfm.TestTextFoldInfo1: TStringArray;
begin
SetLength(Result, 11);
Result[0] := 'object BreakPointGroupDlg: TBreakPointGroupDlg';
Result[1] := ' Left = 431';
Result[2] := ' Height = 225';
Result[3] := ' object ButtonPanel1: TButtonPanel';
Result[4] := ' Left = 6';
Result[5] := ' end';
Result[6] := ' object Label1: TLabel';
Result[7] := ' Left = 0';
Result[8] := ' end';
Result[9] := 'end';
Result[10] := '';
end;
procedure TTestHighlighterLfm.CheckTokensForLine(Name: String; LineIdx: Integer;
ExpTokens: array of TtkTokenKind);
var
c: Integer;
begin
LfmHighLighter.StartAtLineIndex(LineIdx);
c := 0;
while not LfmHighLighter.GetEol do begin
//DebugLn([LfmHighLighter.GetToken,' (',PasHighLighter.GetTokenID ,') at ', PasHighLighter.GetTokenPos]);
AssertEquals(Name + 'TokenId Line='+IntToStr(LineIdx)+' pos='+IntToStr(c), ord(ExpTokens[c]), ord(LfmHighLighter.GetTokenID));
LfmHighLighter.Next;
inc(c);
if c >= length(ExpTokens) then
break;
end;
AssertEquals(Name+ 'TokenId Line='+IntToStr(LineIdx)+' amount of tokens', length(ExpTokens), c );
end;
procedure TTestHighlighterLfm.TestFoldInfo;
begin
ReCreateEdit;
// DebugFoldInfo([]);
{%region}
SetLines(TestTextFoldInfo1);
EnableFolds([cfbtLfmObject..cfbtLfmNone]);
PushBaseName('Text 1 all folds');
EnableFolds([cfbtLfmObject..cfbtLfmNone], [cfbtLfmNone]);
AssertEquals('Len 0', 9, LfmHighLighter.FoldLineLength(0,0));
//AssertEquals('Len 1', 0, LfmHighLighter.FoldLineLength(1,0));
AssertEquals('Len 3', 2, LfmHighLighter.FoldLineLength(3,0));
//AssertEquals('Len 4', 0, LfmHighLighter.FoldLineLength(4,0));
//AssertEquals('Len 5', 0, LfmHighLighter.FoldLineLength(5,0));
AssertEquals('Len 6', 2, LfmHighLighter.FoldLineLength(6,0));
CheckFoldOpenCounts('', [1, 0, 0, 1, 0, 0, 1, 0, 0, 0]);
{%endregion}
end;
initialization
RegisterTest(TTestHighlighterLfm);
end.