Merge pull request #5714 from alexischr/update_bockbuild
[mono.git] / mcs / nunit24 / ClientUtilities / util / ProxyTestRunner.cs
1 // ****************************************************************\r
2 // Copyright 2007, Charlie Poole\r
3 // This is free software licensed under the NUnit license. You may\r
4 // obtain a copy of the license at http://nunit.org/?p=license&r=2.4\r
5 // ****************************************************************\r
6 \r
7 namespace NUnit.Util\r
8 {\r
9         using System;\r
10         using System.Collections;\r
11         using System.IO;\r
12         using NUnit.Core;\r
13 \r
14         /// <summary>\r
15         /// ProxyTestRunner is the abstract base for all client-side\r
16         /// TestRunner implementations that delegate to a remote\r
17         /// TestRunner. All calls are simply passed on to the\r
18         /// TestRunner that is provided to the constructor.\r
19         /// \r
20         /// This class is similar to DelegatingTestRunner in the\r
21         /// NUnit core, but is separate because of how it is used.\r
22         /// \r
23         /// Although the class is abstract, it has no abstract \r
24         /// methods specified because each implementation will\r
25         /// need to override different methods. All methods are\r
26         /// specified using interface syntax and the derived class\r
27         /// must explicitly implement TestRunner in order to \r
28         /// redefine the selected methods.\r
29         /// </summary>\r
30         public abstract class ProxyTestRunner : TestRunner\r
31         {\r
32                 #region Instance Variables\r
33 \r
34                 /// <summary>\r
35                 /// Our runner ID\r
36                 /// </summary>\r
37                 protected int runnerID;\r
38 \r
39                 /// <summary>\r
40                 /// The downstream TestRunner\r
41                 /// </summary>\r
42                 private TestRunner testRunner;\r
43 \r
44                 /// <summary>\r
45                 /// The event listener for the currently running test\r
46                 /// </summary>\r
47                 protected EventListener listener;\r
48 \r
49                 #endregion\r
50 \r
51                 #region Construction\r
52                 public ProxyTestRunner(TestRunner testRunner)\r
53                 {\r
54                         this.testRunner = testRunner;\r
55                         this.runnerID = testRunner.ID;\r
56                 }\r
57 \r
58                 /// <summary>\r
59                 /// Protected constructor for runners that create their own\r
60                 /// specialized downstream runner.\r
61                 /// </summary>\r
62                 protected ProxyTestRunner( int runnerID )\r
63                 {\r
64                         this.runnerID = runnerID;\r
65                 }\r
66                 #endregion\r
67 \r
68                 #region Properties\r
69                 public virtual int ID\r
70                 {\r
71                         get { return runnerID; }\r
72                 }\r
73 \r
74                 public virtual bool Running\r
75                 {\r
76                         get { return testRunner != null && testRunner.Running; }\r
77                 }\r
78 \r
79                 public virtual IList AssemblyInfo\r
80                 {\r
81                         get { return testRunner == null ? null : testRunner.AssemblyInfo; }\r
82                 }\r
83 \r
84                 public virtual ITest Test\r
85                 {\r
86                         get { return testRunner == null ? null : testRunner.Test; }\r
87                 }\r
88 \r
89                 public virtual TestResult TestResult\r
90                 {\r
91                         get { return testRunner == null ? null : testRunner.TestResult; }\r
92                 }\r
93 \r
94                 /// <summary>\r
95                 /// Protected property copies any settings to the downstream test runner\r
96                 /// when it is set. Derived runners overriding this should call the base\r
97                 /// or copy the settings themselves.\r
98                 /// </summary>\r
99                 protected virtual TestRunner TestRunner\r
100                 {\r
101                         get { return testRunner; }\r
102                         set { testRunner = value; }\r
103                 }\r
104                 #endregion\r
105 \r
106                 #region Load and Unload Methods\r
107                 public virtual bool Load( TestPackage package )\r
108                 {\r
109                         return this.testRunner.Load( package );\r
110                 }\r
111 \r
112                 public virtual void Unload()\r
113                 {\r
114             if ( this.testRunner != null )\r
115                             this.testRunner.Unload();\r
116                 }\r
117                 #endregion\r
118 \r
119                 #region CountTestCases\r
120                 public virtual int CountTestCases( ITestFilter filter )\r
121                 {\r
122                         return this.testRunner.CountTestCases( filter );\r
123                 }\r
124                 #endregion\r
125 \r
126                 #region Methods for Running Tests\r
127                 public virtual TestResult Run(EventListener listener)\r
128                 {\r
129                         // Save active listener for derived classes\r
130                         this.listener = listener;\r
131                         return this.testRunner.Run(listener);\r
132                 }\r
133 \r
134                 public virtual TestResult Run(EventListener listener, ITestFilter filter)\r
135                 {\r
136                         // Save active listener for derived classes\r
137                         this.listener = listener;\r
138                         return this.testRunner.Run(listener, filter);\r
139                 }\r
140 \r
141                 public virtual void BeginRun( EventListener listener )\r
142                 {\r
143                         // Save active listener for derived classes\r
144                         this.listener = listener;\r
145                         this.testRunner.BeginRun( listener );\r
146                 }\r
147 \r
148                 public virtual void BeginRun( EventListener listener, ITestFilter filter )\r
149                 {\r
150                         // Save active listener for derived classes\r
151                         this.listener = listener;\r
152                         this.testRunner.BeginRun( listener, filter );\r
153                 }\r
154 \r
155                 public virtual TestResult EndRun()\r
156                 {\r
157                         return this.testRunner.EndRun();\r
158                 }\r
159 \r
160                 public virtual void CancelRun()\r
161                 {\r
162                         this.testRunner.CancelRun();\r
163                 }\r
164 \r
165                 public virtual void Wait()\r
166                 {\r
167                         this.testRunner.Wait();\r
168                 }\r
169                 #endregion\r
170 \r
171                 #region InitializeLifetimeService Override\r
172 //              public override object InitializeLifetimeService()\r
173 //              {\r
174 //                      return null;\r
175 //              }\r
176                 #endregion\r
177 \r
178         }\r
179 }\r