Skip to content

Commit e5517ae

Browse files
committed
remove intermediate classes from deserialized report
1 parent 6212a3e commit e5517ae

File tree

13 files changed

+111
-146
lines changed

13 files changed

+111
-146
lines changed
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
using NUnit.Framework;
2+
using System.IO;
3+
using FineCodeCoverage.Engine.Cobertura;
4+
using System;
5+
using System.Linq;
6+
7+
namespace FineCodeCoverageTests
8+
{
9+
public class CoberturaDeserializer_Tests
10+
{
11+
[Test]
12+
public void Should_Deserialize_What_Is_Required()
13+
{
14+
var cobertura = @"<?xml version=""1.0"" encoding=""utf-8""?>
15+
<!DOCTYPE coverage SYSTEM ""http://cobertura.sourceforge.net/xml/coverage-04.dtd"">
16+
<coverage line-rate=""0.127074535991358"" branch-rate=""0.101282051282051"" lines-covered=""1294"" lines-valid=""10183"" branches-covered=""395"" branches-valid=""3900"" complexity=""5304"" version=""1"" timestamp=""1709634604"">
17+
<sources />
18+
<packages>
19+
<package name=""DemoOpenCover"" line-rate=""0.0271464646464646"" branch-rate=""0.5"" complexity=""537"">
20+
<classes>
21+
<class name="".LargeClass"" filename=""C:\Users\tonyh\source\repos\DemoOpenCover\DemoOpenCover\LargeClass.cs"" line-rate=""1"" branch-rate=""1"" complexity=""501"">
22+
<methods>
23+
<method name=""Method0"" signature=""()"" line-rate=""1"" branch-rate=""1"" complexity=""1"">
24+
<lines>
25+
<line number=""1"" hits=""1"" branch=""false"" />
26+
</lines>
27+
</method>
28+
</methods>
29+
<lines>
30+
<line number=""1"" hits=""1"" branch=""true"" />
31+
</lines>
32+
</class>
33+
</classes>
34+
</package>
35+
</packages>
36+
</coverage>
37+
";
38+
39+
string fileName = System.IO.Path.GetTempPath() + Guid.NewGuid().ToString() + ".xml";
40+
File.WriteAllText(fileName, cobertura);
41+
var report = new CoberturaDerializer().Deserialize(fileName);
42+
var package = report.Packages.Single();
43+
Assert.AreEqual("DemoOpenCover", package.Name);
44+
var packageClass = package.Classes.Single();
45+
Assert.AreEqual(".LargeClass", packageClass.Name);
46+
Assert.AreEqual(@"C:\Users\tonyh\source\repos\DemoOpenCover\DemoOpenCover\LargeClass.cs", packageClass.Filename);
47+
Assert.AreEqual(1, packageClass.LineRate);
48+
Assert.AreEqual(1, packageClass.BranchRate);
49+
Assert.AreEqual(501, packageClass.Complexity);
50+
var method = packageClass.Methods.Single();
51+
Assert.AreEqual("Method0", method.Name);
52+
Assert.AreEqual("()", method.Signature);
53+
Assert.AreEqual(1, method.LineRate);
54+
Assert.AreEqual(1, method.BranchRate);
55+
var line = method.Lines.Single();
56+
Assert.AreEqual(1, line.Number);
57+
Assert.AreEqual(1, line.Hits);
58+
line = packageClass.Lines.Single();
59+
Assert.AreEqual(1, line.Number);
60+
Assert.AreEqual(1, line.Hits);
61+
}
62+
}
63+
}

FineCodeCoverageTests/CoberturaUtil_Tests.cs

Lines changed: 19 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -42,31 +42,24 @@ public void Should_Populate_And_Sort_FileLineCoverage_From_Deserialized_Report()
4242
};
4343
var coverageReport = new CoverageReport
4444
{
45-
Packages = new Packages
45+
Packages = new List<Package>
4646
{
47-
Package = new List<Package>
47+
new Package
4848
{
49-
new Package
49+
Classes = new List<Class>
5050
{
51-
Classes = new Classes
51+
new Class
5252
{
53-
Class = new List<Class>
54-
{
55-
new Class
53+
Filename = "filename",
54+
55+
Lines = new List<Line>
5656
{
57-
Filename = "filename",
58-
Lines = new Lines
59-
{
60-
Line = new List<Line>
61-
{
62-
noHitsLine,
63-
partialHitsLine,
64-
coveredLine,
65-
noConditionCoverageLine
66-
}
67-
}
57+
noHitsLine,
58+
partialHitsLine,
59+
coveredLine,
60+
noConditionCoverageLine
6861
}
69-
}
62+
7063
}
7164
}
7265
}
@@ -110,13 +103,7 @@ public void Should_Update_FileLineCoverage_When_File_Renamed()
110103

111104
var coverageReport = new CoverageReport
112105
{
113-
Packages = new Packages
114-
{
115-
Package = new List<Package>
116-
{
117-
118-
}
119-
}
106+
Packages = new List<Package>()
120107
};
121108
autoMoqer.Setup<ICoberturaDeserializer, CoverageReport>(x => x.Deserialize(It.IsAny<string>())).Returns(coverageReport);
122109
var mockFileLineCoverage = new Mock<IFileLineCoverage>();
@@ -157,10 +144,7 @@ private void SourceFilesTest(
157144

158145
var coverageReport = new CoverageReport
159146
{
160-
Packages = new Packages
161-
{
162-
Package = packages
163-
}
147+
Packages = packages
164148
};
165149
autoMoqer.Setup<ICoberturaDeserializer, CoverageReport>(x => x.Deserialize(It.IsAny<string>())).Returns(coverageReport);
166150

@@ -179,13 +163,7 @@ public void Should_Return_Empty_Source_Files_If_Assembly_Not_In_The_CoverageRepo
179163
new Package
180164
{
181165
Name = "otherassembly",
182-
Classes = new Classes
183-
{
184-
Class = new List<Class>
185-
{
186-
187-
}
188-
}
166+
Classes = new List<Class>()
189167
}
190168
};
191169

@@ -199,39 +177,27 @@ private void AssemblyInReportTest(Action<string[]> sourceFilesAssertion, int fil
199177
new Package
200178
{
201179
Name = "assembly",
202-
Classes = new Classes
203-
{
204-
Class = new List<Class>
180+
Classes = new List<Class>
205181
{
206182
new Class
207183
{
208184
Name = "qcn",
209185
Filename = "file1",
210-
Lines = new Lines
211-
{
212-
Line = new List<Line>{ }
213-
}
186+
Lines = new List<Line>{ }
214187
},
215188
new Class
216189
{
217190
Name = "qcn",
218191
Filename = "file2",
219-
Lines = new Lines
220-
{
221-
Line = new List<Line>{ }
222-
}
192+
Lines = new List<Line>{ }
223193
},
224194
new Class
225195
{
226196
Name = "other",
227197
Filename = "file3",
228-
Lines = new Lines
229-
{
230-
Line = new List<Line>{ }
231-
}
198+
Lines = new List<Line>{ }
232199
}
233200
}
234-
}
235201
}
236202
};
237203

FineCodeCoverageTests/FineCodeCoverageTests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
<Reference Include="WindowsBase" />
6161
</ItemGroup>
6262
<ItemGroup>
63+
<Compile Include="CoberturaDeserializer_Tests.cs" />
6364
<Compile Include="CoberturaUtil_Tests.cs" />
6465
<Compile Include="CoverageToolOutput_Tests\AppOptionsCoverageToolOutputFolderSolutionProvider_Tests.cs" />
6566
<Compile Include="CoverageToolOutput_Tests\CoverageToolOutputFolderFromSolutionProvider_Tests.cs" />

SharedProject/Core/Cobertura/CoberturaUtil.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -71,11 +71,11 @@ public IFileLineCoverage ProcessCoberturaXml(string xmlFile)
7171

7272
private void AddThenSort()
7373
{
74-
foreach (var package in coverageReport.Packages.Package)
74+
foreach (var package in coverageReport.Packages)
7575
{
76-
foreach (var classs in package.Classes.Class)
76+
foreach (var classs in package.Classes)
7777
{
78-
fileLineCoverage.Add(classs.Filename, classs.Lines.Line.Select(l => new FileLine(l)).Cast<ILine>());
78+
fileLineCoverage.Add(classs.Filename, classs.Lines.Select(l => new FileLine(l)).Cast<ILine>());
7979
}
8080
}
8181

@@ -84,7 +84,7 @@ private void AddThenSort()
8484

8585
private Package GetPackage(string assemblyName)
8686
{
87-
return coverageReport.Packages.Package.SingleOrDefault(package => package.Name.Equals(assemblyName));
87+
return coverageReport.Packages.SingleOrDefault(package => package.Name.Equals(assemblyName));
8888
}
8989

9090
public string[] GetSourceFiles(string assemblyName, string qualifiedClassName, int file)
@@ -104,7 +104,7 @@ private static string[] GetSourceFilesFromPackage(Package package, string qualif
104104

105105
private static IEnumerable<Class> GetClasses(Package package, string qualifiedClassName)
106106
{
107-
return package.Classes.Class.Where(x => x.Name.Equals(qualifiedClassName));
107+
return package.Classes.Where(x => x.Name.Equals(qualifiedClassName));
108108
}
109109

110110
private static string[] GetSourceFiles(IEnumerable<Class> classes, int file)

SharedProject/Core/Cobertura/Report/Class.cs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
1-
using System.Diagnostics.CodeAnalysis;
1+
using System.Collections.Generic;
2+
using System.Diagnostics.CodeAnalysis;
23
using System.Xml.Serialization;
34

4-
// Generated from cobertura XML schema
5-
65
namespace FineCodeCoverage.Engine.Cobertura
76
{
87
[XmlRoot(ElementName = "class")]
98
[ExcludeFromCodeCoverage]
109
public class Class
1110
{
12-
[XmlElement(ElementName = "methods")]
13-
public Methods Methods { get; set; }
11+
[XmlArray(ElementName = "methods")]
12+
[XmlArrayItem(ElementName = "method")]
13+
public List<Method> Methods { get; set; }
1414

15-
[XmlElement(ElementName = "lines")]
16-
public Lines Lines { get; set; }
15+
[XmlArray(ElementName = "lines")]
16+
[XmlArrayItem(ElementName = "line")]
17+
public List<Line> Lines { get; set; }
1718

1819
[XmlAttribute(AttributeName = "name")]
1920
public string Name { get; set; }

SharedProject/Core/Cobertura/Report/Classes.cs

Lines changed: 0 additions & 16 deletions
This file was deleted.

SharedProject/Core/Cobertura/Report/CoverageReport.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
using System.Diagnostics.CodeAnalysis;
1+
using System.Collections.Generic;
2+
using System.Diagnostics.CodeAnalysis;
23
using System.Xml.Serialization;
34

4-
// Generated from cobertura XML schema
5-
65
namespace FineCodeCoverage.Engine.Cobertura
76
{
87
[XmlRoot(ElementName = "coverage")]
@@ -12,8 +11,9 @@ public class CoverageReport
1211
[XmlElement(ElementName = "sources")]
1312
public Sources Sources { get; set; }
1413

15-
[XmlElement(ElementName = "packages")]
16-
public Packages Packages { get; set; }
14+
[XmlArray(ElementName = "packages")]
15+
[XmlArrayItem(ElementName = "package")]
16+
public List<Package> Packages { get; set; }
1717

1818
[XmlAttribute(AttributeName = "line-rate")]
1919
public float LineRate { get; set; }

SharedProject/Core/Cobertura/Report/Lines.cs

Lines changed: 0 additions & 16 deletions
This file was deleted.

SharedProject/Core/Cobertura/Report/Method.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System.Diagnostics.CodeAnalysis;
1+
using System.Collections.Generic;
2+
using System.Diagnostics.CodeAnalysis;
23
using System.Xml.Serialization;
34

45
// Generated from cobertura XML schema
@@ -9,8 +10,9 @@ namespace FineCodeCoverage.Engine.Cobertura
910
[ExcludeFromCodeCoverage]
1011
public class Method
1112
{
12-
[XmlElement(ElementName = "lines")]
13-
public Lines Lines { get; set; }
13+
[XmlArray(ElementName = "lines")]
14+
[XmlArrayItem(ElementName = "line")]
15+
public List<Line> Lines { get; set; }
1416

1517
[XmlAttribute(AttributeName = "name")]
1618
public string Name { get; set; }

SharedProject/Core/Cobertura/Report/Methods.cs

Lines changed: 0 additions & 16 deletions
This file was deleted.

0 commit comments

Comments
 (0)