123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- <?php
- namespace TYPO3\PharStreamWrapper;
- /*
- * This file is part of the TYPO3 project.
- *
- * It is free software; you can redistribute it and/or modify it under the terms
- * of the MIT License (MIT). For the full copyright and license information,
- * please read the LICENSE file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
- class Behavior implements Assertable
- {
- const COMMAND_DIR_OPENDIR = 'dir_opendir';
- const COMMAND_MKDIR = 'mkdir';
- const COMMAND_RENAME = 'rename';
- const COMMAND_RMDIR = 'rmdir';
- const COMMAND_STEAM_METADATA = 'stream_metadata';
- const COMMAND_STREAM_OPEN = 'stream_open';
- const COMMAND_UNLINK = 'unlink';
- const COMMAND_URL_STAT = 'url_stat';
- /**
- * @var string[]
- */
- private $availableCommands = array(
- self::COMMAND_DIR_OPENDIR,
- self::COMMAND_MKDIR,
- self::COMMAND_RENAME,
- self::COMMAND_RMDIR,
- self::COMMAND_STEAM_METADATA,
- self::COMMAND_STREAM_OPEN,
- self::COMMAND_UNLINK,
- self::COMMAND_URL_STAT,
- );
- /**
- * @var Assertable[]
- */
- private $assertions;
- /**
- * @param Assertable $assertable
- * @return static
- */
- public function withAssertion(Assertable $assertable)
- {
- $commands = func_get_args();
- array_shift($commands);
- $this->assertCommands($commands);
- $commands = $commands ?: $this->availableCommands;
- $target = clone $this;
- foreach ($commands as $command) {
- $target->assertions[$command] = $assertable;
- }
- return $target;
- }
- /**
- * @param string $path
- * @param string $command
- * @return bool
- */
- public function assert($path, $command)
- {
- $this->assertCommand($command);
- $this->assertAssertionCompleteness();
- return $this->assertions[$command]->assert($path, $command);
- }
- /**
- * @param array $commands
- */
- private function assertCommands(array $commands)
- {
- $unknownCommands = array_diff($commands, $this->availableCommands);
- if (empty($unknownCommands)) {
- return;
- }
- throw new \LogicException(
- sprintf(
- 'Unknown commands: %s',
- implode(', ', $unknownCommands)
- ),
- 1535189881
- );
- }
- private function assertCommand($command)
- {
- if (in_array($command, $this->availableCommands, true)) {
- return;
- }
- throw new \LogicException(
- sprintf(
- 'Unknown command "%s"',
- $command
- ),
- 1535189882
- );
- }
- private function assertAssertionCompleteness()
- {
- $undefinedAssertions = array_diff(
- $this->availableCommands,
- array_keys($this->assertions)
- );
- if (empty($undefinedAssertions)) {
- return;
- }
- throw new \LogicException(
- sprintf(
- 'Missing assertions for commands: %s',
- implode(', ', $undefinedAssertions)
- ),
- 1535189883
- );
- }
- }
|