123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- <?php
- /**
- * Copyright (c) 2015 Robin Appelman <icewind@owncloud.com>
- * This file is licensed under the Affero General Public License version 3 or
- * later.
- * See the COPYING-README file.
- */
- namespace Test\Command;
- use OC\Command\FileAccess;
- use OCP\Command\IBus;
- use OCP\Command\ICommand;
- use Test\TestCase;
- class SimpleCommand implements ICommand {
- public function handle() {
- AsyncBusTest::$lastCommand = 'SimpleCommand';
- }
- }
- class StateFullCommand implements ICommand {
- private $state;
- public function __construct($state) {
- $this->state = $state;
- }
- public function handle() {
- AsyncBusTest::$lastCommand = $this->state;
- }
- }
- class FilesystemCommand implements ICommand {
- use FileAccess;
- public function handle() {
- AsyncBusTest::$lastCommand = 'FileAccess';
- }
- }
- function basicFunction() {
- AsyncBusTest::$lastCommand = 'function';
- }
- // clean class to prevent phpunit putting closure in $this
- class ThisClosureTest {
- private function privateMethod() {
- AsyncBusTest::$lastCommand = 'closure-this';
- }
- public function test(IBus $bus) {
- $bus->push(function () {
- $this->privateMethod();
- });
- }
- }
- abstract class AsyncBusTest extends TestCase {
- /**
- * Basic way to check output from a command
- *
- * @var string
- */
- public static $lastCommand;
- /**
- * @var \OCP\Command\IBus
- */
- private $bus;
- public static function DummyCommand() {
- self::$lastCommand = 'static';
- }
- /**
- * @return IBus
- */
- protected function getBus() {
- if (!$this->bus instanceof IBus) {
- $this->bus = $this->createBus();
- }
- return $this->bus;
- }
- /**
- * @return IBus
- */
- abstract protected function createBus();
- protected function setUp(): void {
- self::$lastCommand = '';
- }
- public function testSimpleCommand() {
- $command = new SimpleCommand();
- $this->getBus()->push($command);
- $this->runJobs();
- $this->assertEquals('SimpleCommand', self::$lastCommand);
- }
- public function testStateFullCommand() {
- $command = new StateFullCommand('foo');
- $this->getBus()->push($command);
- $this->runJobs();
- $this->assertEquals('foo', self::$lastCommand);
- }
- public function testStaticCallable() {
- $this->getBus()->push(['\Test\Command\AsyncBusTest', 'DummyCommand']);
- $this->runJobs();
- $this->assertEquals('static', self::$lastCommand);
- }
- public function testMemberCallable() {
- $command = new StateFullCommand('bar');
- $this->getBus()->push([$command, 'handle']);
- $this->runJobs();
- $this->assertEquals('bar', self::$lastCommand);
- }
- public function testFunctionCallable() {
- $this->getBus()->push('\Test\Command\BasicFunction');
- $this->runJobs();
- $this->assertEquals('function', self::$lastCommand);
- }
- public function testClosure() {
- $this->getBus()->push(function () {
- AsyncBusTest::$lastCommand = 'closure';
- });
- $this->runJobs();
- $this->assertEquals('closure', self::$lastCommand);
- }
- public function testClosureSelf() {
- $this->getBus()->push(function () {
- AsyncBusTest::$lastCommand = 'closure-self';
- });
- $this->runJobs();
- $this->assertEquals('closure-self', self::$lastCommand);
- }
- public function testClosureThis() {
- // clean class to prevent phpunit putting closure in $this
- $test = new ThisClosureTest();
- $test->test($this->getBus());
- $this->runJobs();
- $this->assertEquals('closure-this', self::$lastCommand);
- }
- public function testClosureBind() {
- $state = 'bar';
- $this->getBus()->push(function () use ($state) {
- AsyncBusTest::$lastCommand = 'closure-' . $state;
- });
- $this->runJobs();
- $this->assertEquals('closure-bar', self::$lastCommand);
- }
- public function testFileFileAccessCommand() {
- $this->getBus()->push(new FilesystemCommand());
- $this->assertEquals('', self::$lastCommand);
- $this->runJobs();
- $this->assertEquals('FileAccess', self::$lastCommand);
- }
- public function testFileFileAccessCommandSync() {
- $this->getBus()->requireSync('\OC\Command\FileAccess');
- $this->getBus()->push(new FilesystemCommand());
- $this->assertEquals('FileAccess', self::$lastCommand);
- self::$lastCommand = '';
- $this->runJobs();
- $this->assertEquals('', self::$lastCommand);
- }
- abstract protected function runJobs();
- }
|