public function testProvidesDirectoriesForS3()
 {
     $this->setMockResponse($this->client, array('s3/list_objects_page_1', 's3/list_objects_page_2', 's3/list_objects_page_3', 's3/list_objects_page_4', 's3/list_objects_page_5', 's3/list_objects_page_1', 's3/list_objects_page_2', 's3/list_objects_page_3', 's3/list_objects_page_4', 's3/list_objects_page_5'));
     $c = null;
     $this->client->getEventDispatcher()->addListener('client.command.create', function ($e) use(&$c) {
         $c = $e['command'];
     });
     $dir = 's3://bucket/key/';
     $r = opendir($dir);
     $this->assertInternalType('resource', $r);
     // Ensure that the command was created correctly
     $this->assertEquals('bucket', $c['Bucket']);
     $this->assertEquals('/', $c['Delimiter']);
     $this->assertEquals('key/', $c['Prefix']);
     $files = array();
     while (($file = readdir($r)) !== false) {
         $files[] = $file;
     }
     // This is the order that the mock responses should provide
     $expected = array('a/', 'b/', 'c', 'd/', 'e', 'f', 'g/');
     $this->assertEquals($expected, $files);
     $this->assertEquals(5, count($this->getMockedRequests()));
     rewinddir($r);
     $files = array();
     while (($file = readdir($r)) !== false) {
         $files[] = $file;
     }
     $this->assertEquals($expected, $files);
     $this->assertEquals(10, count($this->getMockedRequests()));
     closedir($r);
 }
 public function testCanSetDelimiterStreamContext()
 {
     $this->setMockResponse($this->client, array('s3/list_objects_page_5'));
     $c = null;
     $this->client->getEventDispatcher()->addListener('client.command.create', function ($e) use(&$c) {
         $c = $e['command'];
     });
     $dir = 's3://bucket';
     $r = opendir($dir, stream_context_create(array('s3' => array('delimiter' => ''))));
     $this->assertEquals('bucket', $c['Bucket']);
     $this->assertEquals('', $c['Delimiter']);
     $this->assertEquals('', $c['Prefix']);
     closedir($r);
 }