<?php
/**
* @package framework
* @subpackage dev
*/

/**
 * PHPUnit Wrapper class. Implements the correct behaviour for PHPUnit V3.4.
 */
class PhpUnitWrapper_3_4 extends PhpUnitWrapper {

	protected $version = 'PhpUnit V3.4';

	/** 
	 * Initialise the wrapper class.
	 */
	public function init() {
		parent::init();
		require_once 'PHPUnit/Framework.php';
		require_once 'PHPUnit/Util/Report.php';
		require_once 'PHPUnit/TextUI/TestRunner.php';
	}
	
	/**
	 * Overwrites beforeRunTests. Initiates coverage-report generation if 
	 * $coverage has been set to true (@see setCoverageStatus).
	 */
	protected function beforeRunTests() {

		if($this->getCoverageStatus()) {
			// blacklist selected folders from coverage report
			$modules = $this->moduleDirectories();
			
			foreach(TestRunner::$coverage_filter_dirs as $dir) {
				if($dir[0] == '*') {
					$dir = substr($dir, 1);
					foreach ($modules as $module) {
						PHPUnit_Util_Filter::addDirectoryToFilter(BASE_PATH . '/' . $dir);
					}
				} else {
					PHPUnit_Util_Filter::addDirectoryToFilter(BASE_PATH . '/' . $dir);
				}
			}
			$this->getFrameworkTestResults()->collectCodeCoverageInformation(true);
		}
	}

	/**
	 * Overwrites aferRunTests. Creates coverage report and clover report 
	 * if required.
	 */
	protected function aferRunTests() {

		if($this->getCoverageStatus()) {

			if(!file_exists(ASSETS_PATH . '/coverage-report')) {
				mkdir(ASSETS_PATH . '/coverage-report');
			}

			$ret = PHPUnit_Util_Report::render($this->getFrameworkTestResults(), ASSETS_PATH . '/coverage-report/');

			$coverageApp = ASSETS_PATH . '/coverage-report/' 
				. preg_replace('/[^A-Za-z0-9]/','_',preg_replace('/(\/$)|(^\/)/','',Director::baseFolder())) . '.html';
			$coverageTemplates = ASSETS_PATH . '/coverage-report/' 
				. preg_replace('/[^A-Za-z0-9]/','_',preg_replace('/(\/$)|(^\/)/','',realpath(TEMP_FOLDER))) . '.html';

			echo "<p>Coverage reports available here:<ul>
				<li><a href=\"$coverageApp\">Coverage report of the application</a></li>
				<li><a href=\"$coverageTemplates\">Coverage report of the templates</a></li>
			</ul>";
		}
	}
	
}
