%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /data/www_bck/varak.net_bck/warhammer.varak.net/vendor/nette/tester/src/Framework/
Upload File :
Create Path :
Current File : //data/www_bck/varak.net_bck/warhammer.varak.net/vendor/nette/tester/src/Framework/FileMutator.php

<?php

/**
 * This file is part of the Nette Tester.
 * Copyright (c) 2009 David Grudl (https://davidgrudl.com)
 */

namespace Tester;


/**
 * PHP file mutator.
 */
class FileMutator
{
	const PROTOCOL = 'file';

	/** @var resource|null */
	public $context;

	/** @var resource|null */
	private $handle;

	/** @var callable[] */
	private static $mutators = [];


	public static function addMutator(callable $mutator)
	{
		self::$mutators[] = $mutator;
		stream_wrapper_unregister(self::PROTOCOL);
		stream_wrapper_register(self::PROTOCOL, __CLASS__);
	}


	public function dir_closedir()
	{
		closedir($this->handle);
	}


	public function dir_opendir($path, $options)
	{
		$this->handle = $this->native('opendir', $path, $this->context);
		return (bool) $this->handle;
	}


	public function dir_readdir()
	{
		return readdir($this->handle);
	}


	public function dir_rewinddir()
	{
		return rewinddir($this->handle);
	}


	public function mkdir($path, $mode, $options)
	{
		return $this->native('mkdir', $path, $mode, false, $this->context);
	}


	public function rename($pathFrom, $pathTo)
	{
		return $this->native('rename', $pathFrom, $pathTo, $this->context);
	}


	public function rmdir($path, $options)
	{
		return $this->native('rmdir', $path, $this->context);
	}


	public function stream_cast($castAs)
	{
		return $this->handle;
	}


	public function stream_close()
	{
		fclose($this->handle);
	}


	public function stream_eof()
	{
		return feof($this->handle);
	}


	public function stream_flush()
	{
		return fflush($this->handle);
	}


	public function stream_lock($operation)
	{
		return flock($this->handle, $operation);
	}


	public function stream_metadata($path, $option, $value)
	{
		switch ($option) {
			case STREAM_META_TOUCH:
				$value += [null, null];
				return $this->native('touch', $path, $value[0], $value[1]);
			case STREAM_META_OWNER_NAME:
			case STREAM_META_OWNER:
				return $this->native('chown', $path, $value);
			case STREAM_META_GROUP_NAME:
			case STREAM_META_GROUP:
				return $this->native('chgrp', $path, $value);
			case STREAM_META_ACCESS:
				return $this->native('chmod', $path, $value);
		}
	}


	public function stream_open($path, $mode, $options, &$openedPath)
	{
		$usePath = (bool) ($options & STREAM_USE_PATH);
		if (pathinfo($path, PATHINFO_EXTENSION) === 'php') {
			$content = $this->native('file_get_contents', $path, $usePath, $this->context);
			if ($content === false) {
				return false;
			} else {
				foreach (self::$mutators as $mutator) {
					$content = call_user_func($mutator, $content);
				}
				$this->handle = tmpfile();
				$this->native('fwrite', $this->handle, $content);
				$this->native('fseek', $this->handle, 0);
				return true;
			}
		} else {
			$this->handle = $this->context
				? $this->native('fopen', $path, $mode, $usePath, $this->context)
				: $this->native('fopen', $path, $mode, $usePath);
			return (bool) $this->handle;
		}
	}


	public function stream_read($count)
	{
		return fread($this->handle, $count);
	}


	public function stream_seek($offset, $whence = SEEK_SET)
	{
		return fseek($this->handle, $offset, $whence) === 0;
	}


	public function stream_set_option($option, $arg1, $arg2)
	{
	}


	public function stream_stat()
	{
		return fstat($this->handle);
	}


	public function stream_tell()
	{
		return ftell($this->handle);
	}


	public function stream_truncate($newSize)
	{
		return ftruncate($this->handle, $newSize);
	}


	public function stream_write($data)
	{
		return fwrite($this->handle, $data);
	}


	public function unlink($path)
	{
		return $this->native('unlink', $path);
	}


	public function url_stat($path, $flags)
	{
		$func = $flags & STREAM_URL_STAT_LINK ? 'lstat' : 'stat';
		return $flags & STREAM_URL_STAT_QUIET
			? @$this->native($func, $path)
			: $this->native($func, $path);
	}


	private function native($func)
	{
		stream_wrapper_restore(self::PROTOCOL);
		$res = call_user_func_array($func, array_slice(func_get_args(), 1));
		stream_wrapper_unregister(self::PROTOCOL);
		stream_wrapper_register(self::PROTOCOL, __CLASS__);
		return $res;
	}
}

Zerion Mini Shell 1.0