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

Email服务器

开发平台:

Delphi

  1. { (Opus) Last modified: 01.12.2000 10:22:16 by peo }
  2. { $Id: EmbeddableGUITestRunner.pas,v 1.2 2000/12/01 20:48:21 juanco Exp $ }
  3. {: DUnit: An XTreme testing framework for Delphi programs.
  4.    @author  The DUnit Group.
  5.    @version $Revision: 1.2 $
  6. }
  7. (*
  8.  * The contents of this file are subject to the Mozilla Public
  9.  * License Version 1.1 (the "License"); you may not use this file
  10.  * except in compliance with the License. You may obtain a copy of
  11.  * the License at http://www.mozilla.org/MPL/
  12.  *
  13.  * Software distributed under the License is distributed on an "AS
  14.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  15.  * implied. See the License for the specific language governing
  16.  * rights and limitations under the License.
  17.  *
  18.  * The Original Code is DUnit.
  19.  *
  20.  * The Initial Developers of the Original Code are Kent Beck, Erich Gamma,
  21.  * and Juancarlo Anez.
  22.  * Portions created The Initial Developers are Copyright (C) 1999-2000.
  23.  * Portions created by The DUnit Group are Copyright (C) 2000.
  24.  * All rights reserved.
  25.  *
  26.  * Contributor(s):
  27.  * Kent Beck <kentbeck@csi.com>
  28.  * Erich Gamma <Erich_Gamma@oti.com>
  29.  * Juanco Anez <juanco@users.sourceforge.net>
  30.  * Chris Morris <chrismo@users.sourceforge.net>
  31.  * Jeff Moore <JeffMoore@users.sourceforge.net>
  32.  * Kenneth Semeijn <dunit@designtime.demon.nl>
  33.  * The DUnit group at SourceForge <http://dunit.sourceforge.net>
  34.  *
  35.  *)
  36. unit EmbeddableGUITestRunner;
  37. interface
  38. uses
  39.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  40.   Menus, ActnList, ImgList, StdCtrls, ComCtrls, ExtCtrls, Buttons,
  41.   GUITestRunner;
  42. type
  43.   {: Embeddable GUI test runner form. Sample usage:
  44.      <pre>
  45.     procedure TFormMain.FormCreate(Sender: TObject);
  46.     begin
  47.       inherited;
  48.       FTestDialog:= TEmbeddableDUnitDialog.CreateInto( Self, TabTest );
  49.       FTestDialog.Suite:= RegisteredTests;
  50.     end;
  51.     procedure TFormMain.FormDestroy(Sender: TObject);
  52.     begin
  53.       if Assigned( FTestDialog ) then begin
  54.         FTestDialog.RemoveFrom( Self, TabTest );
  55.         FreeAndNil( FTestDialog );
  56.       end;
  57.       inherited;
  58.     end;
  59.      </pre>
  60.   }
  61.   TEmbeddableDUnitDialog = class(TGUITestRunner)
  62.     pmHosted: TPopupMenu;
  63.     pmiHostSave: TMenuItem;
  64.     pmiHostRestore: TMenuItem;
  65.     N3: TMenuItem;
  66.     pmiHostAutoSave: TMenuItem;
  67.     pmiHostAutoFocus: TMenuItem;
  68.     pmiHostHideOnOpen: TMenuItem;
  69.     N4: TMenuItem;
  70.     pmiHostErrorBox: TMenuItem;
  71.     pmiHostBreak: TMenuItem;
  72.     cbBreakOnFailures: TCheckBox;
  73.   private
  74.     FHostForm: TForm;
  75.   protected
  76.     procedure ReParent(hostControl: TWinControl; preserveItems: boolean = True);
  77.     procedure OnCloseHostForm(Sender: TObject);
  78.   public
  79.     {: Creates a DUnit GUI test runner into the supplied <code>hostControl</code>
  80.        which must be contained in the form <code>hostForm</code>. The original
  81.        GUI test runner main menu is replaced by a popup menu active anywhere
  82.        in the embedded test runner except for the tests tree.
  83.     }
  84.     class function CreateInto(hostForm: TForm; hostControl: TWinControl): TEmbeddableDUnitDialog;
  85.     {: Integrates the DUnit GUI test runner into the supplied <code>hostControl</code>
  86.        which must be contained in the form <code>hostForm</code>.
  87.     }
  88.     procedure IntegrateInto(hostForm: TForm; hostControl: TWinControl);
  89.     {: Removes the DUnit GUI test runner from the <code>hostControl</code>
  90.        again. This <em>must</em> be done prior to destroying
  91.        <code>hostForm</code>. I suggest you you place the call to this method
  92.        in the host form's <code>OnDestroy</code> event.
  93.     }
  94.     procedure RemoveFrom(hostForm: TForm; hostControl: TWinControl);
  95.   end {TDUnitDialogExt};
  96.  
  97. {==============================================================================}
  98. implementation
  99. {$R *.DFM}
  100. class function TEmbeddableDUnitDialog.CreateInto(hostForm: TForm; hostControl: TWinControl): TEmbeddableDUnitDialog;
  101. begin
  102.   assert(Assigned(hostForm));
  103.   assert(Assigned(hostControl));
  104.   result:= TEmbeddableDUnitDialog.Create(hostForm);
  105.   result.IntegrateInto(hostForm, hostControl);
  106. end;
  107. procedure TEmbeddableDUnitDialog.IntegrateInto( hostForm: TForm; hostControl: TWinControl );
  108. begin
  109.   FHostForm:= hostForm;
  110.   ReParent(hostControl);
  111.   CloseButton.OnClick := OnCloseHostForm;
  112. end;
  113. procedure TEmbeddableDUnitDialog.RemoveFrom(hostForm: TForm; hostControl: TWinControl);
  114. begin
  115.   ReParent(Self, False);
  116. end;
  117. procedure TEmbeddableDUnitDialog.ReParent(hostControl: TWinControl; preserveItems: boolean = True);
  118. var
  119.   subItemText: string;
  120. begin
  121.   assert(Assigned(hostControl));
  122.   if preserveItems then
  123.   begin
  124.     { item and subitems get lost when the list view is re-parented; Delphi bug! }
  125.     subItemText := ResultsView.Items[0].SubItems.Text;
  126.   end;
  127.   BottomPanel.Parent := hostControl;
  128.   BodyPanel.Parent := hostControl;
  129.   if preserveItems then
  130.   begin
  131.     with ResultsView.Items.Add do
  132.     begin
  133.       SubItems.Text := subItemText;
  134.     end;
  135.   end;
  136. end;
  137. procedure TEmbeddableDUnitDialog.OnCloseHostForm(Sender: TObject);
  138. begin
  139.   assert(Assigned(FHostForm));
  140.   if FTestResult <> nil then
  141.      FTestResult.stop;
  142.   FHostForm.Close;
  143. end;
  144. end.