Esempio n. 1
0
 // This constructor is called by the others and is used directly for testing
 public AssemblyRunner(TestLogger logger, string assemblyName)
 {
     this.logger = logger;
     this.assemblyName = assemblyName;
     this.testConverter = new TestConverter(logger, assemblyName);
     this.loadedTestCases = new List<TestCase>();
     this.nunitFilter = TestFilter.Empty;
 }
Esempio n. 2
0
 // This constructor is used when the executor is called with a list of assemblies
 public AssemblyRunner(TestLogger logger, string assemblyName, TFSTestFilter tfsFilter)
     : this(logger, assemblyName)
 {
     if (tfsFilter.HasTfsFilterValue)
     {
         var filteredTestCases = tfsFilter.CheckFilter(this.LoadedTestCases);
         this.nunitFilter = MakeTestFilter(filteredTestCases);
     }
 }
        private TestResults RunTests(TestPackage package, TestFilter filter, Messages.OnMessage[] subscribers)
        {
            NUnit.Core.TestResult result;
            ProcessModel processModel = package.Settings.Contains("ProcessModel") ? (ProcessModel)package.Settings["ProcessModel"] : ProcessModel.Default;
            DomainUsage domainUsage = package.Settings.Contains("DomainUsage") ? (DomainUsage)package.Settings[(object)"DomainUsage"] : DomainUsage.Default;
            RuntimeFramework runtimeFramework = package.Settings.Contains("RuntimeFramework") ? (RuntimeFramework)package.Settings["RuntimeFramework"] : RuntimeFramework.CurrentFramework;

            using (new SaveConsoleOutput())
            using (TestRunner testRunner = new DefaultTestRunnerFactory().MakeTestRunner(package))
            using (var ms = new MemoryStream())
            using (var output = CreateOutputWriter(ms))
            {
                try
                {
                    TestEventHandler eventCollector = new TestEventHandler(_options, output, subscribers);
                    testRunner.Load(package);
                    if (testRunner.Test == null)
                    {
                        testRunner.Unload();
                        return new TestResults(TestResults.Code.FixtureNotFound, "Unable to locate fixture");
                    }
                    result = testRunner.Run(eventCollector, filter, false, LoggingThreshold.All);
                    var summary = eventCollector.GetSummary();

                    output.Flush();
                    if (summary.UnexpectedError)
                        return new TestResults(TestResults.Code.UnexpectedError, GetResultText(ms), summary);

                    return new TestResults(summary.InvalidAssemblies > 0
                            ? TestResults.Code.InvalidAssembly
                            : GetCode(summary.FailureCount + summary.ErrorCount + summary.InvalidCount),
                            GetResultText(ms), summary);
                }
                catch (FileNotFoundException ex)
                {
                    output.WriteLine(ex.Message);
                    output.Flush();
                    return new TestResults(TestResults.Code.InvalidAssembly, GetResultText(ms));
                }
                catch (DirectoryNotFoundException ex)
                {
                    output.WriteLine(ex.Message);
                    output.Flush();
                    return new TestResults(TestResults.Code.InvalidAssembly, GetResultText(ms));
                }
                catch (Exception ex)
                {
                    output.WriteLine(ex.ToString());
                    output.Flush();
                    return new TestResults(TestResults.Code.UnexpectedError, GetResultText(ms));
                }
            }
        }
Esempio n. 4
0
 private TestResult run(TestRunner testRunner, TestHarvester harvester, TestFilter testFilter, string savedDirectory)
 {
     TestResult result = null;
     try
     {
         result = testRunner.Run(harvester, testFilter, false, LoggingThreshold.Off);
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex);
     }
     finally
     {
         Environment.CurrentDirectory = savedDirectory;
     }
     return result;
 }
Esempio n. 5
0
        /// <summary>
        /// Initializes a new instance of the <see cref="NUnitTestsFilter"/> class.
        /// </summary>
        /// <param name="include">The include parameter.</param>
        /// <param name="exclude">The exclude parameter.</param>
        /// <param name="run">The run parameter.</param>
        public NUnitTestsFilter(string include, string exclude, string run = null)
        {
            var filters = new List<TestFilter>();

            if (!string.IsNullOrEmpty(run))
                filters.Add(new SimpleNameFilter(run));

            if (!string.IsNullOrEmpty(include))
                filters.Add(new CategoryExpression(include).Filter);

            if (!string.IsNullOrEmpty(exclude))
                filters.Add(new NotFilter(new CategoryExpression(exclude).Filter));

            if (filters.Count == 0)
                nativeFilter = TestFilter.Empty;
            else if (filters.Count == 1)
                nativeFilter = filters[0];
            else
                nativeFilter = new AndFilter(filters.ToArray());

            var notFilter = nativeFilter as NotFilter;
            if (notFilter != null)
                notFilter.TopLevel = true;
        }
        private void RestoreVisualState( VisualState visualState )
        {
            this.CheckBoxes = visualState.ShowCheckBoxes;

            foreach (VisualTreeNode visualNode in visualState.Nodes)
            {
                TestSuiteTreeNode treeNode = this[visualNode.UniqueName];
                if (treeNode != null)
                {
                    if (treeNode.IsExpanded != visualNode.Expanded)
                        treeNode.Toggle();

                    treeNode.Checked = visualNode.Checked;
                }
            }

            if (visualState.SelectedNode != null)
            {
                TestSuiteTreeNode treeNode = this[visualState.SelectedNode];
                if (treeNode != null)
                    this.SelectedNode = treeNode;
            }

            if (visualState.TopNode != null)
            {
                TestSuiteTreeNode treeNode = this[visualState.TopNode];
                if (treeNode != null)
                    TryToSetTopNode(treeNode);
            }

            if (visualState.SelectedCategories != null)
            {
                TestFilter filter = new CategoryFilter(visualState.SelectedCategories.Split(new char[] { ',' }));
                if (visualState.ExcludeCategories)
                    filter = new NotFilter(filter);
                this.CategoryFilter = filter;
            }

            this.Select();
		}
Esempio n. 7
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;
		}
Esempio n. 8
0
		public static TestFilter AddBabysitterFilter(TestFilter currentFilter)
		{
			if (Override == OverrideMode.None)
				return currentFilter;
			return new AndFilter(currentFilter, new BabysitterFilter());
		}
Esempio n. 9
0
        protected override int DoRun(Console.ConsoleOptions options, bool redirectOutput, bool redirectError, TestPackage package, TextWriter outWriter, TextWriter errorWriter, TestFilter testFilter, out TestResult result, EventCollector collector)
        {
            result = null;
            var testRunner1 = new DefaultTestRunnerFactory().MakeTestRunner(package);
            try
            {
                testRunner1.Load(package);

                if (testRunner1.Test == null)
                {
                    testRunner1.Unload();
                    System.Console.Error.WriteLine("Unable to locate fixture {0}", options.fixture);
                    return FIXTURE_NOT_FOUND;
                }
            }
            finally
            {
                var disp = testRunner1 as IDisposable;
                if (disp != null)
                    disp.Dispose();
            }

            result = new TestResult(new TestName { Name = "Global" });
            var timer = new Stopwatch();
            timer.Start();

            var testRunnerId = 0;
            {
                var syncTestRunner = new DefaultTestRunnerFactory().MakeTestRunner(package);
                var syncFilter = new AndFilter(testFilter, new SynchronousFilter());
                var logger = new ConsoleLoggingEventListener(collector);
                result.AddResult(RunPartition(redirectOutput, redirectError, package, outWriter, errorWriter, syncFilter, syncTestRunner, logger));
                testRunnerId = syncTestRunner.ID;
            }

            var dep = 0;
            var consoleOptions = options as ConsoleOptions;
            if (options != null)
                dep = consoleOptions.degreeofparallelism;
            if (dep == 0)
                dep = 4;
            System.Console.WriteLine("Degree of Parallelism: {0}", dep);

            var state = new AsynchronousFilterState(dep);
            var asyncTestRunner = new ParallelTestRunner(testRunnerId + 1, dep, state);
            result.AddResult(RunPartition(redirectOutput, redirectError, package, outWriter, errorWriter, testFilter, asyncTestRunner, collector));

            if (consoleOptions != null && consoleOptions.retestfailures)
            {
                var failedTests = (from test in Flatten(result)
                                   where test.Result.IsFailure
                                   select test).ToList();
                var failedTestFilter = new SimpleNameFilter(failedTests.Select(t => t.Result.FullName));

                var retestTestRunner = new DefaultTestRunnerFactory().MakeTestRunner(package);
                var retestFilter = new AndFilter(testFilter, failedTestFilter);
                var logger = new ConsoleLoggingEventListener(collector);
                var retestResults = RunPartition(redirectOutput, redirectError, package, outWriter, errorWriter, retestFilter, retestTestRunner, logger);

                var newTests = Flatten(retestResults).ToDictionary(test => test.Result.FullName);

                foreach (var failedTest in failedTests)
                {
                    var newTest = newTests[failedTest.Result.FullName];
                    if (newTest.Result.IsSuccess)
                    {
                        failedTest.Parent.Results.Remove(failedTest.Result);
                        failedTest.Parent.Results.Add(newTest.Result);
                    }
                }
            }

            result = MergeResults(result.Test, (TestResult)result.Results[0], (TestResult)result.Results[1]);

            timer.Stop();
            result.Time = timer.ElapsedTicks / (double)TimeSpan.TicksPerSecond;
            return 0;
        }
Esempio n. 10
0
        private TestResult RunPartition(bool redirectOutput, bool redirectError, TestRunner testRunner, TextWriter outWriter, TextWriter errorWriter, TestFilter testFilter, EventListener collector)
        {
            TestResult result = null;
            var savedDirectory = Environment.CurrentDirectory;
            var savedOut = System.Console.Out;
            var savedError = System.Console.Error;

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

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

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

            System.Console.WriteLine();
            return result;
        }
Esempio n. 11
0
 private TestResult RunPartition(bool redirectOutput, bool redirectError, TestPackage package, TextWriter outWriter, TextWriter errorWriter, TestFilter testFilter, TestRunner testRunner, EventListener collector)
 {
     TestResult result;
     try
     {
         testRunner.Load(package);
         result = RunPartition(redirectOutput, redirectError, testRunner, outWriter, errorWriter, testFilter, collector);
     }
     finally
     {
         var disp = testRunner as IDisposable;
         if (disp != null)
             disp.Dispose();
     }
     return result;
 }
Esempio n. 12
0
 // This constructor is used when the executor is called with a list of test cases
 public AssemblyRunner(TestLogger logger, string assemblyName, IEnumerable<TestCase> selectedTestCases)
     : this(logger, assemblyName)
 {
     this.nunitFilter = MakeTestFilter(selectedTestCases);
 }
        private bool CreateTestFilter(HostedOptions options, out TestFilter testFilter)
        {
            testFilter = TestFilter.Empty;
            SimpleNameFilter simpleNameFilter = new SimpleNameFilter();

            if (testFilter is NotFilter)
            {
                ((NotFilter)testFilter).TopLevel = true;
            }
            return true;
        }
Esempio n. 14
0
 protected abstract int DoRun(ConsoleOptions options, bool redirectOutput, bool redirectError, TestPackage package, TextWriter outWriter, TextWriter errorWriter, TestFilter testFilter, out TestResult result, EventCollector collector);