public TestCaseResult (TestResult testResult)
		{
			this.testResult = testResult;
			this.hasErrors = false;
			this.hasFailures = false;
			this.hasWarnings = false;
		}
		public void WriteResult (TestResult result)
		{
			Console.WriteLine ("Tests run: {0}", result.RunCount);
			Console.WriteLine ("Tests skipped: {0}", result.SkippedCount);
			Console.WriteLine ("Tests passed: {0}", result.PassedCount);
			Console.WriteLine ("Errors: {0}", result.ErrorCount);
			Console.WriteLine ("Failures: {0}", result.FailureCount);
			Console.WriteLine ("Warnings: {0}", result.WarningCount);
		}
		public void Run (TestResult testResult)
		{
			TestCaseResult testCaseResult = CreateTestCaseResult (testResult);
			testResult.RunCase (this, testCaseResult);
		}
		protected virtual TestCaseResult CreateTestCaseResult (TestResult testResult)
		{
			return new TestCaseResult (testResult);
		}
		public void Run (TestResult result)
		{
			foreach (ITest test in tests)
			{
				test.Run (result);
			}
		}
		protected void Run (string[] args)
		{
			ITest test = ProcessArguments (args);
			if (test == null)
				return;

			TraceListener debugListener = GetListener ("debug");
			if (debugListener != null)
				Debug.Listeners.Add (debugListener);

			TraceListener traceListener = GetListener ("trace");
			if (traceListener != null)
				Trace.Listeners.Add (traceListener);

			TestResult result = new TestResult ();
			result.AddListener (this);
			test.Run (result);
			WriteResult (result);
		}