Skip to content

Commit 816a42e

Browse files
committed
Split auto-detect driver into separate drivers; add Factory, Stub, and HHVM drivers (and unit tests)
1 parent f94f291 commit 816a42e

11 files changed

Lines changed: 590 additions & 338 deletions

File tree

src/VIPSoft/CodeCoverageCommon/Driver.php

Lines changed: 0 additions & 97 deletions
This file was deleted.
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
<?php
2+
/**
3+
* Code Coverage Driver Factory
4+
*
5+
* @copyright 2013 Anthon Pang
6+
* @license BSD-3-Clause
7+
*/
8+
9+
namespace VIPSoft\CodeCoverageCommon\Driver;
10+
11+
use PHP_CodeCoverage_Driver as DriverInterface;
12+
13+
/**
14+
* Driver factory
15+
*
16+
* @author Anthon Pang <apang@softwaredevelopment.ca>
17+
*/
18+
class Factory
19+
{
20+
/**
21+
* @var array
22+
*/
23+
private $driverClasses;
24+
25+
/**
26+
* Constructor
27+
*
28+
* @param array $driverClasses List of namespaced driver classes
29+
*/
30+
public function __construct(array $driverClasses)
31+
{
32+
$this->driverClasses = $driverClasses;
33+
}
34+
35+
/**
36+
* Create driver
37+
*
38+
* @return DriverInterface
39+
*/
40+
public function create()
41+
{
42+
foreach ($this->driverClasses as $driverClass) {
43+
try {
44+
$driver = new $driverClass();
45+
46+
return $driver;
47+
} catch (\Exception $e) {
48+
}
49+
}
50+
51+
return null;
52+
}
53+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
<?php
2+
/**
3+
* HHVM Code Coverage Driver
4+
*
5+
* @copyright 2013 Anthon Pang
6+
* @license BSD-3-Clause
7+
*/
8+
9+
namespace VIPSoft\CodeCoverageCommon\Driver;
10+
11+
use PHP_CodeCoverage_Driver as DriverInterface;
12+
13+
/**
14+
* HHVM (Hip Hop VM) Driver
15+
*
16+
* {@internal Derived from PHP_CodeCoverage_Driver_Xdebug.}
17+
*
18+
* @author Anthon Pang <apang@softwaredevelopment.ca>
19+
*/
20+
class HHVM implements DriverInterface
21+
{
22+
/**
23+
* Constructor
24+
*
25+
* @throws \PHP_CodeCoverage_Exception if PHP code coverage not enabled
26+
*/
27+
public function __construct()
28+
{
29+
if ( ! defined('HPHP_VERSION')) {
30+
throw new \PHP_CodeCoverage_Exception('This driver requires HHVM');
31+
}
32+
}
33+
34+
/**
35+
* {@inheritdoc}
36+
*/
37+
public function start()
38+
{
39+
fb_enable_code_coverage();
40+
}
41+
42+
/**
43+
* {@inheritdoc}
44+
*/
45+
public function stop()
46+
{
47+
$codeCoverage = fb_get_code_coverage(true);
48+
49+
fb_disable_code_coverage();
50+
51+
return $codeCoverage;
52+
}
53+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
<?php
2+
/**
3+
* Code Coverage Stub Driver
4+
*
5+
* @copyright 2013 Anthon Pang
6+
* @license BSD-3-Clause
7+
*/
8+
9+
namespace VIPSoft\CodeCoverageCommon\Driver;
10+
11+
use PHP_CodeCoverage_Driver as DriverInterface;
12+
13+
/**
14+
* Stub driver
15+
*
16+
* @author Anthon Pang <apang@softwaredevelopment.ca>
17+
*/
18+
class Stub implements DriverInterface
19+
{
20+
private $driver;
21+
22+
/**
23+
* Register driver
24+
*
25+
* @param DriverInterface $driver
26+
*/
27+
public function setDriver(DriverInterface $driver)
28+
{
29+
$this->driver = $driver;
30+
}
31+
32+
/**
33+
* Get driver
34+
*
35+
* @return DriverInterface $driver
36+
*/
37+
public function getDriver()
38+
{
39+
return $this->driver;
40+
}
41+
42+
/**
43+
* {@inheritdoc}
44+
*/
45+
public function start()
46+
{
47+
if ($this->driver) {
48+
$this->driver->start();
49+
}
50+
}
51+
52+
/**
53+
* {@inheritdoc}
54+
*/
55+
public function stop()
56+
{
57+
return $this->driver ? $this->driver->stop() : false;
58+
}
59+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
<?php
2+
/**
3+
* XCache Code Coverage Driver
4+
*
5+
* @copyright 2013 Anthon Pang
6+
* @license BSD-3-Clause
7+
*/
8+
9+
namespace VIPSoft\CodeCoverageCommon\Driver;
10+
11+
use PHP_CodeCoverage_Driver as DriverInterface;
12+
13+
/**
14+
* XCache Driver
15+
*
16+
* {@internal Derived from PHP_CodeCoverage_Driver_Xdebug.}
17+
*
18+
* @author Anthon Pang <apang@softwaredevelopment.ca>
19+
*/
20+
class XCache implements DriverInterface
21+
{
22+
/**
23+
* Constructor
24+
*
25+
* @throws \PHP_CodeCoverage_Exception if PHP code coverage not enabled
26+
*/
27+
public function __construct()
28+
{
29+
if ( ! extension_loaded('xcache')) {
30+
throw new \PHP_CodeCoverage_Exception('This driver requires XCache');
31+
}
32+
33+
if (version_compare(phpversion('xcache'), '1.2.0', '<') ||
34+
! ini_get('xcache.coverager')
35+
) {
36+
throw new \PHP_CodeCoverage_Exception('xcache.coverager=On has to be set in php.ini');
37+
}
38+
}
39+
40+
/**
41+
* {@inheritdoc}
42+
*/
43+
public function start()
44+
{
45+
xcache_coverager_start();
46+
}
47+
48+
/**
49+
* {@inheritdoc}
50+
*/
51+
public function stop()
52+
{
53+
$codeCoverage = xcache_coverager_get();
54+
55+
xcache_coverager_stop(true);
56+
57+
return $codeCoverage;
58+
}
59+
}

0 commit comments

Comments
 (0)