Hex Artifact Content
Not logged in

Artifact 372578792debcb5f04866040491ea414ed54df97:


0000: 3c 3f 70 68 70 0a 0a 2f 2a 2a 0a 20 2a 20 43 6f  <?php../**. * Co
0010: 70 79 72 69 67 68 74 20 28 63 29 20 32 30 31 35  pyright (c) 2015
0020: 20 52 6f 62 69 6e 20 41 70 70 65 6c 6d 61 6e 20   Robin Appelman 
0030: 3c 69 63 65 77 69 6e 64 40 6f 77 6e 63 6c 6f 75  <icewind@ownclou
0040: 64 2e 63 6f 6d 3e 0a 20 2a 20 54 68 69 73 20 66  d.com>. * This f
0050: 69 6c 65 20 69 73 20 6c 69 63 65 6e 73 65 64 20  ile is licensed 
0060: 75 6e 64 65 72 20 74 68 65 20 41 66 66 65 72 6f  under the Affero
0070: 20 47 65 6e 65 72 61 6c 20 50 75 62 6c 69 63 20   General Public 
0080: 4c 69 63 65 6e 73 65 20 76 65 72 73 69 6f 6e 20  License version 
0090: 33 20 6f 72 0a 20 2a 20 6c 61 74 65 72 2e 0a 20  3 or. * later.. 
00a0: 2a 20 53 65 65 20 74 68 65 20 43 4f 50 59 49 4e  * See the COPYIN
00b0: 47 2d 52 45 41 44 4d 45 20 66 69 6c 65 2e 0a 20  G-README file.. 
00c0: 2a 2f 0a 0a 6e 61 6d 65 73 70 61 63 65 20 54 65  */..namespace Te
00d0: 73 74 5c 43 6f 6d 6d 61 6e 64 3b 0a 0a 75 73 65  st\Command;..use
00e0: 20 4f 43 5c 43 6f 6d 6d 61 6e 64 5c 46 69 6c 65   OC\Command\File
00f0: 41 63 63 65 73 73 3b 0a 75 73 65 20 4f 43 50 5c  Access;.use OCP\
0100: 43 6f 6d 6d 61 6e 64 5c 49 42 75 73 3b 0a 75 73  Command\IBus;.us
0110: 65 20 4f 43 50 5c 43 6f 6d 6d 61 6e 64 5c 49 43  e OCP\Command\IC
0120: 6f 6d 6d 61 6e 64 3b 0a 75 73 65 20 54 65 73 74  ommand;.use Test
0130: 5c 54 65 73 74 43 61 73 65 3b 0a 0a 63 6c 61 73  \TestCase;..clas
0140: 73 20 53 69 6d 70 6c 65 43 6f 6d 6d 61 6e 64 20  s SimpleCommand 
0150: 69 6d 70 6c 65 6d 65 6e 74 73 20 49 43 6f 6d 6d  implements IComm
0160: 61 6e 64 20 7b 0a 09 70 75 62 6c 69 63 20 66 75  and {..public fu
0170: 6e 63 74 69 6f 6e 20 68 61 6e 64 6c 65 28 29 20  nction handle() 
0180: 7b 0a 09 09 41 73 79 6e 63 42 75 73 54 65 73 74  {...AsyncBusTest
0190: 3a 3a 24 6c 61 73 74 43 6f 6d 6d 61 6e 64 20 3d  ::$lastCommand =
01a0: 20 27 53 69 6d 70 6c 65 43 6f 6d 6d 61 6e 64 27   'SimpleCommand'
01b0: 3b 0a 09 7d 0a 7d 0a 0a 63 6c 61 73 73 20 53 74  ;..}.}..class St
01c0: 61 74 65 46 75 6c 6c 43 6f 6d 6d 61 6e 64 20 69  ateFullCommand i
01d0: 6d 70 6c 65 6d 65 6e 74 73 20 49 43 6f 6d 6d 61  mplements IComma
01e0: 6e 64 20 7b 0a 09 70 72 69 76 61 74 65 20 24 73  nd {..private $s
01f0: 74 61 74 65 3b 0a 0a 09 66 75 6e 63 74 69 6f 6e  tate;...function
0200: 20 5f 5f 63 6f 6e 73 74 72 75 63 74 28 24 73 74   __construct($st
0210: 61 74 65 29 20 7b 0a 09 09 24 74 68 69 73 2d 3e  ate) {...$this->
0220: 73 74 61 74 65 20 3d 20 24 73 74 61 74 65 3b 0a  state = $state;.
0230: 09 7d 0a 0a 09 70 75 62 6c 69 63 20 66 75 6e 63  .}...public func
0240: 74 69 6f 6e 20 68 61 6e 64 6c 65 28 29 20 7b 0a  tion handle() {.
0250: 09 09 41 73 79 6e 63 42 75 73 54 65 73 74 3a 3a  ..AsyncBusTest::
0260: 24 6c 61 73 74 43 6f 6d 6d 61 6e 64 20 3d 20 24  $lastCommand = $
0270: 74 68 69 73 2d 3e 73 74 61 74 65 3b 0a 09 7d 0a  this->state;..}.
0280: 7d 0a 0a 63 6c 61 73 73 20 46 69 6c 65 73 79 73  }..class Filesys
0290: 74 65 6d 43 6f 6d 6d 61 6e 64 20 69 6d 70 6c 65  temCommand imple
02a0: 6d 65 6e 74 73 20 49 43 6f 6d 6d 61 6e 64 20 7b  ments ICommand {
02b0: 0a 09 75 73 65 20 46 69 6c 65 41 63 63 65 73 73  ..use FileAccess
02c0: 3b 0a 0a 09 70 75 62 6c 69 63 20 66 75 6e 63 74  ;...public funct
02d0: 69 6f 6e 20 68 61 6e 64 6c 65 28 29 20 7b 0a 09  ion handle() {..
02e0: 09 41 73 79 6e 63 42 75 73 54 65 73 74 3a 3a 24  .AsyncBusTest::$
02f0: 6c 61 73 74 43 6f 6d 6d 61 6e 64 20 3d 20 27 46  lastCommand = 'F
0300: 69 6c 65 41 63 63 65 73 73 27 3b 0a 09 7d 0a 7d  ileAccess';..}.}
0310: 0a 0a 66 75 6e 63 74 69 6f 6e 20 62 61 73 69 63  ..function basic
0320: 46 75 6e 63 74 69 6f 6e 28 29 20 7b 0a 09 41 73  Function() {..As
0330: 79 6e 63 42 75 73 54 65 73 74 3a 3a 24 6c 61 73  yncBusTest::$las
0340: 74 43 6f 6d 6d 61 6e 64 20 3d 20 27 66 75 6e 63  tCommand = 'func
0350: 74 69 6f 6e 27 3b 0a 7d 0a 0a 2f 2f 20 63 6c 65  tion';.}..// cle
0360: 61 6e 20 63 6c 61 73 73 20 74 6f 20 70 72 65 76  an class to prev
0370: 65 6e 74 20 70 68 70 75 6e 69 74 20 70 75 74 74  ent phpunit putt
0380: 69 6e 67 20 63 6c 6f 73 75 72 65 20 69 6e 20 24  ing closure in $
0390: 74 68 69 73 0a 63 6c 61 73 73 20 54 68 69 73 43  this.class ThisC
03a0: 6c 6f 73 75 72 65 54 65 73 74 20 7b 0a 09 70 72  losureTest {..pr
03b0: 69 76 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 70  ivate function p
03c0: 72 69 76 61 74 65 4d 65 74 68 6f 64 28 29 20 7b  rivateMethod() {
03d0: 0a 09 09 41 73 79 6e 63 42 75 73 54 65 73 74 3a  ...AsyncBusTest:
03e0: 3a 24 6c 61 73 74 43 6f 6d 6d 61 6e 64 20 3d 20  :$lastCommand = 
03f0: 27 63 6c 6f 73 75 72 65 2d 74 68 69 73 27 3b 0a  'closure-this';.
0400: 09 7d 0a 0a 09 70 75 62 6c 69 63 20 66 75 6e 63  .}...public func
0410: 74 69 6f 6e 20 74 65 73 74 28 49 42 75 73 20 24  tion test(IBus $
0420: 62 75 73 29 20 7b 0a 09 09 24 62 75 73 2d 3e 70  bus) {...$bus->p
0430: 75 73 68 28 66 75 6e 63 74 69 6f 6e 20 28 29 20  ush(function () 
0440: 7b 0a 09 09 09 24 74 68 69 73 2d 3e 70 72 69 76  {....$this->priv
0450: 61 74 65 4d 65 74 68 6f 64 28 29 3b 0a 09 09 7d  ateMethod();...}
0460: 29 3b 0a 09 7d 0a 7d 0a 0a 61 62 73 74 72 61 63  );..}.}..abstrac
0470: 74 20 63 6c 61 73 73 20 41 73 79 6e 63 42 75 73  t class AsyncBus
0480: 54 65 73 74 20 65 78 74 65 6e 64 73 20 54 65 73  Test extends Tes
0490: 74 43 61 73 65 20 7b 0a 09 2f 2a 2a 0a 09 20 2a  tCase {../**.. *
04a0: 20 42 61 73 69 63 20 77 61 79 20 74 6f 20 63 68   Basic way to ch
04b0: 65 63 6b 20 6f 75 74 70 75 74 20 66 72 6f 6d 20  eck output from 
04c0: 61 20 63 6f 6d 6d 61 6e 64 0a 09 20 2a 0a 09 20  a command.. *.. 
04d0: 2a 20 40 76 61 72 20 73 74 72 69 6e 67 0a 09 20  * @var string.. 
04e0: 2a 2f 0a 09 70 75 62 6c 69 63 20 73 74 61 74 69  */..public stati
04f0: 63 20 24 6c 61 73 74 43 6f 6d 6d 61 6e 64 3b 0a  c $lastCommand;.
0500: 0a 09 2f 2a 2a 0a 09 20 2a 20 40 76 61 72 20 5c  ../**.. * @var \
0510: 4f 43 50 5c 43 6f 6d 6d 61 6e 64 5c 49 42 75 73  OCP\Command\IBus
0520: 0a 09 20 2a 2f 0a 09 70 72 69 76 61 74 65 20 24  .. */..private $
0530: 62 75 73 3b 0a 0a 09 70 75 62 6c 69 63 20 73 74  bus;...public st
0540: 61 74 69 63 20 66 75 6e 63 74 69 6f 6e 20 44 75  atic function Du
0550: 6d 6d 79 43 6f 6d 6d 61 6e 64 28 29 20 7b 0a 09  mmyCommand() {..
0560: 09 73 65 6c 66 3a 3a 24 6c 61 73 74 43 6f 6d 6d  .self::$lastComm
0570: 61 6e 64 20 3d 20 27 73 74 61 74 69 63 27 3b 0a  and = 'static';.
0580: 09 7d 0a 0a 09 2f 2a 2a 0a 09 20 2a 20 40 72 65  .}.../**.. * @re
0590: 74 75 72 6e 20 49 42 75 73 0a 09 20 2a 2f 0a 09  turn IBus.. */..
05a0: 70 72 6f 74 65 63 74 65 64 20 66 75 6e 63 74 69  protected functi
05b0: 6f 6e 20 67 65 74 42 75 73 28 29 20 7b 0a 09 09  on getBus() {...
05c0: 69 66 20 28 21 24 74 68 69 73 2d 3e 62 75 73 20  if (!$this->bus 
05d0: 69 6e 73 74 61 6e 63 65 6f 66 20 49 42 75 73 29  instanceof IBus)
05e0: 20 7b 0a 09 09 09 24 74 68 69 73 2d 3e 62 75 73   {....$this->bus
05f0: 20 3d 20 24 74 68 69 73 2d 3e 63 72 65 61 74 65   = $this->create
0600: 42 75 73 28 29 3b 0a 09 09 7d 0a 09 09 72 65 74  Bus();...}...ret
0610: 75 72 6e 20 24 74 68 69 73 2d 3e 62 75 73 3b 0a  urn $this->bus;.
0620: 09 7d 0a 0a 09 2f 2a 2a 0a 09 20 2a 20 40 72 65  .}.../**.. * @re
0630: 74 75 72 6e 20 49 42 75 73 0a 09 20 2a 2f 0a 09  turn IBus.. */..
0640: 61 62 73 74 72 61 63 74 20 70 72 6f 74 65 63 74  abstract protect
0650: 65 64 20 66 75 6e 63 74 69 6f 6e 20 63 72 65 61  ed function crea
0660: 74 65 42 75 73 28 29 3b 0a 0a 09 70 75 62 6c 69  teBus();...publi
0670: 63 20 66 75 6e 63 74 69 6f 6e 20 73 65 74 55 70  c function setUp
0680: 28 29 20 7b 0a 09 09 73 65 6c 66 3a 3a 24 6c 61  () {...self::$la
0690: 73 74 43 6f 6d 6d 61 6e 64 20 3d 20 27 27 3b 0a  stCommand = '';.
06a0: 09 7d 0a 0a 09 70 75 62 6c 69 63 20 66 75 6e 63  .}...public func
06b0: 74 69 6f 6e 20 74 65 73 74 53 69 6d 70 6c 65 43  tion testSimpleC
06c0: 6f 6d 6d 61 6e 64 28 29 20 7b 0a 09 09 24 63 6f  ommand() {...$co
06d0: 6d 6d 61 6e 64 20 3d 20 6e 65 77 20 53 69 6d 70  mmand = new Simp
06e0: 6c 65 43 6f 6d 6d 61 6e 64 28 29 3b 0a 09 09 24  leCommand();...$
06f0: 74 68 69 73 2d 3e 67 65 74 42 75 73 28 29 2d 3e  this->getBus()->
0700: 70 75 73 68 28 24 63 6f 6d 6d 61 6e 64 29 3b 0a  push($command);.
0710: 09 09 24 74 68 69 73 2d 3e 72 75 6e 4a 6f 62 73  ..$this->runJobs
0720: 28 29 3b 0a 09 09 24 74 68 69 73 2d 3e 61 73 73  ();...$this->ass
0730: 65 72 74 45 71 75 61 6c 73 28 27 53 69 6d 70 6c  ertEquals('Simpl
0740: 65 43 6f 6d 6d 61 6e 64 27 2c 20 73 65 6c 66 3a  eCommand', self:
0750: 3a 24 6c 61 73 74 43 6f 6d 6d 61 6e 64 29 3b 0a  :$lastCommand);.
0760: 09 7d 0a 0a 09 70 75 62 6c 69 63 20 66 75 6e 63  .}...public func
0770: 74 69 6f 6e 20 74 65 73 74 53 74 61 74 65 46 75  tion testStateFu
0780: 6c 6c 43 6f 6d 6d 61 6e 64 28 29 20 7b 0a 09 09  llCommand() {...
0790: 24 63 6f 6d 6d 61 6e 64 20 3d 20 6e 65 77 20 53  $command = new S
07a0: 74 61 74 65 46 75 6c 6c 43 6f 6d 6d 61 6e 64 28  tateFullCommand(
07b0: 27 66 6f 6f 27 29 3b 0a 09 09 24 74 68 69 73 2d  'foo');...$this-
07c0: 3e 67 65 74 42 75 73 28 29 2d 3e 70 75 73 68 28  >getBus()->push(
07d0: 24 63 6f 6d 6d 61 6e 64 29 3b 0a 09 09 24 74 68  $command);...$th
07e0: 69 73 2d 3e 72 75 6e 4a 6f 62 73 28 29 3b 0a 09  is->runJobs();..
07f0: 09 24 74 68 69 73 2d 3e 61 73 73 65 72 74 45 71  .$this->assertEq
0800: 75 61 6c 73 28 27 66 6f 6f 27 2c 20 73 65 6c 66  uals('foo', self
0810: 3a 3a 24 6c 61 73 74 43 6f 6d 6d 61 6e 64 29 3b  ::$lastCommand);
0820: 0a 09 7d 0a 0a 09 70 75 62 6c 69 63 20 66 75 6e  ..}...public fun
0830: 63 74 69 6f 6e 20 74 65 73 74 53 74 61 74 69 63  ction testStatic
0840: 43 61 6c 6c 61 62 6c 65 28 29 20 7b 0a 09 09 24  Callable() {...$
0850: 74 68 69 73 2d 3e 67 65 74 42 75 73 28 29 2d 3e  this->getBus()->
0860: 70 75 73 68 28 5b 27 5c 54 65 73 74 5c 43 6f 6d  push(['\Test\Com
0870: 6d 61 6e 64 5c 41 73 79 6e 63 42 75 73 54 65 73  mand\AsyncBusTes
0880: 74 27 2c 20 27 44 75 6d 6d 79 43 6f 6d 6d 61 6e  t', 'DummyComman
0890: 64 27 5d 29 3b 0a 09 09 24 74 68 69 73 2d 3e 72  d']);...$this->r
08a0: 75 6e 4a 6f 62 73 28 29 3b 0a 09 09 24 74 68 69  unJobs();...$thi
08b0: 73 2d 3e 61 73 73 65 72 74 45 71 75 61 6c 73 28  s->assertEquals(
08c0: 27 73 74 61 74 69 63 27 2c 20 73 65 6c 66 3a 3a  'static', self::
08d0: 24 6c 61 73 74 43 6f 6d 6d 61 6e 64 29 3b 0a 09  $lastCommand);..
08e0: 7d 0a 0a 09 70 75 62 6c 69 63 20 66 75 6e 63 74  }...public funct
08f0: 69 6f 6e 20 74 65 73 74 4d 65 6d 62 65 72 43 61  ion testMemberCa
0900: 6c 6c 61 62 6c 65 28 29 20 7b 0a 09 09 24 63 6f  llable() {...$co
0910: 6d 6d 61 6e 64 20 3d 20 6e 65 77 20 53 74 61 74  mmand = new Stat
0920: 65 46 75 6c 6c 43 6f 6d 6d 61 6e 64 28 27 62 61  eFullCommand('ba
0930: 72 27 29 3b 0a 09 09 24 74 68 69 73 2d 3e 67 65  r');...$this->ge
0940: 74 42 75 73 28 29 2d 3e 70 75 73 68 28 5b 24 63  tBus()->push([$c
0950: 6f 6d 6d 61 6e 64 2c 20 27 68 61 6e 64 6c 65 27  ommand, 'handle'
0960: 5d 29 3b 0a 09 09 24 74 68 69 73 2d 3e 72 75 6e  ]);...$this->run
0970: 4a 6f 62 73 28 29 3b 0a 09 09 24 74 68 69 73 2d  Jobs();...$this-
0980: 3e 61 73 73 65 72 74 45 71 75 61 6c 73 28 27 62  >assertEquals('b
0990: 61 72 27 2c 20 73 65 6c 66 3a 3a 24 6c 61 73 74  ar', self::$last
09a0: 43 6f 6d 6d 61 6e 64 29 3b 0a 09 7d 0a 0a 09 70  Command);..}...p
09b0: 75 62 6c 69 63 20 66 75 6e 63 74 69 6f 6e 20 74  ublic function t
09c0: 65 73 74 46 75 6e 63 74 69 6f 6e 43 61 6c 6c 61  estFunctionCalla
09d0: 62 6c 65 28 29 20 7b 0a 09 09 24 74 68 69 73 2d  ble() {...$this-
09e0: 3e 67 65 74 42 75 73 28 29 2d 3e 70 75 73 68 28  >getBus()->push(
09f0: 27 5c 54 65 73 74 5c 43 6f 6d 6d 61 6e 64 5c 42  '\Test\Command\B
0a00: 61 73 69 63 46 75 6e 63 74 69 6f 6e 27 29 3b 0a  asicFunction');.
0a10: 09 09 24 74 68 69 73 2d 3e 72 75 6e 4a 6f 62 73  ..$this->runJobs
0a20: 28 29 3b 0a 09 09 24 74 68 69 73 2d 3e 61 73 73  ();...$this->ass
0a30: 65 72 74 45 71 75 61 6c 73 28 27 66 75 6e 63 74  ertEquals('funct
0a40: 69 6f 6e 27 2c 20 73 65 6c 66 3a 3a 24 6c 61 73  ion', self::$las
0a50: 74 43 6f 6d 6d 61 6e 64 29 3b 0a 09 7d 0a 0a 09  tCommand);..}...
0a60: 70 75 62 6c 69 63 20 66 75 6e 63 74 69 6f 6e 20  public function 
0a70: 74 65 73 74 43 6c 6f 73 75 72 65 28 29 20 7b 0a  testClosure() {.
0a80: 09 09 24 74 68 69 73 2d 3e 67 65 74 42 75 73 28  ..$this->getBus(
0a90: 29 2d 3e 70 75 73 68 28 66 75 6e 63 74 69 6f 6e  )->push(function
0aa0: 20 28 29 20 7b 0a 09 09 09 41 73 79 6e 63 42 75   () {....AsyncBu
0ab0: 73 54 65 73 74 3a 3a 24 6c 61 73 74 43 6f 6d 6d  sTest::$lastComm
0ac0: 61 6e 64 20 3d 20 27 63 6c 6f 73 75 72 65 27 3b  and = 'closure';
0ad0: 0a 09 09 7d 29 3b 0a 09 09 24 74 68 69 73 2d 3e  ...});...$this->
0ae0: 72 75 6e 4a 6f 62 73 28 29 3b 0a 09 09 24 74 68  runJobs();...$th
0af0: 69 73 2d 3e 61 73 73 65 72 74 45 71 75 61 6c 73  is->assertEquals
0b00: 28 27 63 6c 6f 73 75 72 65 27 2c 20 73 65 6c 66  ('closure', self
0b10: 3a 3a 24 6c 61 73 74 43 6f 6d 6d 61 6e 64 29 3b  ::$lastCommand);
0b20: 0a 09 7d 0a 0a 09 70 75 62 6c 69 63 20 66 75 6e  ..}...public fun
0b30: 63 74 69 6f 6e 20 74 65 73 74 43 6c 6f 73 75 72  ction testClosur
0b40: 65 53 65 6c 66 28 29 20 7b 0a 09 09 24 74 68 69  eSelf() {...$thi
0b50: 73 2d 3e 67 65 74 42 75 73 28 29 2d 3e 70 75 73  s->getBus()->pus
0b60: 68 28 66 75 6e 63 74 69 6f 6e 20 28 29 20 7b 0a  h(function () {.
0b70: 09 09 09 73 65 6c 66 3a 3a 24 6c 61 73 74 43 6f  ...self::$lastCo
0b80: 6d 6d 61 6e 64 20 3d 20 27 63 6c 6f 73 75 72 65  mmand = 'closure
0b90: 2d 73 65 6c 66 27 3b 0a 09 09 7d 29 3b 0a 09 09  -self';...});...
0ba0: 24 74 68 69 73 2d 3e 72 75 6e 4a 6f 62 73 28 29  $this->runJobs()
0bb0: 3b 0a 09 09 24 74 68 69 73 2d 3e 61 73 73 65 72  ;...$this->asser
0bc0: 74 45 71 75 61 6c 73 28 27 63 6c 6f 73 75 72 65  tEquals('closure
0bd0: 2d 73 65 6c 66 27 2c 20 73 65 6c 66 3a 3a 24 6c  -self', self::$l
0be0: 61 73 74 43 6f 6d 6d 61 6e 64 29 3b 0a 09 7d 0a  astCommand);..}.
0bf0: 0a 0a 09 70 75 62 6c 69 63 20 66 75 6e 63 74 69  ...public functi
0c00: 6f 6e 20 74 65 73 74 43 6c 6f 73 75 72 65 54 68  on testClosureTh
0c10: 69 73 28 29 20 7b 0a 09 09 2f 2f 20 63 6c 65 61  is() {...// clea
0c20: 6e 20 63 6c 61 73 73 20 74 6f 20 70 72 65 76 65  n class to preve
0c30: 6e 74 20 70 68 70 75 6e 69 74 20 70 75 74 74 69  nt phpunit putti
0c40: 6e 67 20 63 6c 6f 73 75 72 65 20 69 6e 20 24 74  ng closure in $t
0c50: 68 69 73 0a 09 09 24 74 65 73 74 20 3d 20 6e 65  his...$test = ne
0c60: 77 20 54 68 69 73 43 6c 6f 73 75 72 65 54 65 73  w ThisClosureTes
0c70: 74 28 29 3b 0a 09 09 24 74 65 73 74 2d 3e 74 65  t();...$test->te
0c80: 73 74 28 24 74 68 69 73 2d 3e 67 65 74 42 75 73  st($this->getBus
0c90: 28 29 29 3b 0a 09 09 24 74 68 69 73 2d 3e 72 75  ());...$this->ru
0ca0: 6e 4a 6f 62 73 28 29 3b 0a 09 09 24 74 68 69 73  nJobs();...$this
0cb0: 2d 3e 61 73 73 65 72 74 45 71 75 61 6c 73 28 27  ->assertEquals('
0cc0: 63 6c 6f 73 75 72 65 2d 74 68 69 73 27 2c 20 73  closure-this', s
0cd0: 65 6c 66 3a 3a 24 6c 61 73 74 43 6f 6d 6d 61 6e  elf::$lastComman
0ce0: 64 29 3b 0a 09 7d 0a 0a 09 70 75 62 6c 69 63 20  d);..}...public 
0cf0: 66 75 6e 63 74 69 6f 6e 20 74 65 73 74 43 6c 6f  function testClo
0d00: 73 75 72 65 42 69 6e 64 28 29 20 7b 0a 09 09 24  sureBind() {...$
0d10: 73 74 61 74 65 20 3d 20 27 62 61 72 27 3b 0a 09  state = 'bar';..
0d20: 09 24 74 68 69 73 2d 3e 67 65 74 42 75 73 28 29  .$this->getBus()
0d30: 2d 3e 70 75 73 68 28 66 75 6e 63 74 69 6f 6e 20  ->push(function 
0d40: 28 29 20 75 73 65 20 28 24 73 74 61 74 65 29 20  () use ($state) 
0d50: 7b 0a 09 09 09 73 65 6c 66 3a 3a 24 6c 61 73 74  {....self::$last
0d60: 43 6f 6d 6d 61 6e 64 20 3d 20 27 63 6c 6f 73 75  Command = 'closu
0d70: 72 65 2d 27 20 2e 20 24 73 74 61 74 65 3b 0a 09  re-' . $state;..
0d80: 09 7d 29 3b 0a 09 09 24 74 68 69 73 2d 3e 72 75  .});...$this->ru
0d90: 6e 4a 6f 62 73 28 29 3b 0a 09 09 24 74 68 69 73  nJobs();...$this
0da0: 2d 3e 61 73 73 65 72 74 45 71 75 61 6c 73 28 27  ->assertEquals('
0db0: 63 6c 6f 73 75 72 65 2d 62 61 72 27 2c 20 73 65  closure-bar', se
0dc0: 6c 66 3a 3a 24 6c 61 73 74 43 6f 6d 6d 61 6e 64  lf::$lastCommand
0dd0: 29 3b 0a 09 7d 0a 0a 09 70 75 62 6c 69 63 20 66  );..}...public f
0de0: 75 6e 63 74 69 6f 6e 20 74 65 73 74 46 69 6c 65  unction testFile
0df0: 46 69 6c 65 41 63 63 65 73 73 43 6f 6d 6d 61 6e  FileAccessComman
0e00: 64 28 29 20 7b 0a 09 09 24 74 68 69 73 2d 3e 67  d() {...$this->g
0e10: 65 74 42 75 73 28 29 2d 3e 70 75 73 68 28 6e 65  etBus()->push(ne
0e20: 77 20 46 69 6c 65 73 79 73 74 65 6d 43 6f 6d 6d  w FilesystemComm
0e30: 61 6e 64 28 29 29 3b 0a 09 09 24 74 68 69 73 2d  and());...$this-
0e40: 3e 61 73 73 65 72 74 45 71 75 61 6c 73 28 27 27  >assertEquals(''
0e50: 2c 20 73 65 6c 66 3a 3a 24 6c 61 73 74 43 6f 6d  , self::$lastCom
0e60: 6d 61 6e 64 29 3b 0a 09 09 24 74 68 69 73 2d 3e  mand);...$this->
0e70: 72 75 6e 4a 6f 62 73 28 29 3b 0a 09 09 24 74 68  runJobs();...$th
0e80: 69 73 2d 3e 61 73 73 65 72 74 45 71 75 61 6c 73  is->assertEquals
0e90: 28 27 46 69 6c 65 41 63 63 65 73 73 27 2c 20 73  ('FileAccess', s
0ea0: 65 6c 66 3a 3a 24 6c 61 73 74 43 6f 6d 6d 61 6e  elf::$lastComman
0eb0: 64 29 3b 0a 09 7d 0a 0a 09 70 75 62 6c 69 63 20  d);..}...public 
0ec0: 66 75 6e 63 74 69 6f 6e 20 74 65 73 74 46 69 6c  function testFil
0ed0: 65 46 69 6c 65 41 63 63 65 73 73 43 6f 6d 6d 61  eFileAccessComma
0ee0: 6e 64 53 79 6e 63 28 29 20 7b 0a 09 09 24 74 68  ndSync() {...$th
0ef0: 69 73 2d 3e 67 65 74 42 75 73 28 29 2d 3e 72 65  is->getBus()->re
0f00: 71 75 69 72 65 53 79 6e 63 28 27 5c 4f 43 5c 43  quireSync('\OC\C
0f10: 6f 6d 6d 61 6e 64 5c 46 69 6c 65 41 63 63 65 73  ommand\FileAcces
0f20: 73 27 29 3b 0a 09 09 24 74 68 69 73 2d 3e 67 65  s');...$this->ge
0f30: 74 42 75 73 28 29 2d 3e 70 75 73 68 28 6e 65 77  tBus()->push(new
0f40: 20 46 69 6c 65 73 79 73 74 65 6d 43 6f 6d 6d 61   FilesystemComma
0f50: 6e 64 28 29 29 3b 0a 09 09 24 74 68 69 73 2d 3e  nd());...$this->
0f60: 61 73 73 65 72 74 45 71 75 61 6c 73 28 27 46 69  assertEquals('Fi
0f70: 6c 65 41 63 63 65 73 73 27 2c 20 73 65 6c 66 3a  leAccess', self:
0f80: 3a 24 6c 61 73 74 43 6f 6d 6d 61 6e 64 29 3b 0a  :$lastCommand);.
0f90: 09 09 73 65 6c 66 3a 3a 24 6c 61 73 74 43 6f 6d  ..self::$lastCom
0fa0: 6d 61 6e 64 20 3d 20 27 27 3b 0a 09 09 24 74 68  mand = '';...$th
0fb0: 69 73 2d 3e 72 75 6e 4a 6f 62 73 28 29 3b 0a 09  is->runJobs();..
0fc0: 09 24 74 68 69 73 2d 3e 61 73 73 65 72 74 45 71  .$this->assertEq
0fd0: 75 61 6c 73 28 27 27 2c 20 73 65 6c 66 3a 3a 24  uals('', self::$
0fe0: 6c 61 73 74 43 6f 6d 6d 61 6e 64 29 3b 0a 09 7d  lastCommand);..}
0ff0: 0a 0a 0a 09 61 62 73 74 72 61 63 74 20 70 72 6f  ....abstract pro
1000: 74 65 63 74 65 64 20 66 75 6e 63 74 69 6f 6e 20  tected function 
1010: 72 75 6e 4a 6f 62 73 28 29 3b 0a 7d 0a           runJobs();.}.