Skip to content

Commit

Permalink
Merge 6b9af87 into 325cef3
Browse files Browse the repository at this point in the history
  • Loading branch information
yoanm committed Apr 7, 2018
2 parents 325cef3 + 6b9af87 commit 054a166
Show file tree
Hide file tree
Showing 15 changed files with 184 additions and 106 deletions.
4 changes: 2 additions & 2 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
language: php

php:
- '5.5'
- '5.6'
- '7.0'
- '7.1'
- '7.2'

sudo: false

Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# PhpUnitExtended
[![Scrutinizer Build Status](https://img.shields.io/scrutinizer/build/g/yoanm/PhpUnitExtended.svg?label=Scrutinizer)](https://scrutinizer-ci.com/g/yoanm/PhpUnitExtended/?branch=master) [![Scrutinizer Code Quality](https://img.shields.io/scrutinizer/g/yoanm/PhpUnitExtended.svg?label=Code%20quality)](https://scrutinizer-ci.com/g/yoanm/PhpUnitExtended/?branch=master) [![Code Coverage](https://img.shields.io/scrutinizer/coverage/g/yoanm/PhpUnitExtended.svg?label=Coverage)](https://scrutinizer-ci.com/g/yoanm/PhpUnitExtended/?branch=master)

[![Travis Build Status](https://img.shields.io/travis/yoanm/PhpUnitExtended/master.svg?label=travis)](https://travis-ci.org/yoanm/PhpUnitExtended) [![PHP Versions](https://img.shields.io/badge/php-5.5%20%2F%205.6%20%2F%207.0-8892BF.svg)](https://php.net/)
[![Travis Build Status](https://img.shields.io/travis/yoanm/PhpUnitExtended/master.svg?label=travis)](https://travis-ci.org/yoanm/PhpUnitExtended) [![PHP Versions](https://img.shields.io/badge/php-7.0%20%2F%207.1%20%2F%207.2-8892BF.svg)](https://php.net/)

[![Latest Stable Version](https://img.shields.io/packagist/v/yoanm/php-unit-extended.svg)](https://packagist.org/packages/yoanm/php-unit-extended)

Expand Down
2 changes: 1 addition & 1 deletion app_test/tests/RiskyCoverageTest.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?php

class RiskyCoverageTest extends PHPUnit_Framework_TestCase
class RiskyCoverageTest extends \PHPUnit\Framework\TestCase
{
/**
* @covers \Exception
Expand Down
2 changes: 1 addition & 1 deletion app_test/tests/RiskyGlobalsTest.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?php

class RiskyGlobalsTest extends PHPUnit_Framework_TestCase
class RiskyGlobalsTest extends \PHPUnit\Framework\TestCase
{
/**
* @backupGlobals enabled
Expand Down
2 changes: 1 addition & 1 deletion app_test/tests/RiskyNothingTest.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?php

class RiskyNothingTest extends PHPUnit_Framework_TestCase
class RiskyNothingTest extends \PHPUnit\Framework\TestCase
{
/**
* @group risky-test-nothing
Expand Down
2 changes: 1 addition & 1 deletion app_test/tests/RiskyOutputTest.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?php

class RiskyOutputTest extends PHPUnit_Framework_TestCase
class RiskyOutputTest extends \PHPUnit\Framework\TestCase
{
/**
* @group risky-output
Expand Down
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
"php": ">=5.5"
},
"require-dev": {
"phpunit/phpunit": "~4.0",
"phpunit/phpunit": "~6.0 || ~7.0",
"squizlabs/php_codesniffer": "2.*",
"behat/behat": "~3.0",
"symfony/process": "~3.0"
Expand Down
72 changes: 59 additions & 13 deletions src/Listener/DelegatingListener.php
Original file line number Diff line number Diff line change
@@ -1,84 +1,130 @@
<?php
namespace Yoanm\PhpUnitExtended\Listener;

use PHPUnit\Framework\AssertionFailedError;
use PHPUnit\Framework\Warning;
use PHPUnit\Framework\TestListener;
use PHPUnit\Framework\Test;
use PHPUnit\Framework\TestSuite;

/**
* Simple listener delegator
*/
class DelegatingListener implements \PHPUnit_Framework_TestListener
class DelegatingListener implements TestListener
{
/** \PHPUnit_Framework_TestListener[] */
/** TestListener[] */
private $listenerList = [];

public function addListener(\PHPUnit_Framework_TestListener $listener)
/**
* {@inheritdoc}
*/
public function addListener(TestListener $listener)
{
$this->listenerList[] = $listener;
}

/**
* @return \PHPUnit_Framework_TestListener[]
* @return TestListener[]
*/
public function getListenerList()
{
return $this->listenerList;
}

public function addError(\PHPUnit_Framework_Test $test, \Exception $e, $time)
/**
* {@inheritdoc}
*/
public function addError(Test $test, \Exception $e, $time)
{
foreach ($this->listenerList as $listener) {
$listener->addError($test, $e, $time);
}
}

public function addFailure(\PHPUnit_Framework_Test $test, \PHPUnit_Framework_AssertionFailedError $e, $time)
/**
* {@inheritdoc}
*/
public function addWarning(Test $test, Warning $e, $time)
{
foreach ($this->listenerList as $listener) {
$listener->addWarning($test, $e, $time);
}
}

/**
* {@inheritdoc}
*/
public function addFailure(Test $test, AssertionFailedError $e, $time)
{
foreach ($this->listenerList as $listener) {
$listener->addFailure($test, $e, $time);
}
}

public function addIncompleteTest(\PHPUnit_Framework_Test $test, \Exception $e, $time)
/**
* {@inheritdoc}
*/
public function addIncompleteTest(Test $test, \Exception $e, $time)
{
foreach ($this->listenerList as $listener) {
$listener->addIncompleteTest($test, $e, $time);
}
}

public function addRiskyTest(\PHPUnit_Framework_Test $test, \Exception $e, $time)
/**
* {@inheritdoc}
*/
public function addRiskyTest(Test $test, \Exception $e, $time)
{
foreach ($this->listenerList as $listener) {
$listener->addRiskyTest($test, $e, $time);
}
}

public function addSkippedTest(\PHPUnit_Framework_Test $test, \Exception $e, $time)
/**
* {@inheritdoc}
*/
public function addSkippedTest(Test $test, \Exception $e, $time)
{
foreach ($this->listenerList as $listener) {
$listener->addSkippedTest($test, $e, $time);
}
}

public function startTestSuite(\PHPUnit_Framework_TestSuite $suite)
/**
* {@inheritdoc}
*/
public function startTestSuite(TestSuite $suite)
{
foreach ($this->listenerList as $listener) {
$listener->startTestSuite($suite);
}
}

public function endTestSuite(\PHPUnit_Framework_TestSuite $suite)
/**
* {@inheritdoc}
*/
public function endTestSuite(TestSuite $suite)
{
foreach ($this->listenerList as $listener) {
$listener->endTestSuite($suite);
}
}

public function startTest(\PHPUnit_Framework_Test $test)
/**
* {@inheritdoc}
*/
public function startTest(Test $test)
{
foreach ($this->listenerList as $listener) {
$listener->startTest($test);
}
}

public function endTest(\PHPUnit_Framework_Test $test, $time)
/**
* {@inheritdoc}
*/
public function endTest(Test $test, $time)
{
foreach ($this->listenerList as $listener) {
$listener->endTest($test, $time);
Expand Down
29 changes: 19 additions & 10 deletions src/Listener/RiskyToFailedListener.php
Original file line number Diff line number Diff line change
@@ -1,25 +1,34 @@
<?php
namespace Yoanm\PhpUnitExtended\Listener;

use PHPUnit\Framework\AssertionFailedError;
use PHPUnit\Framework\OutputError;
use PHPUnit\Framework\Test;
use PHPUnit\Framework\TestCase;
use PHPUnit\Framework\TestListener;
use PHPUnit\Framework\TestListenerDefaultImplementation;
use PHPUnit\Framework\UnintentionallyCoveredCodeError;

/**
* @see doc/listener/StrictCoverageListener.md
*/
class RiskyToFailedListener extends \PHPUnit_Framework_BaseTestListener
class RiskyToFailedListener implements TestListener
{
use TestListenerDefaultImplementation;
/**
* @param \PHPUnit_Framework_Test $test
* @param Test $test
* @param \Exception $e
* @param float $time
*/
public function addRiskyTest(\PHPUnit_Framework_Test $test, \Exception $e, $time)
public function addRiskyTest(Test $test, \Exception $e, $time)
{
/* Must be PHPUnit_Framework_TestCase instance to have access to "getTestResultObject" method */
if ($test instanceof \PHPUnit_Framework_TestCase) {
/* Must beTestCase instance to have access to "getTestResultObject" method */
if ($test instanceof TestCase) {
$reason = $this->processEvent($test, $e);
if (null !== $reason) {
$test->getTestResultObject()->addFailure(
$test,
new \PHPUnit_Framework_AssertionFailedError(
new AssertionFailedError(
sprintf(
"Strict mode - %s :\n%s",
$reason,
Expand All @@ -33,21 +42,21 @@ public function addRiskyTest(\PHPUnit_Framework_Test $test, \Exception $e, $time
}

/**
* @param \PHPUnit_Framework_TestCase $test
* @param TestCase $test
* @param \Exception $e
*
* @return null|string
*/
protected function processEvent(\PHPUnit_Framework_TestCase $test, \Exception $e)
protected function processEvent(TestCase $test, \Exception $e)
{
$reason = null;
switch (true) {
/* beStrictAboutOutputDuringTests="true" */
case $e instanceof \PHPUnit_Framework_OutputError:
case $e instanceof OutputError:
$reason = 'No output during test';
break;
/* checkForUnintentionallyCoveredCode="true" */
case $e instanceof \PHPUnit_Framework_UnintentionallyCoveredCodeError:
case $e instanceof UnintentionallyCoveredCodeError:
$reason = 'Executed code must be defined with @covers and @uses annotations';
break;
default:
Expand Down
22 changes: 15 additions & 7 deletions src/Listener/StrictCoverageListener.php
Original file line number Diff line number Diff line change
@@ -1,30 +1,38 @@
<?php
namespace Yoanm\PhpUnitExtended\Listener;

use PHPUnit\Framework\OutputError;
use PHPUnit\Framework\Test;
use PHPUnit\Framework\TestCase;
use PHPUnit\Framework\TestListener;
use PHPUnit\Framework\TestListenerDefaultImplementation;

/**
* @see doc/listener/StrictCoverageListener.md
*/
class StrictCoverageListener extends \PHPUnit_Framework_BaseTestListener
class StrictCoverageListener implements TestListener
{
use TestListenerDefaultImplementation;

/**
* @param \PHPUnit_Framework_Test $test
* @param Test $test
* @param \Exception $e
* @param float $time
*/
public function addRiskyTest(\PHPUnit_Framework_Test $test, \Exception $e, $time)
public function addRiskyTest(Test $test, \Exception $e, $time)
{
if (/* Must be PHPUnit_Framework_TestCase instance to have access to "getTestResultObject" method */
$test instanceof \PHPUnit_Framework_TestCase
&& $e instanceof \PHPUnit_Framework_OutputError
$test instanceof TestCase
&& $e instanceof OutputError
) {
$this->removeCoverageFor($test);
}
}

/**
* @param \PHPUnit_Framework_TestCase $test
* @param TestCase $test
*/
protected function removeCoverageFor(\PHPUnit_Framework_TestCase $test)
protected function removeCoverageFor(TestCase $test)
{
$coverage = $test->getTestResultObject()->getCodeCoverage();
if (null !== $coverage) {
Expand Down
Loading

0 comments on commit 054a166

Please sign in to comment.