public void TestFinished(TestCaseResult testResult)
        {
            if (testResult.Executed)
            {
                testRunCount++;

                if (testResult.IsFailure)
                {
                    failureCount++;

                    if (progress)
                    {
                        Console.Write("F");
                    }

                    messages.Add(string.Format("{0}) {1} :", failureCount, testResult.Test.TestName.FullName));
                    messages.Add(testResult.Message.Trim(Environment.NewLine.ToCharArray()));

                    string stackTrace = StackTraceFilter.Filter(testResult.StackTrace);
                    if (stackTrace != null && stackTrace != string.Empty)
                    {
                        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));
                            }
                        }
                    }

                    BabysitterSupport.RecordFailedTest(currentTestName);
                }
            }
            else
            {
                testIgnoreCount++;

                if (progress)
                {
                    Console.Write("N");
                }
            }

            currentTestName = string.Empty;
        }
Example #2
0
        public int Execute(ConsoleOptions options)
        {
            XmlTextReader transformReader = GetTransformReader(options);

            if (transformReader == null)
            {
                return(FILE_NOT_FOUND);
            }

            TextWriter outWriter      = Console.Out;
            bool       redirectOutput = options.output != null && options.output != string.Empty;

            if (redirectOutput)
            {
                StreamWriter outStreamWriter = new StreamWriter(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(options.err);
                errorStreamWriter.AutoFlush = true;
                errorWriter = errorStreamWriter;
            }

            TestRunner testRunner = MakeRunnerFromCommandLine(options);

            try
            {
                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;
                if (options.run != null && options.run != string.Empty)
                {
                    Console.WriteLine("Selected test: " + options.run);
                    testFilter = new SimpleNameFilter(options.run);
                }

                if (options.include != null && options.include != string.Empty)
                {
                    Console.WriteLine("Included categories: " + options.include);
                    TestFilter includeFilter = new CategoryExpression(options.include).Filter;
                    if (testFilter.IsEmpty)
                    {
                        testFilter = includeFilter;
                    }
                    else
                    {
                        testFilter = new AndFilter(testFilter, includeFilter);
                    }
                }

                if (options.exclude != null && options.exclude != string.Empty)
                {
                    Console.WriteLine("Excluded categories: " + options.exclude);
                    TestFilter excludeFilter = new NotFilter(new CategoryExpression(options.exclude).Filter);
                    if (testFilter.IsEmpty)
                    {
                        testFilter = excludeFilter;
                    }
                    else if (testFilter is AndFilter)
                    {
                        ((AndFilter)testFilter).Add(excludeFilter);
                    }
                    else
                    {
                        testFilter = new AndFilter(testFilter, excludeFilter);
                    }
                }

                testFilter = BabysitterSupport.AddBabysitterFilter(testFilter);

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

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

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

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

                Console.WriteLine();

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

                    if (options.xmlConsole)
                    {
                        Console.WriteLine(xmlOutput);
                    }
                    else
                    {
                        try
                        {
                            //CreateSummaryDocument(xmlOutput, transformReader );
                            XmlResultTransform xform = new XmlResultTransform(transformReader);
                            xform.Transform(new StringReader(xmlOutput), Console.Out);
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine("Error: {0}", ex.Message);
                            return(TRANSFORM_ERROR);
                        }
                    }

                    // Write xml output here
                    string xmlResultFile = options.xml == null || options.xml == string.Empty
                                                ? "TestResult.xml" : options.xml;

                    using (StreamWriter writer = new StreamWriter(xmlResultFile))
                    {
                        writer.Write(xmlOutput);
                    }
                }

                //if ( testRunner != null )
                //    testRunner.Unload();

                if (result == null || collector.HasExceptions)
                {
                    collector.WriteExceptions();
                    return(UNEXPECTED_ERROR);
                }

                if (!result.IsFailure)
                {
                    return(OK);
                }

                ResultSummarizer summ = new ResultSummarizer(result);
                return(summ.FailureCount);
            }
            finally
            {
                testRunner.Unload();
            }
        }