@@ -19,18 +19,17 @@ namespace Palmmedia.ReportGenerator.Core.Test.Parser
19
19
[ Collection ( "FileManager" ) ]
20
20
public class CoberturaParserTest
21
21
{
22
- private static readonly string FilePath1 = Path . Combine ( FileManager . GetJavaReportDirectory ( ) , "Cobertura2.1.1.xml" ) ;
22
+ private static readonly string FilePathJavaReport = Path . Combine ( FileManager . GetJavaReportDirectory ( ) , "Cobertura2.1.1.xml" ) ;
23
+ private static readonly string FilePathCSharpReport = Path . Combine ( FileManager . GetCSharpReportDirectory ( ) , "Cobertura_coverlet.xml" ) ;
23
24
24
- private readonly ParserResult parserResult ;
25
+ private readonly ParserResult javaParserResult ;
26
+ private readonly ParserResult csharpParserResult ;
25
27
26
28
public CoberturaParserTest ( )
27
29
{
28
- var filterMock = new Mock < IFilter > ( ) ;
29
- filterMock . Setup ( f => f . IsElementIncludedInReport ( It . IsAny < string > ( ) ) ) . Returns ( true ) ;
30
+ this . javaParserResult = ParseReport ( FilePathJavaReport ) ;
30
31
31
- var report = XDocument . Load ( FilePath1 ) ;
32
- new CoberturaReportPreprocessor ( ) . Execute ( report ) ;
33
- this . parserResult = new CoberturaParser ( filterMock . Object , filterMock . Object , filterMock . Object ) . Parse ( report . Root ) ;
32
+ this . csharpParserResult = ParseReport ( FilePathCSharpReport ) ;
34
33
}
35
34
36
35
/// <summary>
@@ -39,7 +38,7 @@ public CoberturaParserTest()
39
38
[ Fact ]
40
39
public void SupportsBranchCoverage ( )
41
40
{
42
- Assert . True ( this . parserResult . SupportsBranchCoverage ) ;
41
+ Assert . True ( this . javaParserResult . SupportsBranchCoverage ) ;
43
42
}
44
43
45
44
/// <summary>
@@ -48,7 +47,7 @@ public void SupportsBranchCoverage()
48
47
[ Fact ]
49
48
public void NumberOfLineVisitsTest ( )
50
49
{
51
- var fileAnalysis = GetFileAnalysis ( this . parserResult . Assemblies , "test.TestClass" , "C:\\ temp\\ test\\ TestClass.java" ) ;
50
+ var fileAnalysis = GetFileAnalysis ( this . javaParserResult . Assemblies , "test.TestClass" , "C:\\ temp\\ test\\ TestClass.java" ) ;
52
51
Assert . Equal ( 1 , fileAnalysis . Lines . Single ( l => l . LineNumber == 15 ) . LineVisits ) ;
53
52
Assert . Equal ( 1 , fileAnalysis . Lines . Single ( l => l . LineNumber == 17 ) . LineVisits ) ;
54
53
Assert . Equal ( 0 , fileAnalysis . Lines . Single ( l => l . LineNumber == 20 ) . LineVisits ) ;
@@ -61,7 +60,7 @@ public void NumberOfLineVisitsTest()
61
60
[ Fact ]
62
61
public void LineVisitStatusTest ( )
63
62
{
64
- var fileAnalysis = GetFileAnalysis ( this . parserResult . Assemblies , "test.TestClass" , "C:\\ temp\\ test\\ TestClass.java" ) ;
63
+ var fileAnalysis = GetFileAnalysis ( this . javaParserResult . Assemblies , "test.TestClass" , "C:\\ temp\\ test\\ TestClass.java" ) ;
65
64
66
65
var line = fileAnalysis . Lines . Single ( l => l . LineNumber == 1 ) ;
67
66
Assert . Equal ( LineVisitStatus . NotCoverable , line . LineVisitStatus ) ;
@@ -82,7 +81,7 @@ public void LineVisitStatusTest()
82
81
[ Fact ]
83
82
public void NumberOfFilesTest ( )
84
83
{
85
- Assert . Equal ( 7 , this . parserResult . Assemblies . SelectMany ( a => a . Classes ) . SelectMany ( a => a . Files ) . Distinct ( ) . Count ( ) ) ;
84
+ Assert . Equal ( 7 , this . javaParserResult . Assemblies . SelectMany ( a => a . Classes ) . SelectMany ( a => a . Files ) . Distinct ( ) . Count ( ) ) ;
86
85
}
87
86
88
87
/// <summary>
@@ -91,8 +90,8 @@ public void NumberOfFilesTest()
91
90
[ Fact ]
92
91
public void FilesOfClassTest ( )
93
92
{
94
- Assert . Single ( this . parserResult . Assemblies . Single ( a => a . Name == "test" ) . Classes . Single ( c => c . Name == "test.TestClass" ) . Files ) ;
95
- Assert . Single ( this . parserResult . Assemblies . Single ( a => a . Name == "test" ) . Classes . Single ( c => c . Name == "test.GenericClass" ) . Files ) ;
93
+ Assert . Single ( this . javaParserResult . Assemblies . Single ( a => a . Name == "test" ) . Classes . Single ( c => c . Name == "test.TestClass" ) . Files ) ;
94
+ Assert . Single ( this . javaParserResult . Assemblies . Single ( a => a . Name == "test" ) . Classes . Single ( c => c . Name == "test.GenericClass" ) . Files ) ;
96
95
}
97
96
98
97
/// <summary>
@@ -101,7 +100,7 @@ public void FilesOfClassTest()
101
100
[ Fact ]
102
101
public void ClassesInAssemblyTest ( )
103
102
{
104
- Assert . Equal ( 7 , this . parserResult . Assemblies . SelectMany ( a => a . Classes ) . Count ( ) ) ;
103
+ Assert . Equal ( 7 , this . javaParserResult . Assemblies . SelectMany ( a => a . Classes ) . Count ( ) ) ;
105
104
}
106
105
107
106
/// <summary>
@@ -110,7 +109,7 @@ public void ClassesInAssemblyTest()
110
109
[ Fact ]
111
110
public void AssembliesTest ( )
112
111
{
113
- Assert . Equal ( 2 , this . parserResult . Assemblies . Count ) ;
112
+ Assert . Equal ( 2 , this . javaParserResult . Assemblies . Count ) ;
114
113
}
115
114
116
115
/// <summary>
@@ -119,7 +118,7 @@ public void AssembliesTest()
119
118
[ Fact ]
120
119
public void GetCoverableLinesOfClassTest ( )
121
120
{
122
- Assert . Equal ( 3 , this . parserResult . Assemblies . Single ( a => a . Name == "test" ) . Classes . Single ( c => c . Name == "test.AbstractClass" ) . CoverableLines ) ;
121
+ Assert . Equal ( 3 , this . javaParserResult . Assemblies . Single ( a => a . Name == "test" ) . Classes . Single ( c => c . Name == "test.AbstractClass" ) . CoverableLines ) ;
123
122
}
124
123
125
124
/// <summary>
@@ -128,18 +127,73 @@ public void GetCoverableLinesOfClassTest()
128
127
[ Fact ]
129
128
public void MethodMetricsTest ( )
130
129
{
131
- var metrics = this . parserResult . Assemblies . Single ( a => a . Name == "test" ) . Classes . Single ( c => c . Name == "test.TestClass" ) . Files . Single ( f => f . Path == "C:\\ temp\\ test\\ TestClass.java" ) . MethodMetrics ;
130
+ var metrics = this . javaParserResult . Assemblies . Single ( a => a . Name == "test" ) . Classes . Single ( c => c . Name == "test.TestClass" ) . Files . Single ( f => f . Path == "C:\\ temp\\ test\\ TestClass.java" ) . MethodMetrics . ToArray ( ) ;
132
131
133
132
Assert . Equal ( 4 , metrics . Count ( ) ) ;
134
- Assert . Equal ( "<init>()V" , metrics . First ( ) . FullName ) ;
135
- Assert . Equal ( 3 , metrics . First ( ) . Metrics . Count ( ) ) ;
136
-
137
- Assert . Equal ( "Cyclomatic complexity" , metrics . First ( ) . Metrics . ElementAt ( 0 ) . Name ) ;
138
- Assert . Equal ( 0 , metrics . First ( ) . Metrics . ElementAt ( 0 ) . Value ) ;
139
- Assert . Equal ( "Line coverage" , metrics . First ( ) . Metrics . ElementAt ( 1 ) . Name ) ;
140
- Assert . Equal ( 100.0M , metrics . First ( ) . Metrics . ElementAt ( 1 ) . Value ) ;
141
- Assert . Equal ( "Branch coverage" , metrics . First ( ) . Metrics . ElementAt ( 2 ) . Name ) ;
142
- Assert . Equal ( 100.0M , metrics . First ( ) . Metrics . ElementAt ( 2 ) . Value ) ;
133
+
134
+ var initMethodMetric = metrics . First ( ) ;
135
+ Assert . Equal ( "<init>()V" , initMethodMetric . FullName ) ;
136
+ Assert . Equal ( 4 , initMethodMetric . Metrics . Count ( ) ) ;
137
+
138
+ var complexityMetric = initMethodMetric . Metrics . Single ( m => m . MetricType == MetricType . CodeQuality && m . Abbreviation == "cc" ) ;
139
+ Assert . Equal ( "Cyclomatic complexity" , complexityMetric . Name ) ;
140
+ Assert . Equal ( 0 , complexityMetric . Value ) ;
141
+
142
+ var lineCoverageMetric = initMethodMetric . Metrics . Single ( m => m . MetricType == MetricType . CoveragePercentual && m . Abbreviation == "cov" ) ;
143
+ Assert . Equal ( "Line coverage" , lineCoverageMetric . Name ) ;
144
+ Assert . Equal ( 100.0M , lineCoverageMetric . Value ) ;
145
+
146
+ var branchCoverageMetric = initMethodMetric . Metrics . Single ( m => m . MetricType == MetricType . CoveragePercentual && m . Abbreviation == "bcov" ) ;
147
+ Assert . Equal ( "Branch coverage" , branchCoverageMetric . Name ) ;
148
+ Assert . Equal ( 100.0M , branchCoverageMetric . Value ) ;
149
+
150
+ var crapScoreMetric = initMethodMetric . Metrics . Single ( m => m . MetricType == MetricType . CodeQuality && m . Abbreviation == "crp" ) ;
151
+ Assert . Equal ( "Crap Score" , crapScoreMetric . Name ) ;
152
+ Assert . Equal ( 0M , crapScoreMetric . Value ) ;
153
+ }
154
+
155
+ /// <summary>
156
+ /// A test for MethodMetrics
157
+ /// </summary>
158
+ [ Theory ]
159
+ [ InlineData ( "Test" , "Test.AbstractClass" , "C:\\ temp\\ AbstractClass.cs" , ".ctor()" , 1 , 1 , 100 , 100 , 1 ) ]
160
+ [ InlineData ( "Test" , "Test.AbstractClass_SampleImpl1" , "C:\\ temp\\ AbstractClass.cs" , "Method1()" , 3 , 1 , 0 , 100 , 2 ) ]
161
+ [ InlineData ( "Test" , "Test.PartialClass" , "C:\\ temp\\ PartialClass.cs" , "set_SomeProperty(System.Int32)" , 4 , 2 , 66.66 , 50 , 2.15 ) ]
162
+ [ InlineData ( "Test" , "Test.Program" , "C:\\ temp\\ Program.cs" , "Main(System.String[])" , 4 , 1 , 89.65 , 100 , 1.00 ) ]
163
+ [ InlineData ( "Test" , "Test.TestClass" , "C:\\ temp\\ TestClass.cs" , "SampleFunction()" , 5 , 4 , 80 , 50 , 4.13 ) ]
164
+ public void MethodMetricsTest_2 ( string assemblyName , string className , string filePath , string methodName , int expectedMethodMetrics , double expectedComplexity , double expectedLineCoverage , double expectedBranchCoverage , double expectedCrapScore )
165
+ {
166
+ var methodMetrics = csharpParserResult
167
+ . Assemblies . Single ( a => a . Name == assemblyName )
168
+ . Classes . Single ( c => c . Name == className )
169
+ . Files . Single ( f => f . Path == filePath )
170
+ . MethodMetrics . ToArray ( ) ;
171
+
172
+ Assert . Equal ( expectedMethodMetrics , methodMetrics . Length ) ;
173
+
174
+ var methodMetric = methodMetrics . First ( m => m . FullName == methodName ) ;
175
+ Assert . Equal ( methodName , methodMetric . FullName ) ;
176
+ Assert . Equal ( 4 , methodMetric . Metrics . Count ( ) ) ;
177
+
178
+ var complexityMetric = methodMetric . Metrics . Single ( m => m . MetricType == MetricType . CodeQuality && m . Abbreviation == "cc" ) ;
179
+ Assert . Equal ( "Cyclomatic complexity" , complexityMetric . Name ) ;
180
+ Assert . True ( complexityMetric . Value . HasValue ) ;
181
+ Assert . Equal ( ( decimal ) expectedComplexity , complexityMetric . Value ) ;
182
+
183
+ var lineCoverageMetric = methodMetric . Metrics . Single ( m => m . MetricType == MetricType . CoveragePercentual && m . Abbreviation == "cov" ) ;
184
+ Assert . Equal ( "Line coverage" , lineCoverageMetric . Name ) ;
185
+ Assert . True ( lineCoverageMetric . Value . HasValue ) ;
186
+ Assert . Equal ( ( decimal ) expectedLineCoverage , lineCoverageMetric . Value ) ;
187
+
188
+ var branchCoverageMetric = methodMetric . Metrics . Single ( m => m . MetricType == MetricType . CoveragePercentual && m . Abbreviation == "bcov" ) ;
189
+ Assert . Equal ( "Branch coverage" , branchCoverageMetric . Name ) ;
190
+ Assert . True ( branchCoverageMetric . Value . HasValue ) ;
191
+ Assert . Equal ( ( decimal ) expectedBranchCoverage , branchCoverageMetric . Value ) ;
192
+
193
+ var crapScoreMetric = methodMetric . Metrics . Single ( m => m . MetricType == MetricType . CodeQuality && m . Abbreviation == "crp" ) ;
194
+ Assert . Equal ( "Crap Score" , crapScoreMetric . Name ) ;
195
+ Assert . True ( crapScoreMetric . Value . HasValue ) ;
196
+ Assert . Equal ( ( decimal ) expectedCrapScore , crapScoreMetric . Value ) ;
143
197
}
144
198
145
199
/// <summary>
@@ -148,7 +202,7 @@ public void MethodMetricsTest()
148
202
[ Fact ]
149
203
public void CodeElementsTest ( )
150
204
{
151
- var codeElements = GetFile ( this . parserResult . Assemblies , "test.TestClass" , "C:\\ temp\\ test\\ TestClass.java" ) . CodeElements ;
205
+ var codeElements = GetFile ( this . javaParserResult . Assemblies , "test.TestClass" , "C:\\ temp\\ test\\ TestClass.java" ) . CodeElements ;
152
206
Assert . Equal ( 4 , codeElements . Count ( ) ) ;
153
207
}
154
208
@@ -162,5 +216,15 @@ private static FileAnalysis GetFileAnalysis(IEnumerable<Assembly> assemblies, st
162
216
. Single ( c => c . Name == className ) . Files
163
217
. Single ( f => f . Path == fileName )
164
218
. AnalyzeFile ( new CachingFileReader ( new LocalFileReader ( ) , 0 , null ) ) ;
219
+
220
+ private static ParserResult ParseReport ( string filePath )
221
+ {
222
+ var filterMock = new Mock < IFilter > ( ) ;
223
+ filterMock . Setup ( f => f . IsElementIncludedInReport ( It . IsAny < string > ( ) ) ) . Returns ( true ) ;
224
+
225
+ var report = XDocument . Load ( filePath ) ;
226
+ new CoberturaReportPreprocessor ( ) . Execute ( report ) ;
227
+ return new CoberturaParser ( filterMock . Object , filterMock . Object , filterMock . Object ) . Parse ( report . Root ) ;
228
+ }
165
229
}
166
230
}
0 commit comments