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

Email服务器

开发平台:

Delphi

  1. unit XPDUnitMacros;
  2. {
  3.  $Source: /cvsroot/dunit/dunit/Contrib/DUnitWizard/Source/DelphiExperts/DUnitProject/XPDUnitMacros.pas,v $
  4.  $Revision: 1.2 $
  5.  $Date: 2004/05/03 15:07:16 $
  6.  Last amended by $Author: pvspain $
  7.  $State: Exp $
  8.  XPDUnitMacros:
  9.  Copyright (c) 2003 by The Excellent Programming Company Pty Ltd
  10.  (Australia) (ABN 27 005 394 918). All rights reserved.
  11.  Contact Paul Spain via email: paul@xpro.com.au
  12.  This unit is free software; you can redistribute it and/or
  13.  modify it under the terms of the GNU Lesser General Public
  14.  License as published by the Free Software Foundation; either
  15.  version 2.1 of the License, or (at your option) any later version.
  16.  This unit is distributed in the hope that it will be useful,
  17.  but WITHOUT ANY WARRANTY; without even the implied warranty of
  18.  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  19.  Lesser General Public License for more details.
  20.  You should have received a copy of the GNU Lesser General Public
  21.  License along with this unit; if not, the license can be viewed at:
  22.  http://www.gnu.org/copyleft/lesser.html
  23.  or write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
  24.  Boston, MA  02111-1307  USA
  25.  }
  26. interface
  27. uses
  28.   XPTemplateParser;  // TXPTemplateMethod
  29. type
  30.   TXPDUnitMacro = (dmTestedClassName, dmTestedMethodName, dmCurrentUnit,
  31.     dmCurrentProject, dmProjectGroup, dmFilePath, dmFileName, dmFileStem,
  32.     dmFileExt, dmEnviroVar);
  33.   TPDUnitContextValueMacro = dmTestedClassName..dmTestedMethodName;
  34.   TXPDUnitValueMacro = dmTestedClassName..dmProjectGroup;
  35.   TXPDUnitMethodMacro = dmFilePath..dmEnviroVar;
  36.   IXPDUnitMacros = interface
  37.     ['{8CAB0029-DA56-4D82-92B5-560AC5AEF434}']
  38.     function Identifiers(const Macro: TXPDUnitMacro): string;
  39.     function Text(const Macro: TXPDUnitMacro): string;
  40.     function Descriptions(const Macro: TXPDUnitMacro): string;
  41.     function Methods(const Macro: TXPDUnitMethodMacro): TXPTemplateMethod;
  42.     function Values(const Macro: TXPDUnitValueMacro): string;
  43.     procedure SetContextValue(const Macro: TPDUnitContextValueMacro;
  44.       const Value: string);
  45.   end;
  46. //////////////////////////////////////////////////////////////////////////////
  47. //   Unit entry point
  48. //////////////////////////////////////////////////////////////////////////////
  49. function CreateXPDUnitMacros: IXPDUnitMacros;
  50. implementation
  51. uses
  52.   SysUtils,       // Extract...
  53.   XP_OTAUtils,    // GetCurrent...
  54.   XPDUnitCommon,  // XPDUnitMacroPrefix
  55.   Windows;        // GetEnvironmentVariable
  56. const
  57.   CVSID: string = '$Header: /cvsroot/dunit/dunit/Contrib/DUnitWizard/Source/DelphiExperts/DUnitProject/XPDUnitMacros.pas,v 1.2 2004/05/03 15:07:16 pvspain Exp $';
  58. resourcestring
  59.   sTestedClassName
  60.     = 'Name of class(es) selected for testing from selected IDE Editor file. '
  61.     + 'Only meaningful in context of CLASSNAME parameter definition';
  62.   sTestedMethodName = 'Name of tested method in tested class. '
  63.     + 'Only meaningful in context of METHODNAME parameter definition';
  64.   sCurrentUnit = 'Fully-qualified filename of selected IDE Editor file';
  65.   sCurrentProject = 'Fully-qualified filename of selected IDE Project';
  66.   sProjectGroup = 'Fully-qualified filename of IDE ProjectGroup';
  67.   sFilePath
  68.     = 'Returns path portion of argument with trailing directory delimiter. '
  69.     + 'Argument may be a nested expression or literal filespec.';
  70.   sFileName = 'Returns filename portion of argument. '
  71.     + 'Argument may be a nested expression or literal filespec.';
  72.   sFileStem = 'Returns filename without extension from argument. '
  73.     + 'Argument may be a nested expression or literal filespec.';
  74.   sFileExt = 'Returns filename extension from argument. '
  75.     + 'Argument may be a nested expression or literal filespec.';
  76.   sEnviroVar = 'Returns current value of environment variable argument. '
  77.     + 'Argument may be a literal variable or a nested expression.';
  78. const
  79.   MacroText: array [TXPDUnitMacro] of string = (
  80.     XPDUnitMacroPrefix + 'TESTEDCLASSNAME',
  81.     XPDUnitMacroPrefix + 'TESTEDMETHODNAME',
  82.     XPDUnitMacroPrefix + 'CURRENTUNIT',
  83.     XPDUnitMacroPrefix + 'CURRENTPROJECT',
  84.     XPDUnitMacroPrefix + 'PROJECTGROUP',
  85.     XPDUnitMacroPrefix + 'FILEPATH()',
  86.     XPDUnitMacroPrefix + 'FILENAME()',
  87.     XPDUnitMacroPrefix + 'FILESTEM()',
  88.     XPDUnitMacroPrefix + 'FILEEXT()',
  89.     XPDUnitMacroPrefix + 'ENVIROVAR()');
  90.   MacroIdentifiers: array [TXPDUnitMacro] of string = (
  91.     'TESTEDCLASSNAME', 'TESTEDMETHODNAME', 'CURRENTUNIT', 'CURRENTPROJECT',
  92.     'PROJECTGROUP', 'FILEPATH', 'FILENAME', 'FILESTEM', 'FILEEXT', 'ENVIROVAR');
  93.   MacroDescriptions: array [TXPDUnitMacro] of string = (
  94.     sTestedClassName, sTestedMethodName, sCurrentUnit, sCurrentProject,
  95.     sProjectGroup, sFilePath, sFileName, sFileStem, sFileExt, sEnviroVar);
  96. type
  97.   TMacros = class(TInterfacedObject, IXPDUnitMacros)
  98.     private
  99.     FTestedClassName: string;
  100.     FTestedMethodName: string;
  101.     
  102.     protected
  103.     function Identifiers(const Macro: TXPDUnitMacro): string;
  104.     function Text(const Macro: TXPDUnitMacro): string;
  105.     function Descriptions(const Macro: TXPDUnitMacro): string;
  106.     function Methods(const Macro: TXPDUnitMethodMacro): TXPTemplateMethod;
  107.     function Values(const Macro: TXPDUnitValueMacro): string;
  108.     procedure SetContextValue(const Macro: TPDUnitContextValueMacro;
  109.       const Value: string);
  110.     function  FilePath(const Input: string; out Output: string): boolean;
  111.     function  FileName(const Input: string; out Output: string): boolean;
  112.     function  FileStem(const Input: string; out Output: string): boolean;
  113.     function  FileExt(const Input: string; out Output: string): boolean;
  114.     function  EnviroVar(const Input: string; out Output: string): boolean;
  115.   end;
  116. //////////////////////////////////////////////////////////////////////////////
  117. //   Unit entry point
  118. //////////////////////////////////////////////////////////////////////////////
  119. function CreateXPDUnitMacros: IXPDUnitMacros;
  120. begin
  121.   Result := TMacros.Create;
  122. end;
  123. function TMacros.EnviroVar(const Input: string; out Output: string): boolean;
  124. var
  125.   OutputSize: integer;
  126. begin
  127.   OutputSize := 0;
  128.   SetLength(Output, OutputSize);
  129.   // Get buffer size to hold environment variable plus null terminator
  130.   OutputSize := Windows.GetEnvironmentVariable(pchar(Input), pchar(Output),
  131.     OutputSize);
  132.   if OutputSize > 0 then
  133.   begin
  134.     SetLength(Output, OutputSize - 1);
  135.     // Get environment variable
  136.     Result := Windows.GetEnvironmentVariable(pchar(Input), pchar(Output),
  137.       OutputSize) > 0;
  138.   end
  139.   else
  140.     Result := false;
  141. end;
  142. function TMacros.FileExt(const Input: string; out Output: string): boolean;
  143. begin
  144.   Output := SysUtils.ExtractFileExt(Input);
  145.   Result := true;
  146. end;
  147. function TMacros.FileName(const Input: string; out Output: string): boolean;
  148. begin
  149.   Output := SysUtils.ExtractFileName(Input);
  150.   Result := true;
  151. end;
  152. function TMacros.FilePath(const Input: string; out Output: string): boolean;
  153. begin
  154.   Output := SysUtils.ExtractFilePath(Input);
  155.   Result := true;
  156. end;
  157. function TMacros.FileStem(const Input: string; out Output: string): boolean;
  158. begin
  159.   Output := SysUtils.ChangeFileExt(SysUtils.ExtractFileName(Input), '');
  160.   Result := true;
  161. end;
  162. function TMacros.Descriptions(const Macro: TXPDUnitMacro): string;
  163. begin
  164.   Result := MacroDescriptions[Macro];
  165. end;
  166. function TMacros.Text(const Macro: TXPDUnitMacro): string;
  167. begin
  168.   Result := MacroText[Macro];
  169. end;
  170. function TMacros.Identifiers(const Macro: TXPDUnitMacro): string;
  171. begin
  172.   Result := MacroIdentifiers[Macro];
  173. end;
  174. function TMacros.Methods(const Macro: TXPDUnitMethodMacro): TXPTemplateMethod;
  175. begin
  176.   case Macro of
  177.     dmFilePath: Result := FilePath;
  178.     dmFileName: Result := FileName;
  179.     dmFileStem: Result := FileStem;
  180.     dmFileExt: Result := FileExt;
  181.     dmEnviroVar: Result := EnviroVar;
  182.   end;
  183. end;
  184. function TMacros.Values(const Macro: TXPDUnitValueMacro): string;
  185. begin
  186.   // Result is initialised to empty string - our default value and
  187.   // failure value
  188.   case Macro of
  189.     //  if context vars not set, pass through tested class name and tested
  190.     // method name unchanged
  191.     dmTestedClassName:
  192.       if FTestedClassName = '' then
  193.         Result := MacroText[dmTestedClassName]
  194.       else
  195.         Result := FTestedClassName;
  196.     dmTestedMethodName:
  197.       if FTestedMethodName = '' then
  198.         Result := MacroText[dmTestedMethodName]
  199.       else
  200.         Result := FTestedMethodName;
  201.         
  202.     dmCurrentUnit: XP_OTAUtils.GetCurrentUnitName(Result);
  203.     dmCurrentProject: XP_OTAUtils.GetCurrentProjectName(Result);
  204.     dmProjectGroup: XP_OTAUtils.GetCurrentProjectGroupName(Result);
  205.   end;
  206. end;
  207. procedure TMacros.SetContextValue(const Macro: TPDUnitContextValueMacro;
  208.   const Value: string);
  209. begin
  210.   case Macro of
  211.     dmTestedClassName: FTestedClassName := Value;
  212.     dmTestedMethodName: FTestedMethodName := Value;
  213.   end;
  214.     
  215. end;
  216. end.