diff --git a/tests/PHPUnit/ConsoleCommandTestCase.php b/tests/PHPUnit/ConsoleCommandTestCase.php new file mode 100644 index 0000000000000000000000000000000000000000..4ff21b4cafde8aaf74c0d7522b42f716fc9cf5af --- /dev/null +++ b/tests/PHPUnit/ConsoleCommandTestCase.php @@ -0,0 +1,56 @@ +<?php +/** + * Piwik - free/libre analytics platform + * + * @link http://piwik.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +namespace Piwik\Tests; + +use Piwik\Config; +use Piwik\Console; +use Symfony\Component\Console\Tester\ApplicationTester; + +/** + * Base class for test cases that test Piwik console commands. Derives from IntegrationTestCase + * so the entire Piwik environment is set up. + * + * This will create an ApplicationTester instance (provided by Symfony) which should be used to + * test commands like this: + * + * public function testThisAndThat() + * { + * $result = $this->applicationTester->run(array( + * 'command' => 'my-command', + * 'arg1' => 'value1', + * 'arg2' => 'value2', + * '--option' => true, + * '--another-option' => 'value3' + * )); + * $this->assertEquals(0, $result, $this->getCommandDisplayOutputErrorMessage()); + * + * // other checks + * } + */ +class ConsoleCommandTestCase extends \IntegrationTestCase +{ + protected $applicationTester = null; + + public function setUp() + { + parent::setUp(); + + $application = new Console(); + $application->setAutoExit(false); + + $this->applicationTester = new ApplicationTester($application); + + Config::unsetInstance(); + } + + protected function getCommandDisplayOutputErrorMessage() + { + return "Command did not behave as expected. Command output: " . $this->applicationTester->getDisplay(); + } +} \ No newline at end of file diff --git a/tests/PHPUnit/bootstrap.php b/tests/PHPUnit/bootstrap.php index 1dcb995b0ea9af80650ab97ffd4084ad8a52b238..429b3d17e6f38ae421ba4dc6f0a36500c6fe4cae 100644 --- a/tests/PHPUnit/bootstrap.php +++ b/tests/PHPUnit/bootstrap.php @@ -34,6 +34,7 @@ require_once PIWIK_INCLUDE_PATH . '/core/Loader.php'; require_once PIWIK_INCLUDE_PATH . '/core/FrontController.php'; require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/DatabaseTestCase.php'; require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/IntegrationTestCase.php'; +require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/ConsoleCommandTestCase.php'; require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/FakeAccess.php'; require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/MockPiwikOption.php'; require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/TestingEnvironment.php';