public void MultipleNameMatch()
 {
     Test mock1 = TestFinder.Find("MockTest1", testSuite, true);
     SimpleNameFilter filter = new SimpleNameFilter();
     filter.Add("NUnit.Tests.Assemblies.MockTestFixture.MockTest3");
     filter.Add("NUnit.Tests.Assemblies.MockTestFixture.MockTest1");
     Assert.IsTrue(filter.Pass(mock3), "Name Filter did not pass test case");
     Assert.IsTrue(filter.Pass(mock1), "Name Filter did not pass test case");
     Assert.IsTrue(filter.Pass((TestSuite)testSuite.Tests[0]), "Name Filter did not pass test suite");
 }
        private ITestFilter GetNameFilter(string featureName)
        {
            var nameFilter = new SimpleNameFilter();
            foreach (string name in TestNameParser.Parse(featureName))
                nameFilter.Add(name);

            return nameFilter;
        }
Beispiel #3
0
        public TestResult ExecuteTest(string testName)
        {
            if (_isRunnerReady)
               {
               var result = new NunitTestResult(new TestName());
               var filter = new SimpleNameFilter();
               filter.Add(testName);

               result = _testRunner.Run(_eventListener, filter, false, LoggingThreshold.Off);

               var testSuiteResult = new TestSuite
               {
                   Name = _projectName,
                   TestResults = new List<TestResult>()
               };

               TestAnalyzerHelper.ParseTestResults(testSuiteResult, result);
               return testSuiteResult.TestResults.First();
               }

               return new TestResult();
        }
Beispiel #4
0
		public int Execute( ConsoleOptions options )
		{
            this.workDir = options.work;
            if (workDir == null || workDir == string.Empty)
                workDir = Environment.CurrentDirectory;
            else
            {
                workDir = Path.GetFullPath(workDir);
                if (!Directory.Exists(workDir))
                    Directory.CreateDirectory(workDir);
            }

			TextWriter outWriter = Console.Out;
			bool redirectOutput = options.output != null && options.output != string.Empty;
			if ( redirectOutput )
			{
				StreamWriter outStreamWriter = new StreamWriter( Path.Combine(workDir, options.output) );
				outStreamWriter.AutoFlush = true;
				outWriter = outStreamWriter;
			}

			TextWriter errorWriter = Console.Error;
			bool redirectError = options.err != null && options.err != string.Empty;
			if ( redirectError )
			{
				StreamWriter errorStreamWriter = new StreamWriter( Path.Combine(workDir, options.err) );
				errorStreamWriter.AutoFlush = true;
				errorWriter = errorStreamWriter;
			}

            TestPackage package = MakeTestPackage(options);

            ProcessModel processModel = package.Settings.Contains("ProcessModel")
                ? (ProcessModel)package.Settings["ProcessModel"]
                : ProcessModel.Default;

            DomainUsage domainUsage = package.Settings.Contains("DomainUsage")
                ? (DomainUsage)package.Settings["DomainUsage"]
                : DomainUsage.Default;

            RuntimeFramework framework = package.Settings.Contains("RuntimeFramework")
                ? (RuntimeFramework)package.Settings["RuntimeFramework"]
                : RuntimeFramework.CurrentFramework;

#if CLR_2_0 || CLR_4_0
            Console.WriteLine("ProcessModel: {0}    DomainUsage: {1}", processModel, domainUsage);

            Console.WriteLine("Execution Runtime: {0}", framework);
#else
            Console.WriteLine("DomainUsage: {0}", domainUsage);

            if (processModel != ProcessModel.Default && processModel != ProcessModel.Single)
                Console.WriteLine("Warning: Ignoring project setting 'processModel={0}'", processModel);

            if (!RuntimeFramework.CurrentFramework.Supports(framework))
                Console.WriteLine("Warning: Ignoring project setting 'runtimeFramework={0}'", framework);
#endif

            using (TestRunner testRunner = new DefaultTestRunnerFactory().MakeTestRunner(package))
			{
                testRunner.Load(package);

                if (testRunner.Test == null)
				{
					testRunner.Unload();
					Console.Error.WriteLine("Unable to locate fixture {0}", options.fixture);
					return FIXTURE_NOT_FOUND;
				}

				EventCollector collector = new EventCollector( options, outWriter, errorWriter );

				TestFilter testFilter = TestFilter.Empty;
                SimpleNameFilter nameFilter = new SimpleNameFilter();

				if ( options.run != null && options.run != string.Empty )
				{
					Console.WriteLine( "Selected test(s): " + options.run );
                    foreach (string name in TestNameParser.Parse(options.run))
                        nameFilter.Add(name);
                    testFilter = nameFilter;
				}

                if (options.runlist != null && options.runlist != string.Empty)
                {
                    Console.WriteLine("Run list: " + options.runlist);
                    using (StreamReader rdr = new StreamReader(options.runlist))
                    {
                        // NOTE: We can't use rdr.EndOfStream because it's
                        // not present in .NET 1.x.
                        string line = rdr.ReadLine();
                        while (line != null)
                        {
                            if (line[0] != '#')
                                nameFilter.Add(line);
                            line = rdr.ReadLine();
                        }
                    }
                    testFilter = nameFilter;
                }

				if ( options.include != null && options.include != string.Empty )
				{
					TestFilter includeFilter = new CategoryExpression( options.include ).Filter;
                    Console.WriteLine("Included categories: " + includeFilter.ToString());

                    if (testFilter.IsEmpty)
						testFilter = includeFilter;
					else
						testFilter = new AndFilter( testFilter, includeFilter );
				}

				if ( options.exclude != null && options.exclude != string.Empty )
				{
					TestFilter excludeFilter = new NotFilter( new CategoryExpression( options.exclude ).Filter );
                    Console.WriteLine("Excluded categories: " + excludeFilter.ToString());

					if ( testFilter.IsEmpty )
						testFilter = excludeFilter;
					else if ( testFilter is AndFilter )
						((AndFilter)testFilter).Add( excludeFilter );
					else
						testFilter = new AndFilter( testFilter, excludeFilter );
				}

                if (testFilter is NotFilter)
                    ((NotFilter)testFilter).TopLevel = true;

				TestResult result = null;
				string savedDirectory = Environment.CurrentDirectory;
				TextWriter savedOut = Console.Out;
				TextWriter savedError = Console.Error;

				try
				{
					result = testRunner.Run( collector, testFilter, false, LoggingThreshold.Off );
				}
				finally
				{
					outWriter.Flush();
					errorWriter.Flush();

					if ( redirectOutput )
						outWriter.Close();
					if ( redirectError )
						errorWriter.Close();

					Environment.CurrentDirectory = savedDirectory;
					Console.SetOut( savedOut );
					Console.SetError( savedError );
				}

				Console.WriteLine();

                int returnCode = UNEXPECTED_ERROR;

                if (result != null)
                {
                    string xmlOutput = CreateXmlOutput(result);
                    ResultSummarizer summary = new ResultSummarizer(result);

                    if (options.xmlConsole)
                    {
                        Console.WriteLine(xmlOutput);
                    }
                    else
                    {
                        WriteSummaryReport(summary);
                        if (summary.ErrorsAndFailures > 0 || result.IsError || result.IsFailure)
                        {
                            if (options.stoponerror)
                            {
                                Console.WriteLine("Test run was stopped after first error, as requested.");
                                Console.WriteLine();
                            }

                            WriteErrorsAndFailuresReport(result);
                        }
                        if (summary.TestsNotRun > 0)
                            WriteNotRunReport(result);

                        if (!options.noresult)
                        {
                            // Write xml output here
                            string xmlResultFile = options.result == null || options.result == string.Empty
                                ? "TestResult.xml" : options.result;

                            using (StreamWriter writer = new StreamWriter(Path.Combine(workDir, xmlResultFile)))
                            {
                                writer.Write(xmlOutput);
                            }
                        }
                    }

                    returnCode = summary.ErrorsAndFailures;
                }

				if ( collector.HasExceptions )
				{
					collector.WriteExceptions();
					returnCode = UNEXPECTED_ERROR;
				}
            
				return returnCode;
			}
		}
Beispiel #5
0
        static void Main(string[] args)
        {
            try
            {
                CoreExtensions.Host.InitializeService();

                string assemblyName = "";
                if (args.Length == 2)
                {
                    assemblyName = args[1];
                }
                else
                {
                    Console.WriteLine("usage: VisualNunitRunner.exe [run|list|serve] file");
                    return;
                }

                if (args.Length == 2 && args[0] == "run")
                {
                    // Run tests according to console input.
                    ConsoleTraceListener consoleListener = new ConsoleTraceListener();
                    Trace.Listeners.Add(consoleListener);

                    ConsoleTestRunListener runnerListener = new ConsoleTestRunListener();
                    SimpleNameFilter testFilter = new SimpleNameFilter();
                    testFilter.Add(Console.ReadLine());

                    TestSuite testSuite = new TestBuilder().Build(assemblyName, true);
                    TestResult result = testSuite.Run(runnerListener, testFilter);

                    if (result.StackTrace != null && result.StackTrace.Length > 0)
                    {
                        Trace.TraceError(result.StackTrace);
                    }

                    Console.WriteLine("beginning-of-test-result-xml");
                    StringBuilder builder = new StringBuilder();
                    new XmlResultWriter(new StringWriter(builder)).SaveTestResult(result);
                    Console.WriteLine(builder.ToString());
                }
                else if (args.Length == 2 && args[0] == "list")
                {
                    // List tests to console output.
                    ConsoleTraceListener consoleListener = new ConsoleTraceListener();
                    Trace.Listeners.Add(consoleListener);

                    TestSuite testSuite = new TestBuilder().Build(assemblyName, true);
                    Queue<ITest> testQueue = new Queue<ITest>();
                    testQueue.Enqueue(testSuite);
                    while (testQueue.Count > 0)
                    {
                        ITest test = testQueue.Dequeue();
                        if (test.Tests != null)
                        {
                            foreach (ITest childTest in test.Tests)
                            {
                                testQueue.Enqueue(childTest);
                            }
                        }
                        else
                        {
                            Console.WriteLine(test.TestName.FullName);
                        }
                    }
                }
                else if (args.Length == 2 && args[0] == "serve")
                {
                    // Run in service mode to serve visual studio via named pipes.
                    RunnerServer runnerServer = new RunnerServer(assemblyName);
                    while (runnerServer.IsAlive)
                    {
                        Thread.Sleep(10);
                    }
                    System.Environment.Exit(0);
                }
            }
            catch (Exception e)
            {
                Trace.TraceError("VisualNunitRunner failed: "+e);
            }
        }
Beispiel #6
0
		internal static bool CreateTestFilter(ConsoleOptions options, out TestFilter testFilter)
		{
			testFilter = TestFilter.Empty;

			SimpleNameFilter nameFilter = new SimpleNameFilter();

			if (options.run != null && options.run != string.Empty)
			{
				Console.WriteLine("Selected test(s): " + options.run);

				foreach (string name in TestNameParser.Parse(options.run))
					nameFilter.Add(name);

				testFilter = nameFilter;
			}

			if (options.runlist != null && options.runlist != string.Empty)
			{
				Console.WriteLine("Run list: " + options.runlist);
				
				try
				{
					using (StreamReader rdr = new StreamReader(options.runlist))
					{
						// NOTE: We can't use rdr.EndOfStream because it's
						// not present in .NET 1.x.
						string line = rdr.ReadLine();
						while (line != null && line.Length > 0)
						{
							if (line[0] != '#')
								nameFilter.Add(line);
							line = rdr.ReadLine();
						}
					}
				}
				catch (Exception e)
				{
					if (e is FileNotFoundException || e is DirectoryNotFoundException)
					{
						Console.WriteLine("Unable to locate file: " + options.runlist);
						return false;
					}
					throw;
				}

				testFilter = nameFilter;
			}

			if (options.include != null && options.include != string.Empty)
			{
				TestFilter includeFilter = new CategoryExpression(options.include).Filter;
				Console.WriteLine("Included categories: " + includeFilter.ToString());

				if (testFilter.IsEmpty)
					testFilter = includeFilter;
				else
					testFilter = new AndFilter(testFilter, includeFilter);
			}

			if (options.exclude != null && options.exclude != string.Empty)
			{
				TestFilter excludeFilter = new NotFilter(new CategoryExpression(options.exclude).Filter);
				Console.WriteLine("Excluded categories: " + excludeFilter.ToString());

				if (testFilter.IsEmpty)
					testFilter = excludeFilter;
				else if (testFilter is AndFilter)
					((AndFilter) testFilter).Add(excludeFilter);
				else
					testFilter = new AndFilter(testFilter, excludeFilter);
			}

			if (testFilter is NotFilter)
				((NotFilter) testFilter).TopLevel = true;

			return true;
		}
 private static SimpleNameFilter MakeTestFilter(IEnumerable<TestCase> ptestCases)
 {
     var filter = new SimpleNameFilter();
     foreach (TestCase testCase in ptestCases)
     {
         filter.Add(testCase.FullyQualifiedName);
     }
     return filter;
 }
Beispiel #8
0
        /// <summary>
        /// Runs the requested test and return result XML.
        /// </summary>
        /// <param name="testName"></param>
        /// <returns>Result XML document</returns> 
        private string RunTest(string testName, bool explicitRun)
        {
            // Execute the give test.
            SimpleNameFilter testFilter = new SimpleNameFilter();

            testFilter.Add(testName);

            TestSuite testSuite = new TestBuilder().Build(assemblyName, true);
            //TestResult result = testSuite.Run(this, testFilter);

            TestResult result = null;
            Queue<ITest> testQueue = new Queue<ITest>();
            testQueue.Enqueue(testSuite);
            while (testQueue.Count > 0)
            {
                ITest test = testQueue.Dequeue();

                if (test.Tests != null)
                {
                    foreach (ITest childTest in test.Tests)
                    {
                        testQueue.Enqueue(childTest);
                    }
                }
                else
                {
                    if (test.TestName.FullName.Equals(testName))
                    {
                        if (!explicitRun && test.RunState == RunState.Explicit)
                        {
                            result = new TestResult(test.TestName);
                        }
                        else
                        {
                            result = ((Test)test).Run(this, null);
                        }
                    }
                }
            }

            // Trace error stack trace.
            if (result.StackTrace != null && result.StackTrace.Length > 0)
            {
                Trace.TraceError(result.StackTrace);
            }

            // Serialize result to XML.
            StringBuilder builder = new StringBuilder();
            new XmlResultWriter(new StringWriter(builder)).SaveTestResult(result);

            return builder.ToString();
        }