123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- <?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\BackgroundJob\DummyJobList;
- use Test\TestCase;
- class SimpleCommand implements ICommand {
- public function handle() {
- AsyncBus::$lastCommand = 'SimpleCommand';
- }
- }
- class StateFullCommand implements ICommand {
- private $state;
- function __construct($state) {
- $this->state = $state;
- }
- public function handle() {
- AsyncBus::$lastCommand = $this->state;
- }
- }
- class FilesystemCommand implements ICommand {
- use FileAccess;
- public function handle() {
- AsyncBus::$lastCommand = 'FileAccess';
- }
- }
- function basicFunction() {
- AsyncBus::$lastCommand = 'function';
- }
- // clean class to prevent phpunit putting closure in $this
- class ThisClosureTest {
- private function privateMethod() {
- AsyncBus::$lastCommand = 'closure-this';
- }
- public function test(IBus $bus) {
- $bus->push(function () {
- $this->privateMethod();
- });
- }
- }
- class AsyncBus extends TestCase {
- /**
- * Basic way to check output from a command
- *
- * @var string
- */
- public static $lastCommand;
- /**
- * @var \OCP\BackgroundJob\IJobList
- */
- private $jobList;
- /**
- * @var \OCP\Command\IBus
- */
- private $bus;
- public static function DummyCommand() {
- self::$lastCommand = 'static';
- }
- public function setUp() {
- $this->jobList = new DummyJobList();
- $this->bus = new \OC\Command\AsyncBus($this->jobList);
- self::$lastCommand = '';
- }
- public function testSimpleCommand() {
- $command = new SimpleCommand();
- $this->bus->push($command);
- $this->runJobs();
- $this->assertEquals('SimpleCommand', self::$lastCommand);
- }
- public function testStateFullCommand() {
- $command = new StateFullCommand('foo');
- $this->bus->push($command);
- $this->runJobs();
- $this->assertEquals('foo', self::$lastCommand);
- }
- public function testStaticCallable() {
- $this->bus->push(['\Test\Command\AsyncBus', 'DummyCommand']);
- $this->runJobs();
- $this->assertEquals('static', self::$lastCommand);
- }
- public function testMemberCallable() {
- $command = new StateFullCommand('bar');
- $this->bus->push([$command, 'handle']);
- $this->runJobs();
- $this->assertEquals('bar', self::$lastCommand);
- }
- public function testFunctionCallable() {
- $this->bus->push('\Test\Command\BasicFunction');
- $this->runJobs();
- $this->assertEquals('function', self::$lastCommand);
- }
- public function testClosure() {
- $this->bus->push(function () {
- AsyncBus::$lastCommand = 'closure';
- });
- $this->runJobs();
- $this->assertEquals('closure', self::$lastCommand);
- }
- public function testClosureSelf() {
- $this->bus->push(function () {
- self::$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->bus);
- $this->runJobs();
- $this->assertEquals('closure-this', self::$lastCommand);
- }
- public function testClosureBind() {
- $state = 'bar';
- $this->bus->push(function () use ($state) {
- self::$lastCommand = 'closure-' . $state;
- });
- $this->runJobs();
- $this->assertEquals('closure-bar', self::$lastCommand);
- }
- public function testFileFileAccessCommand() {
- $this->bus->push(new FilesystemCommand());
- $this->assertEquals('', self::$lastCommand);
- $this->runJobs();
- $this->assertEquals('FileAccess', self::$lastCommand);
- }
- public function testFileFileAccessCommandSync() {
- $this->bus->requireSync('\OC\Command\FileAccess');
- $this->bus->push(new FilesystemCommand());
- $this->assertEquals('FileAccess', self::$lastCommand);
- self::$lastCommand = '';
- $this->runJobs();
- $this->assertEquals('', self::$lastCommand);
- }
- private function runJobs() {
- $jobs = $this->jobList->getAll();
- foreach ($jobs as $job) {
- $job->execute($this->jobList);
- }
- }
- }
|