@@ -69,96 +69,161 @@ public function render(PHP_CodeCoverage_Report_Node_Directory $node, $file)
6969
7070 $ this ->setCommonTemplateVariables ($ template , $ node );
7171
72+ $ complexity = $ this ->complexity ($ classes );
73+ $ coverageDistribution = $ this ->coverageDistribution ($ classes );
74+ $ leastTested = $ this ->leastTested ($ classes );
75+ $ topProjectRisks = $ this ->topProjectRisks ($ classes );
76+
7277 $ template ->setVar (
7378 array (
74- 'least_tested_methods ' => $ this ->leastTestedMethods ($ classes ),
75- 'top_project_risks ' => $ this ->topProjectRisks ($ classes ),
76- 'cc_values ' => $ this ->classComplexity ($ classes ),
77- 'ccd_values ' => $ this ->classCoverageDistribution ($ classes ),
78- 'backlink ' => basename (str_replace ('.dashboard ' , '' , $ file ))
79+ 'least_tested_classes ' => $ leastTested ['class ' ],
80+ 'least_tested_methods ' => $ leastTested ['method ' ],
81+ 'top_project_risks_classes ' => $ topProjectRisks ['class ' ],
82+ 'top_project_risks_methods ' => $ topProjectRisks ['method ' ],
83+ 'complexity_class ' => $ complexity ['class ' ],
84+ 'complexity_method ' => $ complexity ['method ' ],
85+ 'class_coverage_distribution ' => $ coverageDistribution ['class ' ],
86+ 'method_coverage_distribution ' => $ coverageDistribution ['method ' ],
87+ 'backlink ' => basename (str_replace ('.dashboard ' , '' , $ file ))
7988 )
8089 );
8190
8291 $ template ->renderTo ($ file );
8392 }
8493
8594 /**
86- * Returns the data for the Class Complexity chart .
95+ * Returns the data for the Class/Method Complexity charts .
8796 *
8897 * @param array $classes
89- * @return string
98+ * @return array
9099 */
91- protected function classComplexity (array $ classes )
100+ protected function complexity (array $ classes )
92101 {
93- $ data = array ();
102+ $ result = array ('class ' => array (), 'method ' => array ());
103+
104+ foreach ($ classes as $ className => $ class ) {
105+ foreach ($ class ['methods ' ] as $ methodName => $ method ) {
106+ if ($ className != '* ' ) {
107+ $ methodName = $ className . ':: ' . $ methodName ;
108+ }
109+
110+ $ result ['method ' ][] = array (
111+ $ method ['coverage ' ],
112+ $ method ['ccn ' ],
113+ sprintf (
114+ '<a href="%s">%s</a> ' ,
115+ $ method ['link ' ],
116+ $ methodName
117+ )
118+ );
119+ }
94120
95- foreach ($ classes as $ name => $ class ) {
96- $ data [] = array (
121+ $ result ['class ' ][] = array (
97122 $ class ['coverage ' ],
98123 $ class ['ccn ' ],
99124 sprintf (
100125 '<a href="%s">%s</a> ' ,
101126 $ class ['link ' ],
102- $ name
127+ $ className
103128 )
104129 );
105130 }
106131
107- return json_encode ($ data );
132+ return array (
133+ 'class ' => json_encode ($ result ['class ' ]),
134+ 'method ' => json_encode ($ result ['method ' ])
135+ );
108136 }
109137
110138 /**
111- * Returns the data for the Class Coverage Distribution chart.
139+ * Returns the data for the Class / Method Coverage Distribution chart.
112140 *
113141 * @param array $classes
114- * @return string
142+ * @return array
115143 */
116- protected function classCoverageDistribution (array $ classes )
144+ protected function coverageDistribution (array $ classes )
117145 {
118- $ data = array (
119- '0% ' => 0 ,
120- '0-10% ' => 0 ,
121- '10-20% ' => 0 ,
122- '20-30% ' => 0 ,
123- '30-40% ' => 0 ,
124- '40-50% ' => 0 ,
125- '50-60% ' => 0 ,
126- '60-70% ' => 0 ,
127- '70-80% ' => 0 ,
128- '80-90% ' => 0 ,
129- '90-100% ' => 0 ,
130- '100% ' => 0
146+ $ result = array (
147+ 'class ' => array (
148+ '0% ' => 0 ,
149+ '0-10% ' => 0 ,
150+ '10-20% ' => 0 ,
151+ '20-30% ' => 0 ,
152+ '30-40% ' => 0 ,
153+ '40-50% ' => 0 ,
154+ '50-60% ' => 0 ,
155+ '60-70% ' => 0 ,
156+ '70-80% ' => 0 ,
157+ '80-90% ' => 0 ,
158+ '90-100% ' => 0 ,
159+ '100% ' => 0
160+ ),
161+ 'method ' => array (
162+ '0% ' => 0 ,
163+ '0-10% ' => 0 ,
164+ '10-20% ' => 0 ,
165+ '20-30% ' => 0 ,
166+ '30-40% ' => 0 ,
167+ '40-50% ' => 0 ,
168+ '50-60% ' => 0 ,
169+ '60-70% ' => 0 ,
170+ '70-80% ' => 0 ,
171+ '80-90% ' => 0 ,
172+ '90-100% ' => 0 ,
173+ '100% ' => 0
174+ )
131175 );
132176
133177 foreach ($ classes as $ class ) {
178+ foreach ($ class ['methods ' ] as $ methodName => $ method ) {
179+ if ($ method ['coverage ' ] == 0 ) {
180+ $ result ['method ' ]['0% ' ]++;
181+ }
182+
183+ else if ($ method ['coverage ' ] == 100 ) {
184+ $ result ['method ' ]['100% ' ]++;
185+ }
186+
187+ else {
188+ $ key = floor ($ method ['coverage ' ] / 10 ) * 10 ;
189+ $ key = $ key . '- ' . ($ key + 10 ) . '% ' ;
190+ $ result ['method ' ][$ key ]++;
191+ }
192+ }
193+
134194 if ($ class ['coverage ' ] == 0 ) {
135- $ data ['0% ' ]++;
195+ $ result [ ' class ' ] ['0% ' ]++;
136196 }
137197
138198 else if ($ class ['coverage ' ] == 100 ) {
139- $ data ['100% ' ]++;
199+ $ result [ ' class ' ] ['100% ' ]++;
140200 }
141201
142202 else {
143- $ key = floor ($ class ['coverage ' ]/ 10 )* 10 ;
203+ $ key = floor ($ class ['coverage ' ] / 10 ) * 10 ;
144204 $ key = $ key . '- ' . ($ key + 10 ) . '% ' ;
145- $ data [$ key ]++;
205+ $ result [ ' class ' ] [$ key ]++;
146206 }
147207 }
148208
149- return json_encode (array_values ($ data ));
209+ return array (
210+ 'class ' => json_encode (array_values ($ result ['class ' ])),
211+ 'method ' => json_encode (array_values ($ result ['method ' ]))
212+ );
150213 }
151214
152215 /**
153- * Returns the least tested methods.
216+ * Returns the least tested classes / methods.
154217 *
155218 * @param array $classes
156219 * @param integer $max
157- * @return string
220+ * @return array
158221 */
159- protected function leastTestedMethods (array $ classes , $ max = 10 )
222+ protected function leastTested (array $ classes , $ max = 10 )
160223 {
161- $ methods = array ();
224+ $ leastTestedClasses = array ();
225+ $ leastTestedMethods = array ();
226+ $ result = array ('class ' => '' , 'method ' => '' );
162227
163228 foreach ($ classes as $ className => $ class ) {
164229 foreach ($ class ['methods ' ] as $ methodName => $ method ) {
@@ -169,67 +234,116 @@ protected function leastTestedMethods(array $classes, $max = 10)
169234 $ key = $ methodName ;
170235 }
171236
172- $ methods [$ key ] = $ method ['coverage ' ];
237+ $ leastTestedMethods [$ key ] = $ method ['coverage ' ];
173238 }
174239 }
240+
241+ if ($ class ['coverage ' ] < 100 ) {
242+ $ leastTestedClasses [$ className ] = $ class ['coverage ' ];
243+ }
175244 }
176245
177- asort ($ methods );
246+ asort ($ leastTestedClasses );
247+ asort ($ leastTestedMethods );
178248
179- $ methods = array_slice ($ methods , 0 , min ($ max , count ($ methods )));
180- $ buffer = '' ;
181- $ i = 1 ;
249+ $ leastTestedClasses = array_slice ($ leastTestedClasses , 0 , min ($ max , count ($ leastTestedClasses )));
250+ $ leastTestedMethods = array_slice ($ leastTestedMethods , 0 , min ($ max , count ($ leastTestedMethods )));
182251
183- foreach ($ methods as $ name => $ coverage ) {
184- list ($ class , $ method ) = explode (':: ' , $ name );
252+ $ i = 1 ;
185253
186- $ buffer .= sprintf (
254+ foreach ($ leastTestedClasses as $ className => $ coverage ) {
255+ $ result ['class ' ] .= sprintf (
256+ ' <tr><td><div align="right">%d.</div></td><td><a href="%s">%s</a></td><td><div align="right">%d%%</div></td></tr> ' . "\n" ,
257+ $ i ++,
258+ $ classes [$ className ]['link ' ],
259+ $ className ,
260+ $ coverage
261+ );
262+ }
263+
264+ $ i = 1 ;
265+
266+ foreach ($ leastTestedMethods as $ methodName => $ coverage ) {
267+ list ($ class , $ method ) = explode (':: ' , $ methodName );
268+
269+ $ result ['method ' ] .= sprintf (
187270 ' <tr><td><div align="right">%d.</div></td><td><a href="%s">%s</a></td><td><div align="right">%d%%</div></td></tr> ' . "\n" ,
188271 $ i ++,
189272 $ classes [$ class ]['methods ' ][$ method ]['link ' ],
190- $ name ,
273+ $ methodName ,
191274 $ coverage
192275 );
193276 }
194277
195- return $ buffer ;
278+ return $ result ;
196279 }
197280
198281 /**
199282 * Returns the top project risks according to the CRAP index.
200283 *
201284 * @param array $classes
202285 * @param integer $max
203- * @return string
286+ * @return array
204287 */
205288 protected function topProjectRisks (array $ classes , $ max = 10 )
206289 {
207- $ risks = array ();
290+ $ classRisks = array ();
291+ $ methodRisks = array ();
292+ $ result = array ('class ' => '' , 'method ' => '' );
293+
208294
209295 foreach ($ classes as $ className => $ class ) {
296+ foreach ($ class ['methods ' ] as $ methodName => $ method ) {
297+ if ($ method ['coverage ' ] < 100 && $ method ['ccn ' ] > 1 ) {
298+ if ($ className != '* ' ) {
299+ $ key = $ className . ':: ' . $ methodName ;
300+ } else {
301+ $ key = $ methodName ;
302+ }
303+
304+ $ methodRisks [$ key ] = $ method ['crap ' ];
305+ }
306+ }
307+
210308 if ($ class ['coverage ' ] < 100 &&
211309 $ class ['ccn ' ] > count ($ class ['methods ' ])) {
212- $ risks [$ className ] = $ class ['crap ' ];
310+ $ classRisks [$ className ] = $ class ['crap ' ];
213311 }
214312 }
215313
216- arsort ($ risks );
314+ arsort ($ classRisks );
315+ arsort ($ methodRisks );
316+
317+ $ classRisks = array_slice ($ classRisks , 0 , min ($ max , count ($ classRisks )));
318+ $ methodRisks = array_slice ($ methodRisks , 0 , min ($ max , count ($ methodRisks )));
319+
320+ $ i = 1 ;
321+
322+ foreach ($ classRisks as $ className => $ crap ) {
323+ $ result ['class ' ] .= sprintf (
324+ ' <tr><td><div align="right">%d.</div></td><td><a href="%s">%s</a></td><td><div align="right">%d</div></td></tr> ' . "\n" ,
325+ $ i ++,
326+ $ classes [$ className ]['link ' ],
327+ $ className ,
328+ $ crap
329+ );
330+ }
331+
332+ $ i = 1 ;
217333
218- $ buffer = '' ;
219- $ risks = array_slice ($ risks , 0 , min ($ max , count ($ risks )));
220- $ i = 1 ;
334+ foreach ($ methodRisks as $ methodName => $ crap ) {
335+ list ($ class , $ method ) = explode (':: ' , $ methodName );
221336
222- foreach ($ risks as $ name => $ crap ) {
223- $ buffer .= sprintf (
337+ $ result ['method ' ] .= sprintf (
224338 ' <tr><td><div align="right">%d.</div></td><td><a href="%s">%s</a></td><td><div align="right">%d</div></td></tr> ' . "\n" ,
225339 $ i ++,
226- $ classes [$ name ]['link ' ],
227- $ name ,
340+ $ classes [$ class ][ ' methods ' ][ $ method ]['link ' ],
341+ $ methodName ,
228342 $ crap
229343 );
230344 }
231345
232- return $ buffer ;
346+ return $ result ;
233347 }
234348
235349 protected function getActiveBreadcrumb (PHP_CodeCoverage_Report_Node $ node )
0 commit comments