nextcloud/tests/lib/AppFramework/Http/RequestStream.php

111 lines
2.3 KiB
PHP
Raw Normal View History

2013-09-28 03:35:24 +04:00
<?php
namespace Test\AppFramework\Http;
2013-09-28 03:35:24 +04:00
/**
* Copy of http://dk1.php.net/manual/en/stream.streamwrapper.example-1.php
* Used to simulate php://input for Request tests
*/
class RequestStream {
protected $position;
protected $varname;
public function stream_open($path, $mode, $options, &$opened_path) {
2013-09-28 03:35:24 +04:00
$url = parse_url($path);
$this->varname = $url["host"];
$this->position = 0;
return true;
}
public function stream_read($count) {
2013-09-28 03:35:24 +04:00
$ret = substr($GLOBALS[$this->varname], $this->position, $count);
$this->position += strlen($ret);
return $ret;
}
public function stream_write($data) {
2013-09-28 03:35:24 +04:00
$left = substr($GLOBALS[$this->varname], 0, $this->position);
$right = substr($GLOBALS[$this->varname], $this->position + strlen($data));
$GLOBALS[$this->varname] = $left . $data . $right;
$this->position += strlen($data);
return strlen($data);
}
public function stream_tell() {
2013-09-28 03:35:24 +04:00
return $this->position;
}
public function stream_eof() {
2013-09-28 03:35:24 +04:00
return $this->position >= strlen($GLOBALS[$this->varname]);
}
public function stream_seek($offset, $whence) {
2013-09-28 03:35:24 +04:00
switch ($whence) {
case SEEK_SET:
if ($offset < strlen($GLOBALS[$this->varname]) && $offset >= 0) {
$this->position = $offset;
return true;
2013-09-28 03:35:24 +04:00
} else {
return false;
2013-09-28 03:35:24 +04:00
}
break;
case SEEK_CUR:
if ($offset >= 0) {
$this->position += $offset;
return true;
2013-09-28 03:35:24 +04:00
} else {
return false;
2013-09-28 03:35:24 +04:00
}
break;
case SEEK_END:
if (strlen($GLOBALS[$this->varname]) + $offset >= 0) {
$this->position = strlen($GLOBALS[$this->varname]) + $offset;
return true;
2013-09-28 03:35:24 +04:00
} else {
return false;
2013-09-28 03:35:24 +04:00
}
break;
default:
return false;
}
}
public function stream_stat() {
$size = strlen($GLOBALS[$this->varname]);
$time = time();
$data = [
2013-09-28 03:35:24 +04:00
'dev' => 0,
'ino' => 0,
'mode' => 0777,
'nlink' => 1,
'uid' => 0,
'gid' => 0,
'rdev' => '',
'size' => $size,
'atime' => $time,
'mtime' => $time,
'ctime' => $time,
'blksize' => -1,
'blocks' => -1,
];
2013-09-28 03:35:24 +04:00
return array_values($data) + $data;
//return false;
}
public function stream_metadata($path, $option, $var) {
if ($option == STREAM_META_TOUCH) {
2013-09-28 03:35:24 +04:00
$url = parse_url($path);
$varname = $url["host"];
if (!isset($GLOBALS[$varname])) {
2013-09-28 03:35:24 +04:00
$GLOBALS[$varname] = '';
}
return true;
}
return false;
}
}