unit tests_fptemplate; {$mode objfpc}{$H+} interface uses Classes, SysUtils, fpcunit, testutils, testregistry; type { TTestTemplateParser } TTestTemplateParser= class(TTestCase) private Procedure TestAllowTagParamsBasics_replacetag(Sender : TObject; Const TagString : String; TagParams:TStringList; Out ReplaceText : String); Procedure TestAllowTagParamsFunctionLike_replacetag(Sender : TObject; Const TagString : String; TagParams:TStringList; Out ReplaceText : String); Procedure TestAllowTagParamsDelphiStyle_replacetag(Sender : TObject; Const TagString : String; TagParams:TStringList; Out ReplaceText : String); published procedure TestBasics; procedure TestBasicDelimiters; procedure TestAllowTagParamsBasics; procedure TestAllowTagParamsFunctionLike; procedure TestAllowTagParamsDelphiStyle; end; implementation uses fpTemplate; procedure TTestTemplateParser.TestBasics; var templ: TTemplateParser; begin templ := TTemplateParser.Create; try templ.Values['dream'] := 'think'; templ.Values['test'] := 'template'; CheckEquals('This is the simplest template I could think of.', templ.ParseString('This is the simplest {test} I could {dream} of.')); templ.recursive := true; templ.Values['val2'] := 'template'; templ.Values['test'] := '{val2} test'; CheckEquals('This is the simplest template test I could think of.', templ.ParseString('This is the simplest {test} I could {dream} of.')); finally templ.free; end; end; procedure TTestTemplateParser.TestBasicDelimiters; var templ: TTemplateParser; begin templ := TTemplateParser.Create; try templ.StartDelimiter:='[-'; templ.EndDelimiter:=')'; templ.Values['dream'] := 'think'; templ.Values['test'] := 'template'; CheckEquals('This is [the] simplest template I could think (of).', templ.ParseString('This is [the] simplest [-test) I could [-dream) (of).')); templ.StartDelimiter:='('; templ.EndDelimiter:='-)'; templ.Values['dream'] := 'think'; templ.Values['test'] := 'template'; CheckEquals('This is [the] simplest template I could think of:-).', templ.ParseString('This is [the] simplest (test-) I could (dream-) of:-).')); finally templ.free; end; end; procedure TTestTemplateParser.TestAllowTagParamsBasics; var templ: TTemplateParser; begin templ := TTemplateParser.Create; try templ.AllowTagParams := true; templ.OnReplaceTag := @TestAllowTagParamsBasics_replacetag; CheckEquals('This is the simplest template I could think of.', templ.ParseString('This is the simplest {test [- param1=test -]} I could {dream} of.')); CheckEquals('This is the simplest template I could think of.', templ.ParseString('This is the simplest {test[- param1=test -]} I could {dream} of.')); templ.ParamValueSeparator:=':'; CheckEquals('This is the simplest template I could think of.', templ.ParseString('This is the simplest {test [- param1:test -]} I could {dream} of.')); CheckEquals('This is the simplest template I could think of.', templ.ParseString('This is the simplest {test [-param1:test -]} I could {dream} of.')); CheckEquals('This is the simplest template I could think of.', templ.ParseString('This is the simplest {test [-param1:test -]} I could {dream} of.')); finally templ.free; end; end; procedure TTestTemplateParser.TestAllowTagParamsFunctionLike; var templ: TTemplateParser; begin templ := TTemplateParser.Create; try templ.AllowTagParams := true; templ.ParamStartDelimiter:='('; templ.ParamEndDelimiter:=')'; templ.OnReplaceTag := @TestAllowTagParamsFunctionLike_replacetag; CheckEquals('THIS should be uppercased.', templ.ParseString('{uppercase(This)} should be uppercased.')); finally templ.free; end; end; procedure TTestTemplateParser.TestAllowTagParamsDelphiStyle; var templ: TTemplateParser; begin templ := TTemplateParser.Create; try templ.AllowTagParams := true; templ.StartDelimiter:='<#'; templ.EndDelimiter:='>'; templ.ParamStartDelimiter:=' '; templ.ParamEndDelimiter:='"'; templ.ParamValueSeparator:='="'; templ.OnReplaceTag := @TestAllowTagParamsDelphiStyle_replacetag; CheckEquals('Test for a Delphi parameter.', templ.ParseString('Test for a <#DelphiTag param1="first param" param2="second param">.')); finally templ.free; end; end; procedure TTestTemplateParser.TestAllowTagParamsBasics_replacetag( Sender: TObject; const TagString: String; TagParams: TStringList; out ReplaceText: String); begin if TagString='test' then begin CheckEquals(1,TagParams.Count); CheckEquals('param1',TagParams.Names[0]); CheckEquals('test ',TagParams.ValueFromIndex[0]); ReplaceText := 'template' end else if TagString='dream' then ReplaceText := 'think'; end; procedure TTestTemplateParser.TestAllowTagParamsFunctionLike_replacetag( Sender: TObject; const TagString: String; TagParams: TStringList; out ReplaceText: String); begin if TagString='uppercase' then begin CheckEquals(1,TagParams.Count); ReplaceText:=UpperCase(TagParams[0]); end; end; procedure TTestTemplateParser.TestAllowTagParamsDelphiStyle_replacetag( Sender: TObject; const TagString: String; TagParams: TStringList; out ReplaceText: String); begin CheckEquals(2,TagParams.Count); CheckEquals('param1',TagParams.Names[0]); CheckEquals('first param',TagParams.ValueFromIndex[0]); CheckEquals('param2',TagParams.Names[1]); CheckEquals('second param',TagParams.ValueFromIndex[1]); ReplaceText := 'Delphi parameter' end; initialization RegisterTest(TTestTemplateParser); end.