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

Email服务器

开发平台:

Delphi

  1. unit XPDUnitProjectWizard;
  2. {
  3.  $Source: /cvsroot/dunit/dunit/Contrib/DUnitWizard/Source/DelphiExperts/DUnitProject/XPDUnitProjectWizard.pas,v $
  4.  $Revision: 1.2 $
  5.  $Date: 2004/05/03 15:07:16 $
  6.  Last amended by $Author: pvspain $
  7.  $State: Exp $
  8.  XPDUnitProjectWizard:
  9.  Copyright (c) 2002 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.   ToolsAPI;
  29. // procedure Register;
  30. function ProjectWizard: IOTAProjectWizard;
  31. implementation
  32. uses
  33.   Windows,          // HICON, LoadIcon()
  34.   Classes,          // TStrings, TStringList
  35.   SysUtils,         // Supports()
  36.   XPDUnitCommon,
  37.   XPDUnitProject,
  38.   XPDUnitSetup,
  39.   XP_OTAUtils,      // GetCurrentProjectGroup(), TXP_OTAFile
  40.   XP_OTACreators,   // TXP_OTAProjectCreator
  41.   XP_OTAWizards;    // TXP_OTAProjectWizard
  42. // IMPORTANT: Include resources for this unit
  43. {$R *.res}
  44. const CVSID: string = '$Header: /cvsroot/dunit/dunit/Contrib/DUnitWizard/Source/DelphiExperts/DUnitProject/XPDUnitProjectWizard.pas,v 1.2 2004/05/03 15:07:16 pvspain Exp $';
  45. const DisplayName = 'DUnit Project';
  46. const AuthorName = 'Paul Spain, EPC';
  47. const WizardComment = 'Unit testing framework';
  48. resourcestring rsProjectPage = 'New';
  49. type
  50. //////////////////////////////////////////////////////////////////////////////
  51. ///     Wizard declaration
  52. //////////////////////////////////////////////////////////////////////////////
  53.   TProjectWizard = class(TXP_OTAProjectWizard)
  54.   protected
  55.     // IOTAWizard implementation
  56.     function GetName: string; override;
  57.     procedure Execute; override;
  58.     // IOTARepositoryWizard implementation
  59.     function GetAuthor: string; override;
  60.     function GetComment: string; override;
  61.     function GetPage: string; override;
  62.     function GetGlyph: TXPIconHandle; override;
  63.   end;
  64. //////////////////////////////////////////////////////////////////////////////
  65. ///     TProjectCreator declaration
  66. //////////////////////////////////////////////////////////////////////////////
  67.   TProjectCreator = class (TXP_OTAProjectCreator)
  68.   private
  69.     FParameters: IXPDUnitParameters;
  70.     FBehaviours: IXPDUnitBehaviours;
  71.   protected
  72.     function GetCreatorType: string; override;
  73.     { Create and return the Project source file }
  74.     function NewProjectSource(const ProjectName: string): IOTAFile; override;
  75.     function GetOwner: IOTAModule; override;
  76.   public
  77.     constructor Create(const Parameters: IXPDUnitParameters;
  78.       const Behaviours: IXPDUnitBehaviours);
  79.   end;
  80. //////////////////////////////////////////////////////////////////////////////
  81. ///     TProjectSource declaration
  82. //////////////////////////////////////////////////////////////////////////////
  83.   TProjectSource = class (TXP_OTAFile)
  84.   private
  85.     FSourceTemplate: string;
  86.     FParameters: IXPDUnitParameters;
  87.   protected
  88.     { Return the actual source code }
  89.     function GetSource: string; override;
  90.   public
  91.     constructor Create(const Parameters: IXPDUnitParameters); reintroduce;
  92.   end;
  93. //////////////////////////////////////////////////////////////////////////////
  94. ///     Wizard entry points
  95. //////////////////////////////////////////////////////////////////////////////
  96. {
  97. procedure Register;
  98.   begin
  99.   ToolsAPI.RegisterPackageWizard(ProjectWizard)
  100.   end;
  101. }
  102. function ProjectWizard: IOTAProjectWizard;
  103. begin
  104.   Result := TProjectWizard.Create;
  105. end;
  106. //////////////////////////////////////////////////////////////////////////////
  107. ///   Wizard implementation
  108. //////////////////////////////////////////////////////////////////////////////
  109. procedure TProjectWizard.Execute;
  110. var
  111.   Parameters: IXPDUnitParameters;
  112.   Behaviours: IXPDUnitBehaviours;
  113. begin
  114.   if XPDUnitProject.ShowXPDUnitProjectForm(Parameters) then
  115.   begin
  116.     Behaviours := XPDUnitSetup.CreateXPDUnitBehaviours;
  117.     XP_OTAUtils.CreateModule(TProjectCreator.Create(Parameters, Behaviours));
  118.   end;
  119. end;
  120. function TProjectWizard.GetAuthor: string;
  121. begin
  122.   Result := AuthorName;
  123. end;
  124. function TProjectWizard.GetComment: string;
  125. begin
  126.   Result := WizardComment;
  127. end;
  128. function TProjectWizard.GetGlyph: TXPIconHandle;
  129. begin
  130.   Result := Windows.LoadIcon(SysInit.HInstance, ProjectIconResource);
  131. end;
  132. function TProjectWizard.GetName: string;
  133. begin
  134.   Result := DisplayName;
  135. end;
  136. function TProjectWizard.GetPage: string;
  137. begin
  138.   Result := rsProjectPage;
  139. end;
  140. //////////////////////////////////////////////////////////////////////////////
  141. ///     TProjectCreator implementation
  142. //////////////////////////////////////////////////////////////////////////////
  143. constructor TProjectCreator.Create(const Parameters: IXPDUnitParameters;
  144.   const Behaviours: IXPDUnitBehaviours);
  145. begin
  146.   System.Assert((Parameters <> nil) and (Behaviours <> nil));
  147.   inherited Create(SysUtils.Format('%s%s.dpr',
  148.     [Parameters.Values[dpProjectPath], Parameters.Values[dpProjectName]]));
  149.   FParameters := Parameters;
  150.   FBehaviours := Behaviours;
  151. end;
  152. function TProjectCreator.GetOwner: IOTAModule;
  153. begin
  154.   if FBehaviours.AddProjectToGroup then
  155.     // If user chooses to add the test project to the project group then
  156.     // invoke default behaviour
  157.     Result := inherited GetOwner
  158.   else
  159.     // Close current project (group) and load new test project
  160.     Result := nil;
  161. end;
  162. function TProjectCreator.NewProjectSource(const ProjectName: string): IOTAFile;
  163. begin
  164.   Result :=  TProjectSource.Create(FParameters);
  165. end;
  166. function TProjectCreator.GetCreatorType: string;
  167. begin
  168.   // We provide all necessary information
  169.   Result := '';
  170. end;
  171. //////////////////////////////////////////////////////////////////////////////
  172. ///     TProjectSource implementation
  173. //////////////////////////////////////////////////////////////////////////////
  174. constructor TProjectSource.Create(const Parameters: IXPDUnitParameters);
  175. begin
  176.   inherited Create;
  177.   FParameters := Parameters;
  178.   FSourceTemplate := PChar( Windows.LockResource(
  179.     Windows.LoadResource( SysInit.HInstance,
  180.     Windows.FindResource( SysInit.HInstance,
  181.     ProjectTextResource, RT_RCDATA ) ) ) );
  182.   System.SetLength(FSourceTemplate, ProjectTextLength);
  183. end;
  184. function TProjectSource.GetSource: string;
  185. var
  186.   idx: TXPDUnitParameter;
  187. const
  188.   ReplaceFlags = [rfReplaceAll, rfIgnoreCase];
  189. begin
  190.   Result := FSourceTemplate;
  191.   // Iterate over all DUnit parameters, substituting values for identifiers
  192.   // in FSourceTemplate.
  193.   for idx := System.Low(TXPDUnitParameter) to System.High(TXPDUnitParameter) do
  194.     Result := SysUtils.StringReplace(Result, XPDUnitParameterPrefix
  195.       + FParameters.Identifiers(idx), FParameters.Values[idx], ReplaceFlags);
  196. end;
  197. end.