@@ -235,10 +235,11 @@ public function start($id, $clear = FALSE)
235235 *
236236 * @param boolean $append
237237 * @param mixed $linesToBeCovered
238+ * @param array $linesToBeUsed
238239 * @return array
239240 * @throws PHP_CodeCoverage_Exception
240241 */
241- public function stop ($ append = TRUE , $ linesToBeCovered = array ())
242+ public function stop ($ append = TRUE , $ linesToBeCovered = array (), array $ linesToBeUsed = array () )
242243 {
243244 if (!is_bool ($ append )) {
244245 throw PHP_CodeCoverage_Util_InvalidArgumentHelper::factory (
@@ -253,7 +254,7 @@ public function stop($append = TRUE, $linesToBeCovered = array())
253254 }
254255
255256 $ data = $ this ->driver ->stop ();
256- $ this ->append ($ data , NULL , $ append , $ linesToBeCovered );
257+ $ this ->append ($ data , NULL , $ append , $ linesToBeCovered, $ linesToBeUsed );
257258
258259 $ this ->currentId = NULL ;
259260
@@ -267,8 +268,9 @@ public function stop($append = TRUE, $linesToBeCovered = array())
267268 * @param mixed $id
268269 * @param boolean $append
269270 * @param mixed $linesToBeCovered
271+ * @param array $linesToBeUsed
270272 */
271- public function append (array $ data , $ id = NULL , $ append = TRUE , $ linesToBeCovered = array ())
273+ public function append (array $ data , $ id = NULL , $ append = TRUE , $ linesToBeCovered = array (), array $ linesToBeUsed = array () )
272274 {
273275 if ($ id === NULL ) {
274276 $ id = $ this ->currentId ;
@@ -287,7 +289,9 @@ public function append(array $data, $id = NULL, $append = TRUE, $linesToBeCovere
287289 }
288290
289291 if ($ id != 'UNCOVERED_FILES_FROM_WHITELIST ' ) {
290- $ this ->applyCoversAnnotationFilter ($ data , $ id , $ linesToBeCovered );
292+ $ this ->applyCoversAnnotationFilter (
293+ $ data , $ id , $ linesToBeCovered , $ linesToBeUsed
294+ );
291295 }
292296
293297 if (empty ($ data )) {
@@ -459,9 +463,10 @@ public function setProcessUncoveredFilesFromWhitelist($flag)
459463 * @param array $data
460464 * @param mixed $id
461465 * @param mixed $linesToBeCovered
466+ * @param array $linesToBeUsed
462467 * @throws PHP_CodeCoverage_Exception_UnintentionallyCoveredCode
463468 */
464- protected function applyCoversAnnotationFilter (&$ data , $ id , $ linesToBeCovered = array () )
469+ protected function applyCoversAnnotationFilter (&$ data , $ id , $ linesToBeCovered, array $ linesToBeUsed )
465470 {
466471 $ unintentionallyCoveredCode = FALSE ;
467472
@@ -475,16 +480,25 @@ protected function applyCoversAnnotationFilter(&$data, $id, $linesToBeCovered =
475480 $ data = array_intersect_key ($ data , $ linesToBeCovered );
476481
477482 if ($ this ->checkForUnintentionallyCoveredCode &&
478- $ count != count ($ data )) {
483+ $ count != count ($ data ) &&
484+ empty ($ linesToBeUsed )) {
479485 throw new PHP_CodeCoverage_Exception_UnintentionallyCoveredCode ;
480486 }
481487
482488 foreach (array_keys ($ data ) as $ filename ) {
483489 $ _linesToBeCovered = array_flip ($ linesToBeCovered [$ filename ]);
484490
491+ if (isset ($ linesToBeUsed [$ filename ])) {
492+ $ _linesToBeUsed = array_flip ($ linesToBeUsed [$ filename ]);
493+ } else {
494+ $ _linesToBeUsed = FALSE ;
495+ }
496+
485497 if ($ this ->checkForUnintentionallyCoveredCode ) {
486498 foreach ($ data [$ filename ] as $ k => $ v ) {
487- if ($ v == 1 && !isset ($ _linesToBeCovered [$ k ])) {
499+ if ($ v == 1 &&
500+ !(isset ($ _linesToBeCovered [$ k ]) ||
501+ ($ _linesToBeUsed !== FALSE && isset ($ _linesToBeUsed [$ k ])))) {
488502 throw new PHP_CodeCoverage_Exception_UnintentionallyCoveredCode ;
489503 }
490504 }
0 commit comments