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 ListContentSupport() { IBoostTestRunner runner = A.Fake <IBoostTestRunner>(); string output = null; A.CallTo(() => runner.Capabilities).Returns(new BoostTestRunnerCapabilities { ListContent = true, Version = false }); A.CallTo(() => runner.Execute(A <BoostTestRunnerCommandLineArgs> ._, A <BoostTestRunnerSettings> ._, A <IProcessExecutionContext> ._)).Invokes((call) => { BoostTestRunnerCommandLineArgs args = (BoostTestRunnerCommandLineArgs)call.Arguments.First(); if ((args.ListContent.HasValue) && (args.ListContent.Value == ListContentFormat.DOT)) { output = TestHelper.CopyEmbeddedResourceToDirectory("BoostTestAdapterNunit.Resources.ListContentDOT.sample.8.list.content.gv", args.StandardErrorFile); } }).Returns(0); FakeBoostTestRunnerFactory factory = new FakeBoostTestRunnerFactory(runner); ListContentDiscoverer discoverer = new ListContentDiscoverer(factory, DummyVSProvider.Default); DefaultTestContext context = new DefaultTestContext(); DefaultTestCaseDiscoverySink sink = new DefaultTestCaseDiscoverySink(); discoverer.DiscoverTests(new[] { "a.exe", }, context, sink); // Ensure proper test runner execution Assert.That(factory.ProvisionedRunners.Count, Is.EqualTo(1)); foreach (IBoostTestRunner provisioned in factory.ProvisionedRunners.Select(provision => provision.Item3)) { A.CallTo(() => provisioned.Execute(A <BoostTestRunnerCommandLineArgs> ._, A <BoostTestRunnerSettings> ._, A <IProcessExecutionContext> ._)). WhenArgumentsMatch((arguments) => { BoostTestRunnerCommandLineArgs args = (BoostTestRunnerCommandLineArgs)arguments.First(); return((args.ListContent.HasValue) && (args.ListContent.Value == ListContentFormat.DOT) && (!string.IsNullOrEmpty(args.StandardErrorFile))); }). MustHaveHappened(); } // Ensure proper test discovery Assert.That(sink.Tests.Count, Is.EqualTo(8)); AssertLabelTrait(sink.Tests.FirstOrDefault((vstest) => (vstest.FullyQualifiedName == "test_2")), "l1"); AssertLabelTrait(sink.Tests.FirstOrDefault((vstest) => (vstest.FullyQualifiedName == "test_6")), "l1"); var test_8 = sink.Tests.FirstOrDefault((vstest) => (vstest.FullyQualifiedName == "test_8")); AssertLabelTrait(test_8, "l1"); AssertLabelTrait(test_8, "l2"); AssertLabelTrait(test_8, "l3 withaspace"); Assert.That(output, Is.Not.Null); // Ensure proper environment cleanup Assert.That(File.Exists(output), Is.False); }
/// <summary> /// Deserialises a BoostTestAdapterSettings instance from the provided XML content. /// </summary> /// <param name="settingsXml">The settings XML content</param> /// <returns>The deserialised BoostTestAdapterSettings</returns> private BoostTestAdapterSettings ParseXml(string settingsXml) { BoostTestAdapterSettingsProvider provider = new BoostTestAdapterSettingsProvider(); DefaultTestContext context = new DefaultTestContext(); context.RegisterSettingProvider(BoostTestAdapterSettings.XmlRootName, provider); context.LoadSettings(settingsXml); return(provider.Settings); }
/// <summary> /// Deserialises a BoostTestAdapterSettings instance from the provided embedded resource. /// </summary> /// <param name="path">Fully qualified path to a .runsettings Xml embedded resource</param> /// <returns>The deserialised BoostTestAdapterSettings</returns> private BoostTestAdapterSettings ParseEmbeddedResource(string path) { BoostTestAdapterSettingsProvider provider = new BoostTestAdapterSettingsProvider(); DefaultTestContext context = new DefaultTestContext(); context.RegisterSettingProvider(BoostTestAdapterSettings.XmlRootName, provider); context.LoadEmbeddedSettings(path); return(provider.Settings); }
/// <summary> /// Applies the discovery process over the provided DummySolution /// </summary> /// <param name="solution">The dummy solution on which to apply test discovery</param> /// <returns>The list of tests which were discovered from the dummy solution</returns> private IList <TestCase> DiscoverTests(DummySolution solution) { SourceCodeDiscoverer discoverer = new SourceCodeDiscoverer(solution.Provider); DefaultTestContext context = new DefaultTestContext(); DefaultTestCaseDiscoverySink discoverySink = new DefaultTestCaseDiscoverySink(); discoverer.DiscoverTests(new[] { solution.Source }, context, discoverySink); return(discoverySink.Tests.ToList()); }
public void DiscoverTestsUsingRunSettings() { using (DummySolution solution = new DummySolution(Source, new string[] { BoostUnitTestSampleRequiringUseOfFilters })) { DefaultTestContext context = new DefaultTestContext(); context.RegisterSettingProvider(BoostTestAdapterSettings.XmlRootName, new BoostTestAdapterSettingsProvider()); context.LoadEmbeddedSettings("BoostTestAdapterNunit.Resources.Settings.conditionalIncludesDisabled.runsettings"); IEnumerable <VSTestCase> vsTests = Discover(solution, context); Assert.That(vsTests.Count(), Is.EqualTo(9)); AssertBoostUnitTestSampleRequiringUseOfFilters(vsTests, solution); VSTestCase testConditional = AssertTestDetails(vsTests, QualifiedNameBuilder.FromString("BoostUnitTestShouldNotAppear3"), Source); AssertSourceDetails(testConditional, solution.SourceFileResourcePaths.First().Path, 47); } }
public void FailingExitCode() { IBoostTestRunner runner = A.Fake <IBoostTestRunner>(); A.CallTo(() => runner.ListContentSupported).Returns(true); A.CallTo(() => runner.VersionSupported).Returns(false); A.CallTo(() => runner.Execute(A <BoostTestRunnerCommandLineArgs> ._, A <BoostTestRunnerSettings> ._, A <IProcessExecutionContext> ._)).Returns(-1073741515); FakeBoostTestRunnerFactory factory = new FakeBoostTestRunnerFactory(runner); ListContentDiscoverer discoverer = new ListContentDiscoverer(factory, DummyVSProvider.Default); DefaultTestContext context = new DefaultTestContext(); DefaultTestCaseDiscoverySink sink = new DefaultTestCaseDiscoverySink(); discoverer.DiscoverTests(new[] { "missing-dll.exe", }, context, sink); // Ensure proper test discovery Assert.That(sink.Tests.Count, Is.EqualTo(0)); }
public void DiscoveryFileMapWithInvalidDiscovery() { using (var listing = TestHelper.CopyEmbeddedResourceToTempDirectory("BoostTestAdapterNunit.Resources.TestLists", "sample.test.list.xml")) using (var invalid_listing = TestHelper.CopyEmbeddedResourceToTempDirectory("BoostTestAdapterNunit.Resources.TestLists", "invalid.test.list.xml")) { ExternalBoostTestRunnerSettings settings = new ExternalBoostTestRunnerSettings { DiscoveryMethodType = DiscoveryMethodType.DiscoveryFileMap }; settings.DiscoveryFileMap["test_2.dll"] = invalid_listing.Path; settings.DiscoveryFileMap["test_1.dll"] = listing.Path; ExternalDiscoverer discoverer = new ExternalDiscoverer(settings, DummyVSProvider.Default); DefaultTestContext context = new DefaultTestContext(); ConsoleMessageLogger logger = new ConsoleMessageLogger(); DefaultTestCaseDiscoverySink sink = new DefaultTestCaseDiscoverySink(); const string mappedSource = "C:\\test_1.dll"; const string invalidSource = "C:\\test_2.dll"; discoverer.DiscoverTests(new string[] { mappedSource, invalidSource }, context, 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)); } }
public void VersionAnnotation() { IBoostTestRunner runner = A.Fake <IBoostTestRunner>(); A.CallTo(() => runner.Capabilities).Returns(new BoostTestRunnerCapabilities { ListContent = true, Version = true }); A.CallTo(() => runner.Execute(A <BoostTestRunnerCommandLineArgs> ._, A <BoostTestRunnerSettings> ._, A <IProcessExecutionContext> ._)).Invokes((call) => { BoostTestRunnerCommandLineArgs args = (BoostTestRunnerCommandLineArgs)call.Arguments.First(); // --list_content=DOT if ((args.ListContent.HasValue) && (args.ListContent.Value == ListContentFormat.DOT) && (!string.IsNullOrEmpty(args.StandardErrorFile))) { TestHelper.CopyEmbeddedResourceToDirectory("BoostTestAdapterNunit.Resources.ListContentDOT.sample.3.list.content.gv", args.StandardErrorFile); } // --version else if ((args.Version) && (!string.IsNullOrEmpty(args.StandardErrorFile))) { TestHelper.CopyEmbeddedResourceToDirectory("BoostTestAdapterNunit.Resources.Version.sample.version.stderr.log", args.StandardErrorFile); } }).Returns(0); FakeBoostTestRunnerFactory factory = new FakeBoostTestRunnerFactory(runner); ListContentDiscoverer discoverer = new ListContentDiscoverer(factory, DummyVSProvider.Default); DefaultTestContext context = new DefaultTestContext(); DefaultTestCaseDiscoverySink sink = new DefaultTestCaseDiscoverySink(); discoverer.DiscoverTests(new[] { "test.exe", }, context, sink); // Ensure proper test discovery Assert.That(sink.Tests.Count, Is.Not.EqualTo(0)); // Ensure that version property is available foreach (var test in sink.Tests) { var version = test.GetPropertyValue(VSTestModel.VersionProperty); Assert.That(version, Is.EqualTo("1.63.0")); } }