public void Sink_ShouldContainTestForAllSupportedTypeOfSources()
        {
            var sources = new[]
            {
                "ListContentSupport" + BoostTestDiscoverer.ExeExtension,
                "DllProject1" + BoostTestDiscoverer.DllExtension,
                "DllProject2" + BoostTestDiscoverer.DllExtension,
            };

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

            context.RegisterSettingProvider(BoostTestAdapterSettings.XmlRootName, new BoostTestAdapterSettingsProvider());
            context.LoadEmbeddedSettings("BoostTestAdapterNunit.Resources.Settings.externalTestRunner.runsettings");

            var boostTestDiscovererFactory = new StubBoostTestDiscovererFactory();

            var boostTestDiscoverer = new BoostTestDiscoverer(boostTestDiscovererFactory);
            boostTestDiscoverer.DiscoverTests(sources, context, logger, sink);

            Assert.That(sink.Tests, Is.Not.Empty);

            // tests are found in the using the fake debughelper
            Assert.That(sink.Tests.Count(x => x.Source == "ListContentSupport" + BoostTestDiscoverer.ExeExtension), Is.EqualTo(8));

            // the external runner does NOT support the two dll projects
            Assert.That(sink.Tests.Any(x => x.Source == "DllProject1" + BoostTestDiscoverer.DllExtension), Is.False);
            Assert.That(sink.Tests.Any(x => x.Source == "DllProject2" + BoostTestDiscoverer.DllExtension), Is.False);
        }
        public void CorrectBoostTestDiscovererDispatching()
        {
            var bootTestDiscovererFactory = A.Fake<IBoostTestDiscovererFactory>();
            var boostDllTestDiscoverer = A.Fake<IBoostTestDiscoverer>();
            var boostExeTestDiscoverer = A.Fake<IBoostTestDiscoverer>();
            var defaultTestContext = new DefaultTestContext();
            var consoleMessageLogger = new ConsoleMessageLogger();
            var defaultTestCaseDiscoverySink = new DefaultTestCaseDiscoverySink();

            ITestDiscoverer boostTestDiscoverer = new BoostTestDiscoverer(bootTestDiscovererFactory);

            var projects = new string[]
            {
                "project1" + BoostTestDiscoverer.DllExtension,
                "project2" + BoostTestDiscoverer.ExeExtension,
                "project3" + BoostTestDiscoverer.ExeExtension,
                "project4" + BoostTestDiscoverer.DllExtension,
                "project5" + BoostTestDiscoverer.DllExtension,
            };

            var dllProjectsExpected = new string[]
            {
                "project1" + BoostTestDiscoverer.DllExtension,
                "project4" + BoostTestDiscoverer.DllExtension,
                "project5" + BoostTestDiscoverer.DllExtension,
            };

            var exeProjectsExpected = new string[]
            {
                "project2" + BoostTestDiscoverer.ExeExtension,
                "project3" + BoostTestDiscoverer.ExeExtension,
            };

            IEnumerable<string> dllProjectsActual = null;
            IEnumerable<string> exeProjectsActual = null;

            A.CallTo(() => bootTestDiscovererFactory.GetTestDiscoverer(BoostTestDiscoverer.DllExtension, A<BoostTestDiscovererFactoryOptions>.Ignored))
                .Returns(boostDllTestDiscoverer);
            A.CallTo(() => bootTestDiscovererFactory.GetTestDiscoverer(BoostTestDiscoverer.ExeExtension, A<BoostTestDiscovererFactoryOptions>.Ignored))
                .Returns(boostExeTestDiscoverer);

            A.CallTo(
                    () =>
                        boostDllTestDiscoverer.DiscoverTests(A<IEnumerable<string>>.Ignored, defaultTestContext,
                            consoleMessageLogger, defaultTestCaseDiscoverySink))
                    .Invokes(call => dllProjectsActual = call.GetArgument<IEnumerable<string>>(0));

            A.CallTo(
                    () =>
                        boostExeTestDiscoverer.DiscoverTests(A<IEnumerable<string>>.Ignored, defaultTestContext,
                            consoleMessageLogger, defaultTestCaseDiscoverySink))
                    .Invokes(call => exeProjectsActual = call.GetArgument<IEnumerable<string>>(0));

            boostTestDiscoverer.DiscoverTests(projects, defaultTestContext, consoleMessageLogger, defaultTestCaseDiscoverySink);

            Assert.AreEqual(dllProjectsExpected, dllProjectsActual);
            Assert.AreEqual(exeProjectsExpected, exeProjectsActual);
        }