Skip to content
This repository has been archived by the owner on Apr 28, 2020. It is now read-only.

Commit

Permalink
Fix test dependency with ZF2\AllTest\StreamWrapper\PHPInput
Browse files Browse the repository at this point in the history
  • Loading branch information
Maks3w committed May 26, 2015
1 parent 5b18f41 commit dcea9c8
Show file tree
Hide file tree
Showing 2 changed files with 137 additions and 6 deletions.
131 changes: 131 additions & 0 deletions test/PhpInputMock.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
<?php
/**
* Zend Framework (http://framework.zend.com/)
*
* @link http://github.com/zendframework/zf2 for the canonical source repository
* @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/

namespace ZendTest\XmlRpc;

/**
* Class for mocking php://input
*
* <code>
* class ...
* {
* public function setUp()
* {
* ZendTest\XmlRpc\PhpInputMock::mockInput('expected string');
* }
*
* public function testReadingFromPhpInput()
* {
* $this->assertSame('expected string', file_get_contents('php://input'));
* $this->assertSame('php://input', ZendTest\XmlRpc\PhpInputMock::getCurrentPath());
* }
*
* public function tearDown()
* {
* ZendTest\XmlRpc\PhpInputMock::restoreDefault();
* }
* }
* </code>
*/
class PhpInputMock
{
protected static $_data;

protected static $_returnValues = array();

protected static $_arguments = array();

protected $_position = 0;

public static function mockInput($data)
{
stream_wrapper_unregister('php');
stream_wrapper_register('php', 'ZendTest\XmlRpc\PhpInputMock');
static::$_data = $data;
}

public static function restoreDefault()
{
// Reset static values
static::$_returnValues = array();
static::$_arguments = array();

// Restore original stream wrapper
stream_wrapper_restore('php');
}

public static function methodWillReturn($methodName, $returnValue)
{
$methodName = strtolower($methodName);
static::$_returnValues[$methodName] = $returnValue;
}

public static function argumentsPassedTo($methodName)
{
$methodName = strtolower($methodName);
if (isset(static::$_arguments[$methodName])) {
return static::$_arguments[$methodName];
}

return;
}

public function stream_open()
{
static::$_arguments[__FUNCTION__] = func_get_args();

if (array_key_exists(__FUNCTION__, static::$_returnValues)) {
return static::$_returnValues[__FUNCTION__];
}

return true;
}

public function stream_eof()
{
static::$_arguments[__FUNCTION__] = func_get_args();

if (array_key_exists(__FUNCTION__, static::$_returnValues)) {
return static::$_returnValues[__FUNCTION__];
}

return (0 == strlen(static::$_data));
}

public function stream_read($count)
{
static::$_arguments[__FUNCTION__] = func_get_args();

if (array_key_exists(__FUNCTION__, static::$_returnValues)) {
return static::$_returnValues[__FUNCTION__];
}

// To match the behavior of php://input, we need to clear out the data
// as it is read
if ($count > strlen(static::$_data)) {
$data = static::$_data;
static::$_data = '';
} else {
$data = substr(static::$_data, 0, $count);
static::$_data = substr(static::$_data, $count);
}
return $data;
}

public function stream_stat()
{
static::$_arguments[__FUNCTION__] = func_get_args();

if (array_key_exists(__FUNCTION__, static::$_returnValues)) {
return static::$_returnValues[__FUNCTION__];
}

return array();
}
}
12 changes: 6 additions & 6 deletions test/Request/HttpTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
namespace ZendTest\XmlRpc\Request;

use Zend\XmlRpc\Request;
use ZendTest\AllTests\StreamWrapper\PHPInput;
use ZendTest\XmlRpc\PhpInputMock;

/**
* @group Zend_XmlRpc
Expand Down Expand Up @@ -66,7 +66,7 @@ public function setUp()
$_SERVER['HTTP_HOST'] = 'localhost';
$_SERVER['HTTP_CONTENT_TYPE'] = 'text/xml';
$_SERVER['HTTP_CONTENT_LENGTH'] = strlen($this->xml) + 1;
PHPInput::mockInput($this->xml);
PhpInputMock::mockInput($this->xml);
}

/**
Expand All @@ -76,7 +76,7 @@ public function tearDown()
{
$_SERVER = $this->server;
unset($this->request);
PHPInput::restoreDefault();
PhpInputMock::restoreDefault();
}

public function testGetRawRequest()
Expand Down Expand Up @@ -123,17 +123,17 @@ public function testExtendingClassShouldBeAbleToReceiveMethodAndParams()

public function testHttpRequestReadsFromPhpInput()
{
$this->assertNull(PHPInput::argumentsPassedTo('stream_open'));
$this->assertNull(PhpInputMock::argumentsPassedTo('stream_open'));
$request = new Request\Http();
list($path, $mode) = PHPInput::argumentsPassedTo('stream_open');
list($path, $mode) = PhpInputMock::argumentsPassedTo('stream_open');
$this->assertSame('php://input', $path);
$this->assertSame('rb', $mode);
$this->assertSame($this->xml, $request->getRawRequest());
}

public function testHttpRequestGeneratesFaultIfReadFromPhpInputFails()
{
PHPInput::methodWillReturn('stream_open', false);
PhpInputMock::methodWillReturn('stream_open', false);
$request = new Request\Http();
$this->assertTrue($request->isFault());
$this->assertSame(630, $request->getFault()->getCode());
Expand Down

0 comments on commit dcea9c8

Please sign in to comment.