|
1 | 1 | using FineCodeCoverage.Engine.Model;
|
2 | 2 | using FineCodeCoverage.Engine.OpenCover;
|
3 | 3 | using FineCodeCoverage.Options;
|
| 4 | +using Microsoft.VisualStudio.Experimentation; |
4 | 5 | using Moq;
|
5 | 6 | using NUnit.Framework;
|
| 7 | +using System; |
6 | 8 | using System.Collections.Generic;
|
7 | 9 | using System.Linq;
|
8 | 10 |
|
@@ -95,16 +97,62 @@ public void Should_Safely_Include_The_TestDLLFile_In_The_TargetArgs()
|
95 | 97 | }
|
96 | 98 |
|
97 | 99 | [Test]
|
98 |
| - public void Should_Include_The_Test_Assembly_In_The_Filter_When_AppOptions_IncludeTestAssembly() |
| 100 | + public void Should_Include_The_Test_Assembly_In_The_Filter_When_AppOptions_IncludeTestAssembly_And_Required() |
99 | 101 | {
|
100 | 102 | var openCoverExeArgumentsProvider = new OpenCoverExeArgumentsProvider();
|
101 | 103 | var mockCoverageProject = SafeMockCoverageProject();
|
102 | 104 | mockCoverageProject.SetupGet(coverageProject => coverageProject.Settings.IncludeTestAssembly).Returns(true);
|
| 105 | + mockCoverageProject.SetupGet(coverageProject => coverageProject.Settings.Include).Returns(new string[] { "[anassembly]*"}); |
103 | 106 | mockCoverageProject.SetupGet(coverageProject => coverageProject.ProjectName).Returns("TheTestName");
|
104 | 107 |
|
105 | 108 | var arguments = openCoverExeArgumentsProvider.Provide(mockCoverageProject.Object, "");
|
106 | 109 |
|
107 |
| - AssertHasEscapedSetting(arguments, "-filter:+[TheTestName]*"); |
| 110 | + var filters = GetFilters(arguments); |
| 111 | + Assert.That(filters, Is.EquivalentTo(new string[] { "+[TheTestName]*", "+[anassembly]*" })); |
| 112 | + } |
| 113 | + |
| 114 | + [Test] |
| 115 | + public void Should_Not_Include_The_Test_Assembly_In_The_Filter_When_AppOptions_IncludeTestAssembly_And_No_Other_Includes() |
| 116 | + { |
| 117 | + var openCoverExeArgumentsProvider = new OpenCoverExeArgumentsProvider(); |
| 118 | + var mockCoverageProject = SafeMockCoverageProject(); |
| 119 | + mockCoverageProject.SetupGet(coverageProject => coverageProject.Settings.IncludeTestAssembly).Returns(true); |
| 120 | + mockCoverageProject.SetupGet(coverageProject => coverageProject.ProjectName).Returns("TheTestName"); |
| 121 | + |
| 122 | + var arguments = openCoverExeArgumentsProvider.Provide(mockCoverageProject.Object, ""); |
| 123 | + |
| 124 | + var filters = GetFilters(arguments); |
| 125 | + Assert.IsEmpty(GetFilters(arguments)); |
| 126 | + } |
| 127 | + |
| 128 | + [Test] |
| 129 | + public void Should_Not_Include_The_Test_Assembly_In_The_Filter_When_AppOptions_IncludeTestAssembly_And_Explicitly_Excluded() |
| 130 | + { |
| 131 | + var openCoverExeArgumentsProvider = new OpenCoverExeArgumentsProvider(); |
| 132 | + var mockCoverageProject = SafeMockCoverageProject(); |
| 133 | + mockCoverageProject.SetupGet(coverageProject => coverageProject.Settings.IncludeTestAssembly).Returns(true); |
| 134 | + mockCoverageProject.SetupGet(coverageProject => coverageProject.Settings.Include).Returns(new string[] { "[anassembly]*" }); |
| 135 | + mockCoverageProject.SetupGet(coverageProject => coverageProject.Settings.Exclude).Returns(new string[] { "[TheTestName]*" }); |
| 136 | + mockCoverageProject.SetupGet(coverageProject => coverageProject.ProjectName).Returns("TheTestName"); |
| 137 | + |
| 138 | + var arguments = openCoverExeArgumentsProvider.Provide(mockCoverageProject.Object, ""); |
| 139 | + var filters = GetFilters(arguments); |
| 140 | + Assert.That(filters, Is.EquivalentTo(new string[] { "+[anassembly]*", "-[TheTestName]*" })); |
| 141 | + } |
| 142 | + |
| 143 | + private IEnumerable<string> GetFilters(IEnumerable<string> arguments) |
| 144 | + { |
| 145 | + var filterMatch = "-filter:"; |
| 146 | + var filter = arguments.FirstOrDefault(arg => arg.StartsWith($@"""{filterMatch}")); |
| 147 | + if (filter == null) |
| 148 | + { |
| 149 | + return Enumerable.Empty<string>(); |
| 150 | + } |
| 151 | + if (!filter.EndsWith("\"")) |
| 152 | + { |
| 153 | + throw new Exception("filter should be escaped"); |
| 154 | + } |
| 155 | + return filter.Replace("\"", "").Substring(filterMatch.Length).Split(' '); |
108 | 156 | }
|
109 | 157 |
|
110 | 158 | [Test]
|
|
0 commit comments