From e2ff9bb9cbef7816f9eb4a3468d5ca32dba79e89 Mon Sep 17 00:00:00 2001
From: Maarten Bosmans <mkbosmans@gmail.com>
Date: Mon, 15 Jun 2009 07:47:54 +0200
Subject: [PATCH] Use nunit-console from nunit instead of in-tree ConsoleUi.

And check for nunit >= v2.0 at configure time.
---
 configure.ac       |   9 +-
 tests/ConsoleUi.cs | 421 ---------------------------------------------
 tests/Makefile.am  |  20 +--
 3 files changed, 14 insertions(+), 436 deletions(-)
 delete mode 100644 tests/ConsoleUi.cs

diff --git a/configure.ac b/configure.ac
index 24d1f32afe..cd94ab8ab0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -123,7 +123,14 @@ AM_CONDITIONAL(ENABLE_MONODOC, test "x$enable_monodoc" = "xyes")
 ## Check for the gapi programs
 PKG_CHECK_MODULES(GAPI, gapi-2.0 >= $GLIBSHARP_REQUIRED_VERSION)
 
-PKG_CHECK_MODULES(MONO_NUNIT, mono-nunit >= 1.0, do_tests="yes", do_tests="no")
+## NUnit tests
+AC_PATH_PROG(NUNIT_TESTER, nunit-console, no)
+if test "x$NUNIT_TESTER" = "xno" ; then
+	AC_MSG_WARN([Could not find nunit-console: unit tests cannot be executed])
+fi
+AC_SUBST(NUNIT_TESTER)
+
+PKG_CHECK_MODULES(MONO_NUNIT, mono-nunit >= 2.0, do_tests="yes", do_tests="no")
 AC_SUBST(MONO_NUNIT_LIBS)
 AM_CONDITIONAL(ENABLE_TESTS, test "x$do_tests" = "xyes")
 if test "x$do_tests" = "xno"; then
diff --git a/tests/ConsoleUi.cs b/tests/ConsoleUi.cs
deleted file mode 100644
index 44edb1b3db..0000000000
--- a/tests/ConsoleUi.cs
+++ /dev/null
@@ -1,421 +0,0 @@
-#region Copyright (c) 2002-2003, James W. Newkirk, Michael C. Two, Alexei A. Vorontsov, Charlie Poole, Philip A. Craig
-/************************************************************************************
-'
-' Copyright � 2002-2003 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov, Charlie Poole
-' Copyright � 2000-2003 Philip A. Craig
-'
-' This software is provided 'as-is', without any express or implied warranty. In no 
-' event will the authors be held liable for any damages arising from the use of this 
-' software.
-' 
-' Permission is granted to anyone to use this software for any purpose, including 
-' commercial applications, and to alter it and redistribute it freely, subject to the 
-' following restrictions:
-'
-' 1. The origin of this software must not be misrepresented; you must not claim that 
-' you wrote the original software. If you use this software in a product, an 
-' acknowledgment (see the following) in the product documentation is required.
-'
-' Portions Copyright � 2003 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov, Charlie Poole
-' or Copyright � 2000-2003 Philip A. Craig
-'
-' 2. Altered source versions must be plainly marked as such, and must not be 
-' misrepresented as being the original software.
-'
-' 3. This notice may not be removed or altered from any source distribution.
-'
-'***********************************************************************************/
-#endregion
-
-namespace NUnit.Console
-{
-	using System;
-	using System.Collections;
-	using System.Collections.Specialized;
-	using System.IO;
-	using System.Reflection;
-	using System.Xml;
-	using System.Xml.Xsl;
-	using System.Xml.XPath;
-	using System.Resources;
-	using System.Text;
-	using System.Text.RegularExpressions;
-	using System.Diagnostics;
-	using NUnit.Core;
-	using NUnit.Util;
-	
-
-	/// <summary>
-	/// Summary description for ConsoleUi.
-	/// </summary>
-	public class ConsoleUi
-	{
-		[STAThread]
-		public static int Main(string[] args)
-		{
-			ConsoleOptions options = new ConsoleOptions(args);
-			if(!options.nologo)
-				WriteCopyright();
-
-			if(options.help)
-			{
-				options.Help();
-				return 0;
-			}
-			
-			if(options.NoArgs) 
-			{
-				Console.Error.WriteLine("fatal error: no inputs specified");
-				options.Help();
-				return 0;
-			}
-			
-			if(!options.Validate())
-			{
-				Console.Error.WriteLine("fatal error: invalid arguments");
-				options.Help();
-				return 2;
-			}
-
-			try
-			{
-				ConsoleUi consoleUi = new ConsoleUi();
-				consoleUi.Execute( options );
-				return 0;
-			}
-			catch( FileNotFoundException ex )
-			{
-				Console.WriteLine( ex.Message );
-				return 2;
-			}
-			catch( BadImageFormatException ex )
-			{
-				Console.WriteLine( ex.Message );
-				return 2;
-			}
-			catch( Exception ex )
-			{
-				Console.WriteLine( "Unhandled Exception:\n{0}", ex.ToString() );
-				return 2;
-			}
-			finally
-			{
-				if(options.wait)
-				{
-					Console.Out.WriteLine("\nHit <enter> key to continue");
-					Console.ReadLine();
-				}
-			}
-		}
-
-		private static XmlTextReader GetTransformReader(ConsoleOptions parser)
-		{
-			XmlTextReader reader = null;
-			if(!parser.IsTransform)
-			{
-				Assembly assembly = Assembly.GetAssembly(typeof(XmlResultVisitor));
-				ResourceManager resourceManager = new ResourceManager("NUnit.Util.Transform",assembly);
-				string xmlData = (string)resourceManager.GetObject("Summary.xslt");
-
-				reader = new XmlTextReader(new StringReader(xmlData));
-			}
-			else
-			{
-				FileInfo xsltInfo = new FileInfo(parser.transform);
-				if(!xsltInfo.Exists)
-				{
-					Console.Error.WriteLine("Transform file: {0} does not exist", xsltInfo.FullName);
-					reader = null;
-				}
-				else
-				{
-					reader = new XmlTextReader(xsltInfo.FullName);
-				}
-			}
-
-			return reader;
-		}
-
-		private static void WriteCopyright()
-		{
-			Assembly executingAssembly = Assembly.GetExecutingAssembly();
-			System.Version version = executingAssembly.GetName().Version;
-
-			string clrPlatform = Type.GetType("Mono.Runtime", false) == null ? ".NET" : "Mono";
-			Console.WriteLine( string.Format("OS Version: {0}    {1} Version: {2}",
-				Environment.OSVersion, clrPlatform, Environment.Version ) );
-			Console.WriteLine();
-		}
-
-		private static Test MakeTestFromCommandLine(TestDomain testDomain, ConsoleOptions parser)
-		{
-			NUnitProject project;
-
-			if ( parser.IsTestProject )
-			{
-				project = NUnitProject.LoadProject( (string)parser.Parameters[0] );
-				string configName = (string) parser.config;
-				if ( configName != null )
-					project.SetActiveConfig( configName );
-			}
-			else
-				project = NUnitProject.FromAssemblies( (string[])parser.Parameters.ToArray( typeof( string ) ) );
-
-			return testDomain.Load( project, parser.fixture );
-		}
-
-		public ConsoleUi()
-		{
-		}
-
-		public int Execute( ConsoleOptions options )
-		{
-			XmlTextReader transformReader = GetTransformReader(options);
-			if(transformReader == null) return 3;
-
-			ConsoleWriter outStream = options.isOut
-				? new ConsoleWriter( new StreamWriter( options.output ) )
-				: new ConsoleWriter(Console.Out);
-
-			ConsoleWriter errorStream = options.isErr
-				? new ConsoleWriter( new StreamWriter( options.err ) )
-				: new ConsoleWriter(Console.Error);
-
-			TestDomain testDomain = new TestDomain(outStream, errorStream);
-			if ( options.noshadow  ) testDomain.ShadowCopyFiles = false;
-
-			Test test = MakeTestFromCommandLine(testDomain, options);
-
-			if(test == null)
-			{
-				Console.Error.WriteLine("Unable to locate fixture {0}", options.fixture);
-				return 2;
-			}
-
-			Directory.SetCurrentDirectory(new FileInfo((string)options.Parameters[0]).DirectoryName);
-		
-			EventListener collector = new EventCollector( options, outStream );
-
-			string savedDirectory = Environment.CurrentDirectory;
-
-			if (options.HasInclude)
-			{
-				Console.WriteLine( "Included categories: " + options.include );
-				testDomain.SetFilter( new CategoryFilter( options.IncludedCategories ) );
-			}
-			else if ( options.HasExclude )
-			{
-				Console.WriteLine( "Excluded categories: " + options.exclude );
-				testDomain.SetFilter( new CategoryFilter( options.ExcludedCategories, true ) );
-			}
-
-			TestResult result = null;
-			if ( options.thread )
-			{
-				testDomain.RunTest( collector );
-				testDomain.Wait();
-				result = testDomain.Result;
-			}
-			else
-			{
-				result = testDomain.Run( collector );
-			}
-
-			Directory.SetCurrentDirectory( savedDirectory );
-			
-			Console.WriteLine();
-
-			string xmlOutput = CreateXmlOutput( result );
-			
-			if (options.xmlConsole)
-				Console.WriteLine(xmlOutput);
-			else
-				CreateSummaryDocument(xmlOutput, transformReader);
-
-			// Write xml output here
-			string xmlResultFile = options.IsXml ? options.xml : "TestResult.xml";
-
-			using ( StreamWriter writer = new StreamWriter( xmlResultFile ) ) 
-			{
-				writer.Write(xmlOutput);
-			}
-
-			if ( testDomain != null )
-				testDomain.Unload();
-
-			return result.IsFailure ? 1 : 0;
-		}
-
-		private string CreateXmlOutput( TestResult result )
-		{
-			StringBuilder builder = new StringBuilder();
-			XmlResultVisitor resultVisitor = new XmlResultVisitor(new StringWriter( builder ), result);
-			result.Accept(resultVisitor);
-			resultVisitor.Write();
-
-			return builder.ToString();
-		}
-
-		private void CreateSummaryDocument(string xmlOutput, XmlTextReader transformReader)
-		{
-			XPathDocument originalXPathDocument = new XPathDocument(new StringReader(xmlOutput));
-			XslTransform summaryXslTransform = new XslTransform();
-			
-			// Using obsolete form for now, remove warning suppression from project after changing
-			summaryXslTransform.Load(transformReader);
-			
-			// Using obsolete form for now, remove warning suppression from project after changing
-			summaryXslTransform.Transform(originalXPathDocument,null,Console.Out);
-		}
-
-		#region Nested Class to Handle Events
-
-		private class EventCollector : LongLivingMarshalByRefObject, EventListener
-		{
-			private int testRunCount;
-			private int testIgnoreCount;
-			private int failureCount;
-			private int level;
-
-			private ConsoleOptions options;
-			private ConsoleWriter writer;
-
-			StringCollection messages;
-		
-			private bool debugger = false;
-			private string currentTestName;
-
-			public EventCollector( ConsoleOptions options, ConsoleWriter writer )
-			{
-				debugger = Debugger.IsAttached;
-				level = 0;
-				this.options = options;
-				this.writer = writer;
-				this.currentTestName = string.Empty;
-			}
-
-			public void RunStarted(Test[] tests)
-			{
-			}
-
-			public void RunFinished(TestResult[] results)
-			{
-			}
-
-			public void RunFinished(Exception exception)
-			{
-			}
-
-			public void TestFinished(TestCaseResult testResult)
-			{
-				if ( !options.xmlConsole && !options.labels )
-				{
-					if(testResult.Executed)
-					{
-						testRunCount++;
-						
-						if(testResult.IsFailure)
-						{	
-							failureCount++;
-							Console.Write("F");
-							if ( debugger )
-							{
-								messages.Add( string.Format( "{0}) {1} :", failureCount, testResult.Test.FullName ) );
-								messages.Add( testResult.Message.Trim( Environment.NewLine.ToCharArray() ) );
-
-								string stackTrace = StackTraceFilter.Filter( testResult.StackTrace );
-								string[] trace = stackTrace.Split( System.Environment.NewLine.ToCharArray() );
-								foreach( string s in trace )
-								{
-									if ( s != string.Empty )
-									{
-										string link = Regex.Replace( s.Trim(), @".* in (.*):line (.*)", "$1($2)");
-										messages.Add( string.Format( "at\n{0}", link ) );
-									}
-								}
-							}
-						}
-					}
-					else
-					{
-						testIgnoreCount++;
-						Console.Write("N");
-					}
-				}
-
-				currentTestName = string.Empty;
-			}
-
-			public void TestStarted(TestCase testCase)
-			{
-				currentTestName = testCase.FullName;
-
-				if ( options.labels )
-					writer.WriteLine("***** {0}", testCase.FullName );
-				else if ( !options.xmlConsole )
-					Console.Write(".");
-}
-
-			public void SuiteStarted(TestSuite suite) 
-			{
-				if ( debugger && level++ == 0 )
-				{
-					messages = new StringCollection();
-					testRunCount = 0;
-					testIgnoreCount = 0;
-					failureCount = 0;
-					Trace.WriteLine( "################################ UNIT TESTS ################################" );
-					Trace.WriteLine( "Running tests in '" + suite.FullName + "'..." );
-				}
-			}
-
-			public void SuiteFinished(TestSuiteResult suiteResult) 
-			{
-				if ( debugger && --level == 0) 
-				{
-					Trace.WriteLine( "############################################################################" );
-
-					if (messages.Count == 0) 
-					{
-						Trace.WriteLine( "##############                 S U C C E S S               #################" );
-					}
-					else 
-					{
-						Trace.WriteLine( "##############                F A I L U R E S              #################" );
-						
-						foreach ( string s in messages ) 
-						{
-							Trace.WriteLine(s);
-						}
-					}
-
-					Trace.WriteLine( "############################################################################" );
-					Trace.WriteLine( "Executed tests : " + testRunCount );
-					Trace.WriteLine( "Ignored tests  : " + testIgnoreCount );
-					Trace.WriteLine( "Failed tests   : " + failureCount );
-					Trace.WriteLine( "Total time     : " + suiteResult.Time + " seconds" );
-					Trace.WriteLine( "############################################################################");
-				}
-			}
-
-			public void UnhandledException( Exception exception )
-			{
-				string msg = string.Format( "##### Unhandled Exception while running {0}", currentTestName );
-
-				// If we do labels, we already have a newline
-				if ( !options.labels ) writer.WriteLine();
-				writer.WriteLine( msg );
-				writer.WriteLine( exception.ToString() );
-
-				if ( debugger )
-				{
-					Trace.WriteLine( msg );
-					Trace.WriteLine( exception.ToString() );
-				}
-			}
-		}
-
-		#endregion
-	}
-}
-
diff --git a/tests/Makefile.am b/tests/Makefile.am
index cb0f4f51b9..b9ed1fc0bd 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -1,23 +1,15 @@
-MCS_FLAGS = -debug
-NUNIT_FLAGS = $(MONO_NUNIT_LIBS)
+MCS_FLAGS = -debug $(MONO_NUNIT_LIBS)
 
 ASSEMBLY_NAME = gstreamer-tests
 ASSEMBLY = $(ASSEMBLY_NAME).dll
 ASSEMBLY_CSFILES = $(srcdir)/ApplicationTest.cs $(srcdir)/BinTest.cs $(srcdir)/BufferTest.cs $(srcdir)/CapsTest.cs $(srcdir)/PadTest.cs $(srcdir)/ElementTest.cs $(srcdir)/MessageTest.cs $(srcdir)/PipelineTest.cs
 
-NUNIT_TESTER_NAME = ConsoleUi
-NUNIT_TESTER = $(NUNIT_TESTER_NAME).exe
-NUNIT_TESTER_CSFILES = $(srcdir)/$(NUNIT_TESTER_NAME).cs
-
 $(ASSEMBLY): $(ASSEMBLY_CSFILES)
-	$(CSC) $(MCS_FLAGS) $(NUNIT_FLAGS) -out:$@ -target:library -r:$(top_builddir)/gstreamer-sharp/gstreamer-sharp.dll $(ASSEMBLY_CSFILES) $(GLIBSHARP_LIBS)
+	$(CSC) $(MCS_FLAGS) -out:$@ -target:library -r:$(top_builddir)/gstreamer-sharp/gstreamer-sharp.dll $(ASSEMBLY_CSFILES) $(GLIBSHARP_LIBS)
 
-$(NUNIT_TESTER): $(NUNIT_TESTER_CSFILES)
-	$(CSC) $(MCS_FLAGS) -out:$@ $(NUNIT_FLAGS) $(NUNIT_TESTER_CSFILES)
+run-test: $(ASSEMBLY)
+	MONO_PATH="../gstreamer-sharp/" $(MONO) $(NUNIT_TESTER) $(ASSEMBLY)
 
-run-test: $(NUNIT_TESTER) $(ASSEMBLY)
-	MONO_PATH="../gstreamer-sharp/" mono --debug $(NUNIT_TESTER) $(ASSEMBLY)
-
-CLEANFILES = $(ASSEMBLY) $(NUNIT_TESTER) TestResult.xml
-DISTCLEANFILES = *.mdb Makefile.in *.dll *.exe
+CLEANFILES = $(ASSEMBLY) *.mdb *.pdb TestResult.xml
+DISTCLEANFILES = Makefile.in