Files
Component-Builder/libraries/phpspreadsheet/vendor/maennchen/zipstream-php/test/FaultInjectionResource.php
Robot f8b0a5df54 Release of v3.2.5
Add [AllowDynamicProperties] in the base view class for J5. Move the _prepareDocument  above the display call in the base view class. Remove all backward compatibility issues, so JCB will not need the [Backward Compatibility] plugin to run. Added new import powers for custom import of spreadsheets. Move the setDocument and _prepareDocument above the display in the site view and custom admin view. Update the trashhelper layout to work in Joomla 5. Add AllowDynamicProperties (Joomla 4+5) to view class to allow Custom Dynamic Get methods to work without issues. Fix Save failed issue in dynamicGet. #1148. Move all [TEXT, EDITOR, TEXTAREA] fields from [NOT NULL] to [NULL]. Add the DateHelper class and improve the date methods. Add simple SessionHelper class. Add first classes for the new import engine. Improve the [VDM Registry] to be Joomla Registry Compatible. Move all registries to the [VDM Registry] class. Fix Checked Out to be null and not 0. (#1194). Fix created_by, modified_by, checked_out fields in the compiler of the SQL. (#1194). Update all core date fields in table class. (#1188). Update created_by, modified_by, checked_out fields in table class. Implementation of the decentralized Super-Power CORE repository network. (#1190). Fix the noticeboard to display Llewellyn's Joomla Social feed.
2025-02-14 22:59:16 +02:00

142 lines
3.1 KiB
PHP

<?php
declare(strict_types=1);
namespace ZipStream\Test;
class FaultInjectionResource
{
public const NAME = 'zipstream-php-test-broken-resource';
/** @var resource */
public $context;
private array $injectFaults;
private string $mode;
/**
* @return resource
*/
public static function getResource(array $injectFaults)
{
self::register();
return fopen(self::NAME . '://foobar', 'rw+', false, self::createStreamContext($injectFaults));
}
public function stream_open(string $path, string $mode, int $options, string &$opened_path = null): bool
{
$options = stream_context_get_options($this->context);
if (!isset($options[self::NAME]['injectFaults'])) {
return false;
}
$this->mode = $mode;
$this->injectFaults = $options[self::NAME]['injectFaults'];
if ($this->shouldFail(__FUNCTION__)) {
return false;
}
return true;
}
public function stream_write(string $data)
{
if ($this->shouldFail(__FUNCTION__)) {
return false;
}
return true;
}
public function stream_eof()
{
return true;
}
public function stream_seek(int $offset, int $whence): bool
{
if ($this->shouldFail(__FUNCTION__)) {
return false;
}
return true;
}
public function stream_tell(): int
{
if ($this->shouldFail(__FUNCTION__)) {
return false;
}
return 0;
}
public static function register(): void
{
if (!in_array(self::NAME, stream_get_wrappers(), true)) {
stream_wrapper_register(self::NAME, __CLASS__);
}
}
public function stream_stat(): array
{
static $modeMap = [
'r' => 33060,
'rb' => 33060,
'r+' => 33206,
'w' => 33188,
'wb' => 33188,
];
return [
'dev' => 0,
'ino' => 0,
'mode' => $modeMap[$this->mode],
'nlink' => 0,
'uid' => 0,
'gid' => 0,
'rdev' => 0,
'size' => 0,
'atime' => 0,
'mtime' => 0,
'ctime' => 0,
'blksize' => 0,
'blocks' => 0,
];
}
public function url_stat(string $path, int $flags): array
{
return [
'dev' => 0,
'ino' => 0,
'mode' => 0,
'nlink' => 0,
'uid' => 0,
'gid' => 0,
'rdev' => 0,
'size' => 0,
'atime' => 0,
'mtime' => 0,
'ctime' => 0,
'blksize' => 0,
'blocks' => 0,
];
}
private static function createStreamContext(array $injectFaults)
{
return stream_context_create([
self::NAME => ['injectFaults' => $injectFaults],
]);
}
private function shouldFail(string $function): bool
{
return in_array($function, $this->injectFaults, true);
}
}