private static IBoostTestDiscoverer GetExternalTestDiscoverer(string source, ExternalBoostTestRunnerSettings settings)
        {
            Utility.Code.Require(settings, "settings");

            if (settings.ExtensionType == Path.GetExtension(source))
            {
                return new ExternalBoostTestDiscoverer(settings);
            }

            return null;
        }
        public void DiscoveryFileMapDiscovery()
        {
            string listing = TestHelper.CopyEmbeddedResourceToDirectory("BoostTestAdapterNunit.Resources.TestLists", "sample.test.list.xml", Path.GetTempPath());

            try
            {
                ExternalBoostTestRunnerSettings settings = new ExternalBoostTestRunnerSettings
                {
                    ExtensionType = ".dll",
                    DiscoveryMethodType = DiscoveryMethodType.DiscoveryFileMap
                };

                settings.DiscoveryFileMap["test_1.dll"] = listing;

                ExternalDiscoverer discoverer = new ExternalDiscoverer(settings);

                DefaultTestContext context = new DefaultTestContext();
                ConsoleMessageLogger logger = new ConsoleMessageLogger();
                DefaultTestCaseDiscoverySink sink = new DefaultTestCaseDiscoverySink();

                const string mappedSource = "C:\\test_1.dll";
                const string unmappedSource = "C:\\test_2.dll";

                discoverer.DiscoverTests(new string[] { mappedSource, unmappedSource }, context, logger, sink);

                // A total of 7 tests should be discovered as described in the Xml descriptor
                Assert.That(sink.Tests.Count(), Is.EqualTo(7));

                // All of the discovered tests should originate from C:\test_1.dll.
                // No mapping to C:\test_2.dll exist so no tests should be discovered from that source.
                Assert.That(sink.Tests.Count((test) => test.Source == mappedSource), Is.EqualTo(7));

                const string masterTestSuite = "Test runner test";

                AssertVSTestCaseProperties(sink.Tests, QualifiedNameBuilder.FromString(masterTestSuite, "test1"), mappedSource, new SourceFileInfo("test_runner_test.cpp", 26));
                AssertVSTestCaseProperties(sink.Tests, QualifiedNameBuilder.FromString(masterTestSuite, "test2"), mappedSource, new SourceFileInfo("test_runner_test.cpp", 35));
                AssertVSTestCaseProperties(sink.Tests, QualifiedNameBuilder.FromString(masterTestSuite, "SampleSuite/SampleNestedSuite/test3"), mappedSource, new SourceFileInfo("test_runner_test.cpp", 48));
                AssertVSTestCaseProperties(sink.Tests, QualifiedNameBuilder.FromString(masterTestSuite, "TemplateSuite/my_test<char>"), mappedSource, new SourceFileInfo("test_runner_test.cpp", 79));
                AssertVSTestCaseProperties(sink.Tests, QualifiedNameBuilder.FromString(masterTestSuite, "TemplateSuite/my_test<int>"), mappedSource, new SourceFileInfo("test_runner_test.cpp", 79));
                AssertVSTestCaseProperties(sink.Tests, QualifiedNameBuilder.FromString(masterTestSuite, "TemplateSuite/my_test<float>"), mappedSource, new SourceFileInfo("test_runner_test.cpp", 79));
                AssertVSTestCaseProperties(sink.Tests, QualifiedNameBuilder.FromString(masterTestSuite, "TemplateSuite/my_test<double>"), mappedSource, new SourceFileInfo("test_runner_test.cpp", 79));
            }
            finally
            {
                if (File.Exists(listing))
                {
                    File.Delete(listing);
                }
            }
        }
        public Type TestDiscovererProvisioning(string source, string externalExtension)
        {
            ExternalBoostTestRunnerSettings settings = null;

            if (!string.IsNullOrEmpty(externalExtension))
            {
                settings = new ExternalBoostTestRunnerSettings { ExtensionType = externalExtension };
            }

            BoostTestDiscovererFactoryOptions options = new BoostTestDiscovererFactoryOptions
            {
                ExternalTestRunnerSettings = settings
            };

            IBoostTestDiscoverer discoverer = this.Factory.GetTestDiscoverer(source, options);

            return (discoverer == null) ? null : discoverer.GetType();
        }
        public Type TestDiscovererProvisioning(string source, bool useListContent, string externalExtension)
        {
            ExternalBoostTestRunnerSettings externalSettings = null;
            
            if (!string.IsNullOrEmpty(externalExtension))
            {
                externalSettings = new ExternalBoostTestRunnerSettings { ExtensionType = externalExtension };
            }

            BoostTestAdapterSettings settings = new BoostTestAdapterSettings()
            {
                ExternalTestRunner = externalSettings,
                UseListContent = useListContent
            };

            IBoostTestDiscoverer discoverer = this.Factory.GetDiscoverer(source, settings);

            return (discoverer == null) ? null : discoverer.GetType();
        }
 /// <summary>
 /// Constructo
 /// </summary>
 /// <param name="source">The test source (dll/exe) for which this external test runner will execute</param>
 /// <param name="settings">External test runner configuration</param>
 public ExternalBoostTestRunner(string source, ExternalBoostTestRunnerSettings settings)
     : base(GetTestExecutable(settings, source))
 {
     this._source = source;
     this.Settings = settings;
 }
        /// <summary>
        /// Extracts and evaluates the test executable from the external Boost Test runner configuration.
        /// </summary>
        /// <param name="settings">The external Boost Test runner configuration</param>
        /// <param name="source">The test source module containing the tests to execute</param>
        /// <returns>The evaluated, test executable program string</returns>
        private static string GetTestExecutable(ExternalBoostTestRunnerSettings settings, string source)
        {
            Utility.Code.Require(settings, "settings");
            Utility.Code.Require(settings.ExecutionCommandLine, "settings.ExecutionCommandLine");

            return BuildEvaluator(source).Evaluate(settings.ExecutionCommandLine.FileName).Result;
        }
 public ExternalBoostTestDiscoverer(ExternalBoostTestRunnerSettings settings)
 {
     this.Settings = settings;
 }
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="settings">Settings for this instance of the discoverer.</param>
 /// <param name="provider">Visual Studio Instance provider</param>
 public ExternalDiscoverer(ExternalBoostTestRunnerSettings settings, IVisualStudioInstanceProvider provider)
 {
     Settings = settings;
     VSProvider = provider;
 }
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="settings">Settings for this instance of the discoverer.</param>
 public ExternalDiscoverer(ExternalBoostTestRunnerSettings settings)
     : this(settings, new DefaultVisualStudioInstanceProvider())
 {
 }
        public Type TestDiscovererProvisioning(string source, ListContentUse listContent, string externalExtension)
        {
            ExternalBoostTestRunnerSettings externalSettings = null;

            if (!string.IsNullOrEmpty(externalExtension))
            {
                externalSettings = new ExternalBoostTestRunnerSettings { ExtensionType = new Regex(externalExtension) };
            }

            BoostTestAdapterSettings settings = new BoostTestAdapterSettings()
            {
                ExternalTestRunner = externalSettings,
                ForceListContent = (listContent == ListContentUse.ForceUse)
            };

            IBoostTestDiscoverer discoverer = this.DiscovererFactory.GetDiscoverer(source, settings);

            return (discoverer == null) ? null : discoverer.GetType();
        }