+<?php
+
+include_once __DIR__ . '/parse_args.php';
+
+class DebuggerTest extends PHPUnit_Framework_TestCase
+{
+ public $args = array();
+
+ protected $baseUrl;
+
+ protected $testId;
+ /** @var boolean $collectCodeCoverageInformation */
+ protected $collectCodeCoverageInformation;
+ protected $coverageScriptUrl;
+
+ public function run(PHPUnit_Framework_TestResult $result = NULL)
+ {
+ $this->testId = get_class($this) . '__' . $this->getName();
+
+ if ($result === NULL) {
+ $result = $this->createResult();
+ }
+
+ $this->collectCodeCoverageInformation = $result->getCollectCodeCoverageInformation();
+
+ parent::run($result);
+
+ if ($this->collectCodeCoverageInformation) {
+ $coverage = new PHPUnit_Extensions_SeleniumCommon_RemoteCoverage(
+ $this->coverageScriptUrl,
+ $this->testId
+ );
+ $result->getCodeCoverage()->append(
+ $coverage->get(), $this
+ );
+ }
+
+ // do not call this before to give the time to the Listeners to run
+ //$this->getStrategy()->endOfTest($this->session);
+
+ return $result;
+ }
+
+ public function setUp()
+ {
+ $this->args = argParser::getArgs();
+
+ $this->baseUrl = $this->args['LOCALSERVER'] . str_replace( '/demo/server/server.php', '/debugger/', $this->args['URI'] );
+
+ $this->coverageScriptUrl = 'http://' . $this->args['LOCALSERVER'] . '/' . str_replace( '/demo/server/server.php', 'tests/phpunit_coverage.php', $this->args['URI'] );
+ }
+
+ protected function request($file, $method = 'GET', $payload = '')
+ {
+ $url = $this->baseUrl . $file;
+
+ $ch = curl_init($url);
+ curl_setopt_array($ch, array(
+ CURLOPT_RETURNTRANSFER => true,
+ CURLOPT_FAILONERROR => true
+ ));
+ if ($method == 'POST')
+ {
+ curl_setopt_array($ch, array(
+ CURLOPT_POST => true,
+ CURLOPT_POSTFIELDS => $payload
+ ));
+ }
+ if ($this->collectCodeCoverageInformation)
+ {
+ curl_setopt($ch, CURLOPT_COOKIE, 'PHPUNIT_SELENIUM_TEST_ID=true');
+ }
+ if ($this->args['DEBUG'] > 0) {
+ curl_setopt($ch, CURLOPT_VERBOSE, 1);
+ }
+ $page = curl_exec($ch);
+ curl_close($ch);
+
+ $this->assertNotFalse($page);
+ $this->assertNotContains('Fatal error', $page);
+ $this->assertNotContains('Notice:', $page);
+
+ return $page;
+ }
+
+ public function testController()
+ {
+ $page = $this->request('controller.php');
+ }
+
+ /**
+ * @todo test:
+ * - list methods
+ * - describe a method
+ * - execute a method
+ * - wrap a method
+ */
+ public function testAction()
+ {
+ $page = $this->request('action.php');
+ }
+}