X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=tests%2F3LocalhostTest.php;h=e6cc42d43267a2b05163a22be506eef97ee0c887;hb=85f6c5ecb5094c17aa7a0134006534a8b8387274;hp=562dbb511ced20796e064c880a268ba96e59765c;hpb=048358caae836a0e0d6a28956acf80c84e480aa3;p=plcapi.git
diff --git a/tests/3LocalhostTest.php b/tests/3LocalhostTest.php
index 562dbb5..e6cc42d 100644
--- a/tests/3LocalhostTest.php
+++ b/tests/3LocalhostTest.php
@@ -8,22 +8,26 @@ include_once __DIR__ . '/parse_args.php';
class LocalhostTest extends PHPUnit_Framework_TestCase
{
/** @var xmlrpc_client $client */
- public $client = null;
- public $method = 'http';
- public $timeout = 10;
- public $request_compression = null;
- public $accepted_compression = '';
- public $args = array();
+ protected $client = null;
+ protected $method = 'http';
+ protected $timeout = 10;
+ protected $request_compression = null;
+ protected $accepted_compression = '';
+ protected $args = array();
protected static $failed_tests = array();
+ protected $testId;
+ /** @var boolean $collectCodeCoverageInformation */
+ protected $collectCodeCoverageInformation;
+ protected $coverageScriptUrl;
+
public static function fail($message = '')
{
- // save in global var that this particular test has failed
+ // save in a static var that this particular test has failed
// (but only if not called from subclass objects / multitests)
if (function_exists('debug_backtrace') && strtolower(get_called_class()) == 'localhosttests') {
- global $failed_tests;
- $trace = debug_backtrace();
+ $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
for ($i = 0; $i < count($trace); $i++) {
if (strpos($trace[$i]['function'], 'test') === 0) {
self::$failed_tests[$trace[$i]['function']] = true;
@@ -36,8 +40,41 @@ class LocalhostTest extends PHPUnit_Framework_TestCase
}
/**
- * @todo be smarter with setup, do not use global variables anymore
+ * Reimplemented to allow us to collect code coverage info from the target server.
+ * Code taken from PHPUnit_Extensions_Selenium2TestCase
+ *
+ * @param PHPUnit_Framework_TestResult $result
+ * @return PHPUnit_Framework_TestResult
+ * @throws Exception
*/
+ 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();
@@ -48,28 +85,47 @@ class LocalhostTest extends PHPUnit_Framework_TestCase
} else {
$this->client = new xmlrpc_client($this->args['URI'], $this->args['LOCALSERVER']);
}
- if ($this->args['DEBUG']) {
- $this->client->setDebug($this->args['DEBUG']);
- }
+
+ $this->client->setDebug($this->args['DEBUG']);
$this->client->request_compression = $this->request_compression;
$this->client->accepted_compression = $this->accepted_compression;
+
+ $this->coverageScriptUrl = 'http://' . $this->args['LOCALSERVER'] . '/' . str_replace( '/demo/server/server.php', 'tests/phpunit_coverage.php', $this->args['URI'] );
+
+ if ($this->args['DEBUG'] == 1)
+ ob_start();
+ }
+
+ protected function tearDown()
+ {
+ if ($this->args['DEBUG'] != 1)
+ return;
+ $out = ob_get_clean();
+ $status = $this->getStatus();
+ if ($status == PHPUnit_Runner_BaseTestRunner::STATUS_ERROR
+ || $status == PHPUnit_Runner_BaseTestRunner::STATUS_FAILURE) {
+ echo $out;
+ }
}
- public function send($msg, $errrorcode = 0, $return_response = false)
+ protected function send($msg, $errorCode = 0, $returnResponse = false)
{
+ if ($this->collectCodeCoverageInformation) {
+ $this->client->setCookie('PHPUNIT_SELENIUM_TEST_ID', $this->testId);
+ }
+
$r = $this->client->send($msg, $this->timeout, $this->method);
// for multicall, return directly array of responses
if (is_array($r)) {
return $r;
}
- if (is_array($errrorcode)) {
- $this->assertContains($r->faultCode(), $errrorcode, 'Error ' . $r->faultCode() . ' connecting to server: ' . $r->faultString());
- }
- else {
- $this->assertEquals($r->faultCode(), $errrorcode, 'Error ' . $r->faultCode() . ' connecting to server: ' . $r->faultString());
+ if (is_array($errorCode)) {
+ $this->assertContains($r->faultCode(), $errorCode, 'Error ' . $r->faultCode() . ' connecting to server: ' . $r->faultString());
+ } else {
+ $this->assertEquals($r->faultCode(), $errorCode, 'Error ' . $r->faultCode() . ' connecting to server: ' . $r->faultString());
}
if (!$r->faultCode()) {
- if ($return_response) {
+ if ($returnResponse) {
return $r;
} else {
return $r->value();
@@ -81,7 +137,7 @@ class LocalhostTest extends PHPUnit_Framework_TestCase
public function testString()
{
- $sendstring = "here are 3 \"entities\": < > & " .
+ $sendString = "here are 3 \"entities\": < > & " .
"and here's a dollar sign: \$pretendvarname and a backslash too: " . chr(92) .
" - isn't that great? \\\"hackery\\\" at it's best " .
" also don't want to miss out on \$item[0]. " .
@@ -91,22 +147,57 @@ class LocalhostTest extends PHPUnit_Framework_TestCase
"and then LFCR" . chr(10) . chr(13) .
"last but not least weird names: G" . chr(252) . "nter, El" . chr(232) . "ne, and an xml comment closing tag: -->";
$f = new xmlrpcmsg('examples.stringecho', array(
- new xmlrpcval($sendstring, 'string'),
+ new xmlrpcval($sendString, 'string'),
));
$v = $this->send($f);
if ($v) {
// when sending/receiving non-US-ASCII encoded strings, XML says cr-lf can be normalized.
// so we relax our tests...
- $l1 = strlen($sendstring);
+ $l1 = strlen($sendString);
$l2 = strlen($v->scalarval());
if ($l1 == $l2) {
- $this->assertEquals($sendstring, $v->scalarval());
+ $this->assertEquals($sendString, $v->scalarval());
} else {
- $this->assertEquals(str_replace(array("\r\n", "\r"), array("\n", "\n"), $sendstring), $v->scalarval());
+ $this->assertEquals(str_replace(array("\r\n", "\r"), array("\n", "\n"), $sendString), $v->scalarval());
}
}
}
+ public function testLatin1String()
+ {
+ $sendString =
+ "last but not least weird names: G" . chr(252) . "nter, El" . chr(232) . "ne";
+ $f = 'examples.stringecho'.
+ $sendString.
+ '';
+ $v = $this->send($f);
+ if ($v) {
+ $this->assertEquals($sendString, $v->scalarval());
+ }
+ }
+
+ public function testLatin1Method()
+ {
+ $f = new xmlrpcmsg("tests.iso88591methodname." . chr(224) . chr(252) . chr(232), array(
+ new xmlrpcval('hello')
+ ));
+ $v = $this->send($f);
+ if ($v) {
+ $this->assertEquals('hello', $v->scalarval());
+ }
+ }
+
+ /*public function testUtf8Method()
+ {
+ $f = new xmlrpcmsg("tests.utf8methodname." . 'κόÏμε', array(
+ new xmlrpcval('hello')
+ ));
+ $v = $this->send($f);
+ if ($v) {
+ $this->assertEquals('hello', $v->scalarval());
+ }
+ }*/
+
public function testAddingDoubles()
{
// note that rounding errors mean we
@@ -181,7 +272,7 @@ class LocalhostTest extends PHPUnit_Framework_TestCase
public function testBase64()
{
- $sendstring = 'Mary had a little lamb,
+ $sendString = 'Mary had a little lamb,
Whose fleece was white as snow,
And everywhere that Mary went
the lamb was sure to go.
@@ -191,14 +282,14 @@ She tied it to a pylon
Ten thousand volts went down its back
And turned it into nylon';
$f = new xmlrpcmsg('examples.decode64', array(
- new xmlrpcval($sendstring, 'base64'),
+ new xmlrpcval($sendString, 'base64'),
));
$v = $this->send($f);
if ($v) {
- if (strlen($sendstring) == strlen($v->scalarval())) {
- $this->assertEquals($sendstring, $v->scalarval());
+ if (strlen($sendString) == strlen($v->scalarval())) {
+ $this->assertEquals($sendString, $v->scalarval());
} else {
- $this->assertEquals(str_replace(array("\r\n", "\r"), array("\n", "\n"), $sendstring), $v->scalarval());
+ $this->assertEquals(str_replace(array("\r\n", "\r"), array("\n", "\n"), $sendString), $v->scalarval());
}
}
}
@@ -221,9 +312,9 @@ And turned it into nylon';
public function testCountEntities()
{
- $sendstring = "h'fd>onc>>l>>rw&bpu>q>eonc>>l>>rw&bpu>q>esend($f);
if ($v) {
@@ -422,7 +513,7 @@ And turned it into nylon';
public function testCatchWarnings()
{
- $f = new xmlrpcmsg('examples.generatePHPWarning', array(
+ $f = new xmlrpcmsg('tests.generatePHPWarning', array(
new xmlrpcval('whatever', 'string'),
));
$v = $this->send($f);
@@ -433,7 +524,7 @@ And turned it into nylon';
public function testCatchExceptions()
{
- $f = new xmlrpcmsg('examples.raiseException', array(
+ $f = new xmlrpcmsg('tests.raiseException', array(
new xmlrpcval('whatever', 'string'),
));
$v = $this->send($f, $GLOBALS['xmlrpcerr']['server_error']);
@@ -574,6 +665,12 @@ And turned it into nylon';
if (!$r->faultCode()) {
$v = $r->value();
$v = php_xmlrpc_decode($v);
+
+ // take care for the extra cookie used for coverage collection
+ if (isset($v['PHPUNIT_SELENIUM_TEST_ID'])) {
+ unset($v['PHPUNIT_SELENIUM_TEST_ID']);
+ }
+
// on IIS and Apache getallheaders returns something slightly different...
$this->assertEquals($v, $cookies);
}