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;
}
/**
- * @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();
} 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($errorCode, $r->faultCode(), 'Error ' . $r->faultCode() . ' connecting to server: ' . $r->faultString());
}
if (!$r->faultCode()) {
- if ($return_response) {
+ if ($returnResponse) {
return $r;
} else {
return $r->value();
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]. " .
"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 = '<?xml version="1.0" encoding="ISO-8859-1"?><methodCall><methodName>examples.stringecho</methodName><params><param><value>'.
+ $sendString.
+ '</value></param></params></methodCall>';
+ $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()
+ {
+ PhpXmlRpc\PhpXmlRpc::$xmlrpc_internalencoding = 'UTF-8';
+ $f = new xmlrpcmsg("tests.utf8methodname." . 'κόσμε', array(
+ new xmlrpcval('hello')
+ ));
+ $v = $this->send($f);
+ if ($v) {
+ $this->assertEquals('hello', $v->scalarval());
+ }
+ PhpXmlRpc\PhpXmlRpc::$xmlrpc_internalencoding = 'ISO-8859-1';
+ }
+
public function testAddingDoubles()
{
// note that rounding errors mean we
new xmlrpcval(true, 'boolean'),
new xmlrpcval(false, 'boolean'),
new xmlrpcval(1, 'boolean'),
- new xmlrpcval(0, 'boolean'),
- //new xmlrpcval('true', 'boolean'),
- //new xmlrpcval('false', 'boolean')
+ new xmlrpcval(0, 'boolean')
),
'array'
),));
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.
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());
}
}
}
public function testCountEntities()
{
- $sendstring = "h'fd>onc>>l>>rw&bpu>q>e<v&gxs<ytjzkami<";
+ $sendString = "h'fd>onc>>l>>rw&bpu>q>e<v&gxs<ytjzkami<";
$f = new xmlrpcmsg('validator1.countTheEntities', array(
- new xmlrpcval($sendstring, 'string'),
+ new xmlrpcval($sendString, 'string'),
));
$v = $this->send($f);
if ($v) {
public function testCatchWarnings()
{
- $f = new xmlrpcmsg('examples.generatePHPWarning', array(
+ $f = new xmlrpcmsg('tests.generatePHPWarning', array(
new xmlrpcval('whatever', 'string'),
));
$v = $this->send($f);
if ($v) {
- $this->assertEquals($v->scalarval(), true);
+ $this->assertEquals(true, $v->scalarval());
}
}
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']);
$f = new xmlrpcmsg('system.MethodHelp');
$f->payload = "<?xml version=\"1.0\"?><methodCall><methodName>validator1.echoStructTest</methodName><params><param><value><struct><member><name>','')); echo('gotcha!'); die(); //</name></member></struct></value></param></params></methodCall>";
$v = $this->send($f);
- //$v = $r->faultCode();
if ($v) {
$this->assertEquals(0, $v->structsize());
}
$cookies[$cookie] = (string)$cookies[$cookie];
}
$r = $this->client->send($f, $this->timeout, $this->method);
- $this->assertEquals($r->faultCode(), 0, 'Error ' . $r->faultCode() . ' connecting to server: ' . $r->faultString());
+ $this->assertEquals(0, $r->faultCode(), 'Error ' . $r->faultCode() . ' connecting to server: ' . $r->faultString());
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);
+ $this->assertEquals($cookies, $v);
}
}
));
$v1 = $this->send($f);
$v2 = $this->send($f);
- //$v = $r->faultCode();
if ($v1 && $v2) {
- $this->assertEquals($v2, $v1);
+ $this->assertEquals($v1, $v2);
}
}
}