2010-03-17 Zoltan Varga <vargaz@gmail.com>
[mono.git] / mcs / nunit24 / NUnitCore / core / ThreadedTestRunner.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 namespace NUnit.Core\r
7 {\r
8         using System;\r
9         using System.Threading;\r
10         using System.Collections.Specialized;\r
11 \r
12         /// <summary>\r
13         /// ThreadedTestRunner overrides the Run and BeginRun methods \r
14         /// so that they are always run on a separate thread. The actual\r
15         /// </summary>\r
16         public class ThreadedTestRunner : ProxyTestRunner\r
17         {\r
18                 #region Instance Variables\r
19                 private TestRunnerThread testRunnerThread;\r
20                 #endregion\r
21 \r
22                 #region Constructors\r
23                 public ThreadedTestRunner( TestRunner testRunner ) : base ( testRunner ) { }\r
24                 #endregion\r
25 \r
26                 #region Overrides\r
27                 public override TestResult Run( EventListener listener )\r
28                 {\r
29                         BeginRun( listener );\r
30                         return EndRun();\r
31                 }\r
32 \r
33                 public override TestResult Run( EventListener listener, ITestFilter filter )\r
34                 {\r
35                         BeginRun( listener, filter );\r
36                         return EndRun();\r
37                 }\r
38 \r
39                 public override void BeginRun( EventListener listener )\r
40                 {\r
41                         testRunnerThread = new TestRunnerThread( this.TestRunner );\r
42 \r
43                         testRunnerThread.StartRun( listener );\r
44                 }\r
45 \r
46                 public override void BeginRun( EventListener listener, ITestFilter filter )\r
47                 {\r
48                         testRunnerThread = new TestRunnerThread( this.TestRunner );\r
49 \r
50                         testRunnerThread.StartRun( listener, filter );\r
51                 }\r
52 \r
53                 public override TestResult EndRun()\r
54                 {\r
55                         this.Wait();\r
56                         return this.TestRunner.TestResult;\r
57                 }\r
58 \r
59 \r
60                 public override void Wait()\r
61                 {\r
62                         if ( testRunnerThread != null )\r
63                                 testRunnerThread.Wait();\r
64                 }\r
65 \r
66                 public override void CancelRun()\r
67                 {\r
68                         if ( testRunnerThread != null )\r
69                                 testRunnerThread.Cancel();\r
70                 }\r
71 \r
72                 #endregion\r
73         }\r
74 }\r