예제 #1
0
        /// <inheritdoc />
        protected override void LogImpl(LogSeverity severity, string message, ExceptionData exceptionData)
        {
            switch (severity)
            {
            case LogSeverity.Error:
                testListener.WriteLine(message, FacadeCategory.Error);
                break;

            case LogSeverity.Warning:
                testListener.WriteLine(message, FacadeCategory.Warning);
                break;

            case LogSeverity.Important:
            case LogSeverity.Info:
                testListener.WriteLine(message, FacadeCategory.Info);
                break;

            case LogSeverity.Debug:
                testListener.WriteLine(message, FacadeCategory.Debug);
                break;
            }

            if (exceptionData != null)
            {
                testListener.WriteLine(exceptionData.ToString(), FacadeCategory.Error);
            }
        }
예제 #2
0
        /// <inheritdoc />
        protected override void LogAnnotation(AnnotationData annotation)
        {
            StringBuilder message = new StringBuilder();

            message.AppendFormat("[{0}] ", annotation.Type.ToString().ToLower());
            message.Append(annotation.Message);

            if (annotation.CodeLocation != CodeLocation.Unknown)
            {
                message.Append("\n\tLocation: ");
                message.Append(annotation.CodeLocation);
            }

            if (annotation.CodeLocation.Line == 0 && annotation.CodeReference != CodeReference.Unknown)
            {
                message.Append("\n\tReference: ");
                message.Append(annotation.CodeReference);
            }

            if (!string.IsNullOrEmpty(annotation.Details))
            {
                message.Append("\n\tDetails: ");
                message.Append(annotation.Details);
            }

            FacadeCategory category = GetCategoryForAnnotation(annotation.Type);

            testListener.WriteLine(message.ToString(), category);
        }
예제 #3
0
        /// <summary>
        /// Inform the user that no tests were run and the reason for it. TD.NET displays
        /// a message like "0 Passed, 0 Failed, 0 Skipped" but it does it in the status bar,
        /// which may be harder to notice for the user. Be aware that this message will
        /// only be displayed when the user runs an individual test or fixture (TD.NET
        /// ignores the messages we send when it's running an entire assembly).
        /// </summary>
        /// <param name="testListener">An ITestListener object to write the message to.</param>
        /// <param name="reason">The reason no tests were run for.</param>
        private static void InformNoTestsWereRun(IFacadeTestListener testListener, string reason)
        {
            reason = String.IsNullOrEmpty(reason) ? String.Empty : " (" + reason + ")";
            string message = String.Format("** {0}{1} **", Resources.MbUnitTestRunner_NoTestsWereRun, reason);

            testListener.WriteLine(message, FacadeCategory.Warning);
        }
        /// <inheritdoc />
        protected override FacadeTestRunState RunImpl(IFacadeTestListener testListener, string assemblyPath, string cref, FacadeOptions facadeOptions)
        {
            string versionLabel = VersionPolicy.GetVersionLabel(Assembly.GetExecutingAssembly());
            testListener.WriteLine(String.Format(Resources.RunnerNameAndVersion + "\n", versionLabel), FacadeCategory.Info);

            switch (facadeOptions.FilterCategoryMode)
            {
                case FacadeFilterCategoryMode.Include:
                    testListener.WriteLine(String.Format("Included categories: {0}\n", CombineCategoryNameList(facadeOptions.FilterCategoryNames)), FacadeCategory.Info);
                    break;

                case FacadeFilterCategoryMode.Exclude:
                    testListener.WriteLine(String.Format("Excluded categories: {0}\n", CombineCategoryNameList(facadeOptions.FilterCategoryNames)), FacadeCategory.Info);
                    break;
            }

            EnsureTestRunnerIsCreated();
            return testRunner.Run(testListener, assemblyPath, cref, facadeOptions);
        }
예제 #5
0
        /// <inheritdoc />
        protected override FacadeTestRunState RunImpl(IFacadeTestListener testListener, string assemblyPath, string cref, FacadeOptions facadeOptions)
        {
            string versionLabel = VersionPolicy.GetVersionLabel(Assembly.GetExecutingAssembly());

            testListener.WriteLine(String.Format(Resources.RunnerNameAndVersion + "\n", versionLabel), FacadeCategory.Info);

            switch (facadeOptions.FilterCategoryMode)
            {
            case FacadeFilterCategoryMode.Include:
                testListener.WriteLine(String.Format("Included categories: {0}\n", CombineCategoryNameList(facadeOptions.FilterCategoryNames)), FacadeCategory.Info);
                break;

            case FacadeFilterCategoryMode.Exclude:
                testListener.WriteLine(String.Format("Excluded categories: {0}\n", CombineCategoryNameList(facadeOptions.FilterCategoryNames)), FacadeCategory.Info);
                break;
            }

            EnsureTestRunnerIsCreated();
            return(testRunner.Run(testListener, assemblyPath, cref, facadeOptions));
        }
예제 #6
0
        private FacadeTestRunState Run(IFacadeTestListener testListener, string assemblyPath, Filter <ITestDescriptor> filter, FacadeOptions facadeOptions)
        {
            if (testListener == null)
            {
                throw new ArgumentNullException(@"testListener");
            }
            if (assemblyPath == null)
            {
                throw new ArgumentNullException("assemblyPath");
            }
            if (facadeOptions == null)
            {
                throw new ArgumentNullException("facadeOptions");
            }

            ILogger logger = new FilteredLogger(new TDNetLogger(testListener), LogSeverity.Info);

            try
            {
                RuntimeAccessor.Instance.AddLogListener(logger);
                var filterRules = new List <FilterRule <ITestDescriptor> >();

                switch (facadeOptions.FilterCategoryMode)
                {
                case FacadeFilterCategoryMode.Disabled:
                    filterRules.Add(new FilterRule <ITestDescriptor>(FilterRuleType.Inclusion, filter));
                    break;

                case FacadeFilterCategoryMode.Include:
                    filterRules.Add(new FilterRule <ITestDescriptor>(FilterRuleType.Inclusion,
                                                                     new AndFilter <ITestDescriptor>(new[] { filter, ToCategoryFilter(facadeOptions.FilterCategoryNames) })));
                    break;

                case FacadeFilterCategoryMode.Exclude:
                    filterRules.Add(new FilterRule <ITestDescriptor>(FilterRuleType.Exclusion, ToCategoryFilter(facadeOptions.FilterCategoryNames)));
                    filterRules.Add(new FilterRule <ITestDescriptor>(FilterRuleType.Inclusion, filter));
                    break;
                }

                var filterSet = new FilterSet <ITestDescriptor>(filterRules);
                launcher.Logger = logger;
                launcher.ProgressMonitorProvider           = new LogProgressMonitorProvider(logger);
                launcher.TestExecutionOptions.FilterSet    = filterSet;
                launcher.TestProject.TestRunnerFactoryName = StandardTestRunnerFactoryNames.IsolatedAppDomain;
                launcher.TestProject.AddTestRunnerExtension(new TDNetExtension(testListener)); // This monitor will inform the user in real-time what's going on
                launcher.TestProject.TestPackage.AddFile(new FileInfo(assemblyPath));
                string assemblyDirectory = Path.GetDirectoryName(assemblyPath);
                launcher.TestProject.TestPackage.ApplicationBaseDirectory = new DirectoryInfo(assemblyDirectory);
                launcher.TestProject.TestPackage.WorkingDirectory         = new DirectoryInfo(assemblyDirectory);
                TestLauncherResult result          = RunLauncher(launcher);
                string             reportDirectory = GetReportDirectory(logger);

                if (reportDirectory != null)
                {
                    var reportFormatterOptions = new ReportFormatterOptions();
                    var preferenceManager      = (TDNetPreferenceManager)RuntimeAccessor.ServiceLocator.ResolveByComponentId("TDNetRunner.PreferenceManager");
                    var reportFormat           = preferenceManager.ReportSettings.DetermineReportFormat(result.Report);
                    result.GenerateReports(reportDirectory, Path.GetFileName(assemblyPath), ReportArchive.Normal,
                                           new[] { reportFormat }, reportFormatterOptions,
                                           RuntimeAccessor.ServiceLocator.Resolve <IReportManager>(), NullProgressMonitor.CreateInstance());

                    // This will generate a link to the generated report
                    if (result.ReportDocumentPaths.Count != 0)
                    {
                        Uri    rawUrl     = new Uri(result.ReportDocumentPaths[0]);
                        string displayUrl = "file:///" + rawUrl.LocalPath.Replace(" ", "%20").Replace(@"\", "/");

                        // TDNet just prints the link on its own but it's not always clear to users what it represents.
                        // testListener.TestResultsUrl(displayUrl);
                        testListener.WriteLine("\nTest Report: " + displayUrl, FacadeCategory.Info);
                    }
                }

                // Inform no tests run, if necessary.
                if (result.ResultCode == ResultCode.NoTests)
                {
                    InformNoTestsWereRun(testListener, Resources.MbUnitTestRunner_NoTestsFound);
                }
                else if (result.Statistics.TestCount == 0)
                {
                    InformNoTestsWereRun(testListener, null);
                }

                return(GetTestRunState(result));
            }
            finally
            {
                RuntimeAccessor.Instance.RemoveLogListener(logger);
            }
        }
 /// <summary>
 /// Inform the user that no tests were run and the reason for it. TD.NET displays
 /// a message like "0 Passed, 0 Failed, 0 Skipped" but it does it in the status bar,
 /// which may be harder to notice for the user. Be aware that this message will
 /// only be displayed when the user runs an individual test or fixture (TD.NET
 /// ignores the messages we send when it's running an entire assembly).
 /// </summary>
 /// <param name="testListener">An ITestListener object to write the message to.</param>
 /// <param name="reason">The reason no tests were run for.</param>
 private static void InformNoTestsWereRun(IFacadeTestListener testListener, string reason)
 {
     reason = String.IsNullOrEmpty(reason) ? String.Empty : " (" + reason + ")";
     string message = String.Format("** {0}{1} **", Resources.MbUnitTestRunner_NoTestsWereRun, reason);
     testListener.WriteLine(message, FacadeCategory.Warning);
 }
        private FacadeTestRunState Run(IFacadeTestListener testListener, string assemblyPath, Filter<ITestDescriptor> filter, FacadeOptions facadeOptions)
        {
            if (testListener == null)
                throw new ArgumentNullException(@"testListener");
            if (assemblyPath == null)
                throw new ArgumentNullException("assemblyPath");
            if (facadeOptions == null)
                throw new ArgumentNullException("facadeOptions");

            ILogger logger = new FilteredLogger(new TDNetLogger(testListener), LogSeverity.Info);

            try
            {
                RuntimeAccessor.Instance.AddLogListener(logger);
                var filterRules = new List<FilterRule<ITestDescriptor>>();

                switch (facadeOptions.FilterCategoryMode)
                {
                    case FacadeFilterCategoryMode.Disabled:
                        filterRules.Add(new FilterRule<ITestDescriptor>(FilterRuleType.Inclusion, filter));
                        break;

                    case FacadeFilterCategoryMode.Include:
                        filterRules.Add(new FilterRule<ITestDescriptor>(FilterRuleType.Inclusion,
                            new AndFilter<ITestDescriptor>(new[] { filter, ToCategoryFilter(facadeOptions.FilterCategoryNames) })));
                        break;

                    case FacadeFilterCategoryMode.Exclude:
                        filterRules.Add(new FilterRule<ITestDescriptor>(FilterRuleType.Exclusion, ToCategoryFilter(facadeOptions.FilterCategoryNames)));
                        filterRules.Add(new FilterRule<ITestDescriptor>(FilterRuleType.Inclusion, filter));
                        break;
                }

                var filterSet = new FilterSet<ITestDescriptor>(filterRules);
                launcher.Logger = logger;
                launcher.ProgressMonitorProvider = new LogProgressMonitorProvider(logger);
                launcher.TestExecutionOptions.FilterSet = filterSet;
                launcher.TestProject.TestRunnerFactoryName = StandardTestRunnerFactoryNames.IsolatedAppDomain;
                launcher.TestProject.AddTestRunnerExtension(new TDNetExtension(testListener)); // This monitor will inform the user in real-time what's going on
                launcher.TestProject.TestPackage.AddFile(new FileInfo(assemblyPath));
                string assemblyDirectory = Path.GetDirectoryName(assemblyPath);
                launcher.TestProject.TestPackage.ApplicationBaseDirectory = new DirectoryInfo(assemblyDirectory);
                launcher.TestProject.TestPackage.WorkingDirectory = new DirectoryInfo(assemblyDirectory);
                TestLauncherResult result = RunLauncher(launcher);
                string reportDirectory = GetReportDirectory(logger);

                if (reportDirectory != null)
                {
                    var reportFormatterOptions = new ReportFormatterOptions();
                    var preferenceManager = (TDNetPreferenceManager)RuntimeAccessor.ServiceLocator.ResolveByComponentId("TDNetRunner.PreferenceManager");
                    var reportFormat = preferenceManager.ReportSettings.DetermineReportFormat(result.Report);
                    result.GenerateReports(reportDirectory, Path.GetFileName(assemblyPath), ReportArchive.Normal,
                        new[] { reportFormat }, reportFormatterOptions,
                        RuntimeAccessor.ServiceLocator.Resolve<IReportManager>(), NullProgressMonitor.CreateInstance());

                    // This will generate a link to the generated report
                    if (result.ReportDocumentPaths.Count != 0)
                    {
                        Uri rawUrl = new Uri(result.ReportDocumentPaths[0]);
                        string displayUrl = "file:///" + rawUrl.LocalPath.Replace(" ", "%20").Replace(@"\", "/");

                        // TDNet just prints the link on its own but it's not always clear to users what it represents.
                        // testListener.TestResultsUrl(displayUrl);
                        testListener.WriteLine("\nTest Report: " + displayUrl, FacadeCategory.Info);
                    }
                }

                // Inform no tests run, if necessary.
                if (result.ResultCode == ResultCode.NoTests)
                {
                    InformNoTestsWereRun(testListener, Resources.MbUnitTestRunner_NoTestsFound);
                }
                else if (result.Statistics.TestCount == 0)
                {
                    InformNoTestsWereRun(testListener, null);
                }

                return GetTestRunState(result);
            }
            finally
            {
                RuntimeAccessor.Instance.RemoveLogListener(logger);
            }
        }