XPTemplateParserTests.pas
上传用户:yjb1804
上传日期:2021-01-30
资源大小:3105k
文件大小:11k
源码类别:

Email服务器

开发平台:

Delphi

  1. unit XPTemplateParserTests;
  2. interface
  3. uses
  4.   TestFrameWork,
  5.   XPDUnitMacros,
  6.   XPTemplateParser;
  7. type
  8.   TXPTemplateParserTests = class(TTestCase)
  9.   private
  10.     FErrorIndex: integer;
  11.     FOutput: string;
  12.     FParser: IXPTemplateParser;
  13.     FMacros: IXPDUnitMacros;
  14.     FMethods: array of TXPTemplateMethodMap;
  15.     FVariables: array of TXPTemplateVariableMap;
  16.     procedure InitDataMembers;
  17.     procedure ClearDataMembers;
  18.   protected
  19.     procedure SetUp; override;
  20.     procedure TearDown; override;
  21.   public
  22.     constructor Create(MethodName: string); override;
  23.     destructor Destroy; override;
  24.   published
  25.     procedure Empty;
  26.     procedure Whitespace;
  27.     procedure CurrentUnit;
  28.     procedure CurrentProject;
  29.     procedure CurrentProjectGroup;
  30.     procedure CurrentUni;
  31.     procedure CurrentUnits;
  32.     procedure CurrentUnitUpper;
  33.     procedure CurrentUnitLower;
  34.     procedure EnvNewVar;
  35.     procedure FileNameCurrentUnitLiteral;
  36.     procedure FileNameCurrentUnitVariable;
  37.     procedure FilePathCurrentUnitLiteral;
  38.     procedure FilePathCurrentUnitVariable;
  39.     procedure FileStemCurrentUnitLiteral;
  40.     procedure FileStemCurrentUnitVariable;
  41.     procedure FileExtCurrentUnitLiteral;
  42.     procedure FileExtCurrentUnitVariable;
  43.     procedure FileExtFileNameCurrentUnitVariable;
  44.     procedure FileExtCurrentUnitVariableTextAppended;
  45.     procedure FileExtCurrentUnitVariableTextPrepended;
  46.     procedure FileNameArgumentWhitespaceBracketing;
  47.     procedure FilePathArgumentWhitespaceBracketing;
  48.     procedure NestedFunctionWhitespaceBracketing;
  49.     procedure ExtraClosingBracket;
  50.     procedure ExtraOpeningBracket;
  51.     procedure ExtraMatchingBrackets;
  52.     procedure MissingClosingBracket;
  53.   end;
  54. implementation
  55. uses
  56.   Windows;
  57. const
  58.   ACurrentUnit = 'c:MyFolderMyUnit.pas';
  59.   ACurrentProject = 'c:MyFolderMyProject.dpr';
  60.   ACurrentProjectGroup = 'c:MyFolderMyProjectGroup.bpg';
  61. { TXPTemplateParserTests }
  62. constructor TXPTemplateParserTests.Create(MethodName: string);
  63. begin
  64.   inherited;
  65.   FMacros := XPDUnitMacros.CreateXPDUnitMacros;
  66.   InitDataMembers;
  67. end;
  68. destructor TXPTemplateParserTests.Destroy;
  69. begin
  70.   ClearDataMembers;
  71.   inherited;
  72. end;
  73. procedure TXPTemplateParserTests.InitDataMembers;
  74. begin
  75.   System.SetLength(FMethods, 5);
  76.   FMethods[0].Name := FMacros.Identifiers(dmFilePath);
  77.   FMethods[0].Value := FMacros.Methods(dmFilePath);
  78.   FMethods[1].Name := FMacros.Identifiers(dmFileName);
  79.   FMethods[1].Value := FMacros.Methods(dmFileName);
  80.   FMethods[2].Name := FMacros.Identifiers(dmFileStem);
  81.   FMethods[2].Value := FMacros.Methods(dmFileStem);
  82.   FMethods[3].Name := FMacros.Identifiers(dmFileExt);
  83.   FMethods[3].Value := FMacros.Methods(dmFileExt);
  84.   FMethods[4].Name := FMacros.Identifiers(dmEnviroVar);
  85.   FMethods[4].Value := FMacros.Methods(dmEnviroVar);
  86.   System.SetLength(FVariables, 3);
  87.   FVariables[0].Name := FMacros.Identifiers(dmCurrentUnit);
  88.   FVariables[0].Value := ACurrentUnit;
  89.   FVariables[1].Name := FMacros.Identifiers(dmCurrentProject);
  90.   FVariables[1].Value := ACurrentProject;
  91.   FVariables[2].Name := FMacros.Identifiers(dmProjectGroup);
  92.   FVariables[2].Value := ACurrentProjectGroup;
  93. end;
  94. procedure TXPTemplateParserTests.ClearDataMembers;
  95. begin
  96.   FMethods := nil;
  97.   FVariables := nil;
  98. end;
  99. procedure TXPTemplateParserTests.SetUp;
  100. begin
  101.   inherited;
  102.   FErrorIndex := 0;
  103.   FOutput := '';
  104.   FParser := XPTemplateParser.CreateXPTemplateParser;
  105.   FParser.SetMethods(FMethods);
  106.   FParser.SetVariables(FVariables);
  107. end;
  108. procedure TXPTemplateParserTests.TearDown;
  109. begin
  110.   inherited;
  111.   FParser := nil;
  112. end;
  113. procedure TXPTemplateParserTests.CurrentProject;
  114. begin
  115.   Check(FParser.Parse('$CurrentProject', FOutput), 'Parse failure');
  116.   Check(not FParser.GetErrorIndex(FErrorIndex), 'GetErrorIndex failure');
  117.   CheckEquals(ACurrentProject, FOutput);
  118. end;
  119. procedure TXPTemplateParserTests.CurrentProjectGroup;
  120. begin
  121.   Check(FParser.Parse('$ProjectGroup', FOutput), 'Parse failure');
  122.   Check(not FParser.GetErrorIndex(FErrorIndex), 'GetErrorIndex failure');
  123.   CheckEquals(ACurrentProjectGroup, FOutput);
  124. end;
  125. procedure TXPTemplateParserTests.CurrentUni;
  126. begin
  127.   Check(not FParser.Parse('$CurrentUni', FOutput), 'Parse failure');
  128.   Check(FParser.GetErrorIndex(FErrorIndex), 'GetErrorIndex failure');
  129.   CheckEquals(1, FErrorIndex);
  130. end;
  131. procedure TXPTemplateParserTests.CurrentUnit;
  132. begin
  133.   Check(FParser.Parse('$CurrentUnit', FOutput), 'Parse failure');
  134.   CheckEquals(ACurrentUnit, FOutput);
  135.   Check(not FParser.GetErrorIndex(FErrorIndex), 'GetErrorIndex failure');
  136. end;
  137. procedure TXPTemplateParserTests.CurrentUnits;
  138. begin
  139.   Check(FParser.Parse('$CurrentUnits', FOutput), 'Parse failure');
  140.   Check(not FParser.GetErrorIndex(FErrorIndex), 'GetErrorIndex failure');
  141.   CheckEquals(ACurrentUnit + 's', FOutput);
  142. end;
  143. procedure TXPTemplateParserTests.EnvNewVar;
  144. begin
  145.   Windows.SetEnvironmentVariable('zxy321', 'blah');
  146.   Check(FParser.Parse('$EnviroVar(zxy321)', FOutput), 'Parse failure');
  147.   CheckEquals('blah', FOutput);
  148.   Check(not FParser.GetErrorIndex(FErrorIndex), 'GetErrorIndex failure');
  149. end;
  150. procedure TXPTemplateParserTests.FileExtCurrentUnitLiteral;
  151. begin
  152.   Check(FParser.Parse('$FileExt(c:MyFolderMyUnit.pas)', FOutput),
  153.     'Parse failure');
  154.   CheckEquals('.pas', FOutput);
  155.   Check(not FParser.GetErrorIndex(FErrorIndex), 'GetErrorIndex failure');
  156. end;
  157. procedure TXPTemplateParserTests.FileExtCurrentUnitVariable;
  158. begin
  159.   Check(FParser.Parse('$FileExt($CurrentUnit)', FOutput),
  160.     'Parse failure');
  161.   CheckEquals('.pas', FOutput);
  162.   Check(not FParser.GetErrorIndex(FErrorIndex), 'GetErrorIndex failure');
  163. end;
  164. procedure TXPTemplateParserTests.FileNameCurrentUnitLiteral;
  165. begin
  166.   Check(FParser.Parse('$FileName(c:MyFolderMyUnit.pas)', FOutput),
  167.     'Parse failure');
  168.   CheckEquals('MyUnit.pas', FOutput);
  169.   Check(not FParser.GetErrorIndex(FErrorIndex), 'GetErrorIndex failure');
  170. end;
  171. procedure TXPTemplateParserTests.FileNameCurrentUnitVariable;
  172. begin
  173.   Check(FParser.Parse('$FileName($CurrentUnit)', FOutput),
  174.     'Parse failure');
  175.   CheckEquals('MyUnit.pas', FOutput);
  176.   Check(not FParser.GetErrorIndex(FErrorIndex), 'GetErrorIndex failure');
  177. end;
  178. procedure TXPTemplateParserTests.FilePathCurrentUnitLiteral;
  179. begin
  180.   Check(FParser.Parse('$FilePath(c:MyFolderMyUnit.pas)', FOutput),
  181.     'Parse failure');
  182.   CheckEquals('c:MyFolder', FOutput);
  183.   Check(not FParser.GetErrorIndex(FErrorIndex), 'GetErrorIndex failure');
  184. end;
  185. procedure TXPTemplateParserTests.FilePathCurrentUnitVariable;
  186. begin
  187.   Check(FParser.Parse('$FilePath($CurrentUnit)', FOutput),
  188.     'Parse failure');
  189.   CheckEquals('c:MyFolder', FOutput);
  190.   Check(not FParser.GetErrorIndex(FErrorIndex), 'GetErrorIndex failure');
  191. end;
  192. procedure TXPTemplateParserTests.FileStemCurrentUnitLiteral;
  193. begin
  194.   Check(FParser.Parse('$FileStem(c:MyFolderMyUnit.pas)', FOutput),
  195.     'Parse failure');
  196.   CheckEquals('MyUnit', FOutput);
  197.   Check(not FParser.GetErrorIndex(FErrorIndex), 'GetErrorIndex failure');
  198. end;
  199. procedure TXPTemplateParserTests.FileStemCurrentUnitVariable;
  200. begin
  201.   Check(FParser.Parse('$FileStem($CurrentUnit)', FOutput),
  202.     'Parse failure');
  203.   CheckEquals('MyUnit', FOutput);
  204.   Check(not FParser.GetErrorIndex(FErrorIndex), 'GetErrorIndex failure');
  205. end;
  206. procedure TXPTemplateParserTests.CurrentUnitUpper;
  207. begin
  208.   Check(FParser.Parse('$CURRENTUNIT', FOutput), 'Parse failure');
  209.   CheckEquals(ACurrentUnit, FOutput);
  210.   Check(not FParser.GetErrorIndex(FErrorIndex), 'GetErrorIndex failure');
  211. end;
  212. procedure TXPTemplateParserTests.CurrentUnitLower;
  213. begin
  214.   Check(FParser.Parse('$currentunit', FOutput), 'Parse failure');
  215.   CheckEquals(ACurrentUnit, FOutput);
  216.   Check(not FParser.GetErrorIndex(FErrorIndex), 'GetErrorIndex failure');
  217. end;
  218. procedure TXPTemplateParserTests.FileExtFileNameCurrentUnitVariable;
  219. begin
  220.   Check(FParser.Parse('$FileExt($FileName($CurrentUnit))', FOutput),
  221.     'Parse failure');
  222.   CheckEquals('.pas', FOutput);
  223.   Check(not FParser.GetErrorIndex(FErrorIndex), 'GetErrorIndex failure');
  224. end;
  225. procedure TXPTemplateParserTests.FileExtCurrentUnitVariableTextAppended;
  226. begin
  227.   Check(FParser.Parse('$FileExt($CurrentUnit)blah', FOutput),
  228.     'Parse failure');
  229.   CheckEquals('.pasblah', FOutput);
  230.   Check(not FParser.GetErrorIndex(FErrorIndex), 'GetErrorIndex failure');
  231. end;
  232. procedure TXPTemplateParserTests.FileExtCurrentUnitVariableTextPrepended;
  233. begin
  234.   Check(FParser.Parse('blah$FileExt($CurrentUnit)', FOutput),
  235.     'Parse failure');
  236.   CheckEquals('blah.pas', FOutput);
  237.   Check(not FParser.GetErrorIndex(FErrorIndex), 'GetErrorIndex failure');
  238. end;
  239. procedure TXPTemplateParserTests.ExtraClosingBracket;
  240. begin
  241.   Check(not FParser.Parse('$FileName($CurrentUnit))', FOutput), 'Parse error');
  242.   Check(FParser.GetErrorIndex(FErrorIndex), 'GetErrorIndex() failure');
  243.   CheckEquals(24, FErrorIndex);
  244. end;
  245. procedure TXPTemplateParserTests.ExtraOpeningBracket;
  246. begin
  247.   Check(not FParser.Parse('$FileName(($CurrentUnit)', FOutput));
  248.   Check(FParser.GetErrorIndex(FErrorIndex), 'GetErrorIndex() failure');
  249.   CheckEquals(11, FErrorIndex);
  250. end;
  251. procedure TXPTemplateParserTests.ExtraMatchingBrackets;
  252. begin
  253.   Check(not FParser.Parse('$FileName(($CurrentUnit))', FOutput));
  254.   Check(FParser.GetErrorIndex(FErrorIndex), 'GetErrorIndex() failure');
  255.   CheckEquals(11, FErrorIndex);
  256. end;
  257. procedure TXPTemplateParserTests.MissingClosingBracket;
  258. begin
  259.   Check(not FParser.Parse('$FileName($CurrentUnit', FOutput), 'Parse error');
  260.   Check(FParser.GetErrorIndex(FErrorIndex), 'GetErrorIndex() failure');
  261.   CheckEquals(23, FErrorIndex);
  262. end;
  263. procedure TXPTemplateParserTests.FileNameArgumentWhitespaceBracketing;
  264. begin
  265.   Check(FParser.Parse('$FileName( $CurrentUnit )', FOutput),
  266.     'Parse failure');
  267.   CheckEquals('MyUnit.pas', FOutput);
  268.   Check(not FParser.GetErrorIndex(FErrorIndex), 'GetErrorIndex failure');
  269. end;
  270. procedure TXPTemplateParserTests.FilePathArgumentWhitespaceBracketing;
  271. begin
  272.   Check(FParser.Parse('$FilePath( $CurrentUnit )', FOutput),
  273.     'Parse failure');
  274.   CheckEquals('c:MyFolder', FOutput);
  275.   Check(not FParser.GetErrorIndex(FErrorIndex), 'GetErrorIndex failure');
  276. end;
  277. procedure TXPTemplateParserTests.Empty;
  278. begin
  279.   Check(FParser.Parse('', FOutput), 'Parse failure');
  280.   CheckEquals('', FOutput);
  281.   Check(not FParser.GetErrorIndex(FErrorIndex), 'GetErrorIndex failure');
  282. end;
  283. procedure TXPTemplateParserTests.Whitespace;
  284. begin
  285.   Check(FParser.Parse('   ', FOutput), 'Parse failure');
  286.   CheckEquals('', FOutput);
  287.   Check(not FParser.GetErrorIndex(FErrorIndex), 'GetErrorIndex failure');
  288. end;
  289. procedure TXPTemplateParserTests.NestedFunctionWhitespaceBracketing;
  290. begin
  291.   Check(FParser.Parse('$FileExt( $FileName($CurrentUnit) )', FOutput),
  292.     'Parse failure');
  293.   CheckEquals('.pas', FOutput);
  294.   Check(not FParser.GetErrorIndex(FErrorIndex), 'GetErrorIndex failure');
  295. end;
  296. initialization
  297.   TestFramework.RegisterTest('XPTemplateParserTests Suite',
  298.     TXPTemplateParserTests.Suite);
  299. end.