Version 1
[yaffs-website] / vendor / mikey179 / vfsStream / src / test / php / org / bovigo / vfs / vfsStreamWrapperFileTestCase.php
diff --git a/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamWrapperFileTestCase.php b/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamWrapperFileTestCase.php
new file mode 100644 (file)
index 0000000..3ac9fb8
--- /dev/null
@@ -0,0 +1,457 @@
+<?php
+/**
+ * This file is part of vfsStream.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @package  org\bovigo\vfs
+ */
+namespace org\bovigo\vfs;
+require_once __DIR__ . '/vfsStreamWrapperBaseTestCase.php';
+/**
+ * Test for org\bovigo\vfs\vfsStreamWrapper.
+ */
+class vfsStreamWrapperFileTestCase extends vfsStreamWrapperBaseTestCase
+{
+    /**
+     * assert that file_get_contents() delivers correct file contents
+     *
+     * @test
+     */
+    public function file_get_contents()
+    {
+        $this->assertEquals('baz2', file_get_contents($this->baz2URL));
+        $this->assertEquals('baz 1', file_get_contents($this->baz1URL));
+        $this->assertFalse(@file_get_contents($this->barURL));
+        $this->assertFalse(@file_get_contents($this->fooURL));
+    }
+
+    /**
+     * @test
+     * @group  permissions
+     * @group  bug_15
+     */
+    public function file_get_contentsNonReadableFile()
+    {
+        vfsStreamWrapper::register();
+        vfsStreamWrapper::setRoot(new vfsStreamDirectory('root'));
+        vfsStream::newFile('new.txt', 0000)->at(vfsStreamWrapper::getRoot())->withContent('content');
+        $this->assertEquals('', @file_get_contents(vfsStream::url('root/new.txt')));
+    }
+
+    /**
+     * assert that file_put_contents() delivers correct file contents
+     *
+     * @test
+     */
+    public function file_put_contentsExistingFile()
+    {
+        $this->assertEquals(14, file_put_contents($this->baz2URL, 'baz is not bar'));
+        $this->assertEquals('baz is not bar', $this->baz2->getContent());
+        $this->assertEquals(6, file_put_contents($this->baz1URL, 'foobar'));
+        $this->assertEquals('foobar', $this->baz1->getContent());
+        $this->assertFalse(@file_put_contents($this->barURL, 'This does not work.'));
+        $this->assertFalse(@file_put_contents($this->fooURL, 'This does not work, too.'));
+    }
+
+    /**
+     * @test
+     * @group  permissions
+     * @group  bug_15
+     */
+    public function file_put_contentsExistingFileNonWritableDirectory()
+    {
+        vfsStreamWrapper::register();
+        vfsStreamWrapper::setRoot(new vfsStreamDirectory('root', 0000));
+        vfsStream::newFile('new.txt')->at(vfsStreamWrapper::getRoot())->withContent('content');
+        $this->assertEquals(15, @file_put_contents(vfsStream::url('root/new.txt'), 'This does work.'));
+        $this->assertEquals('This does work.', file_get_contents(vfsStream::url('root/new.txt')));
+
+    }
+
+    /**
+     * @test
+     * @group  permissions
+     * @group  bug_15
+     */
+    public function file_put_contentsExistingNonWritableFile()
+    {
+        vfsStreamWrapper::register();
+        vfsStreamWrapper::setRoot(new vfsStreamDirectory('root'));
+        vfsStream::newFile('new.txt', 0400)->at(vfsStreamWrapper::getRoot())->withContent('content');
+        $this->assertFalse(@file_put_contents(vfsStream::url('root/new.txt'), 'This does not work.'));
+        $this->assertEquals('content', file_get_contents(vfsStream::url('root/new.txt')));
+    }
+
+    /**
+     * assert that file_put_contents() delivers correct file contents
+     *
+     * @test
+     */
+    public function file_put_contentsNonExistingFile()
+    {
+        $this->assertEquals(14, file_put_contents($this->fooURL . '/baznot.bar', 'baz is not bar'));
+        $this->assertEquals(3, count($this->foo->getChildren()));
+        $this->assertEquals(14, file_put_contents($this->barURL . '/baznot.bar', 'baz is not bar'));
+        $this->assertEquals(2, count($this->bar->getChildren()));
+    }
+
+    /**
+     * @test
+     * @group  permissions
+     * @group  bug_15
+     */
+    public function file_put_contentsNonExistingFileNonWritableDirectory()
+    {
+        vfsStreamWrapper::register();
+        vfsStreamWrapper::setRoot(new vfsStreamDirectory('root', 0000));
+        $this->assertFalse(@file_put_contents(vfsStream::url('root/new.txt'), 'This does not work.'));
+        $this->assertFalse(file_exists(vfsStream::url('root/new.txt')));
+
+    }
+
+    /**
+     * using a file pointer should work without any problems
+     *
+     * @test
+     */
+    public function usingFilePointer()
+    {
+        $fp = fopen($this->baz1URL, 'r');
+        $this->assertEquals(0, ftell($fp));
+        $this->assertFalse(feof($fp));
+        $this->assertEquals(0, fseek($fp, 2));
+        $this->assertEquals(2, ftell($fp));
+        $this->assertEquals(0, fseek($fp, 1, SEEK_CUR));
+        $this->assertEquals(3, ftell($fp));
+        $this->assertEquals(0, fseek($fp, 1, SEEK_END));
+        $this->assertEquals(6, ftell($fp));
+        $this->assertTrue(feof($fp));
+        $this->assertEquals(0, fseek($fp, 2));
+        $this->assertFalse(feof($fp));
+        $this->assertEquals(2, ftell($fp));
+        $this->assertEquals('z', fread($fp, 1));
+        $this->assertEquals(3, ftell($fp));
+        $this->assertEquals(' 1', fread($fp, 8092));
+        $this->assertEquals(5, ftell($fp));
+        $this->assertTrue(fclose($fp));
+    }
+
+    /**
+     * assert is_file() returns correct result
+     *
+     * @test
+     */
+    public function is_file()
+    {
+        $this->assertFalse(is_file($this->fooURL));
+        $this->assertFalse(is_file($this->barURL));
+        $this->assertTrue(is_file($this->baz1URL));
+        $this->assertTrue(is_file($this->baz2URL));
+        $this->assertFalse(is_file($this->fooURL . '/another'));
+        $this->assertFalse(is_file(vfsStream::url('another')));
+    }
+
+    /**
+     * @test
+     * @group  issue7
+     * @group  issue13
+     */
+    public function issue13CanNotOverwriteFiles()
+    {
+        $vfsFile = vfsStream::url('foo/overwrite.txt');
+        file_put_contents($vfsFile, 'test');
+        file_put_contents($vfsFile, 'd');
+        $this->assertEquals('d', file_get_contents($vfsFile));
+    }
+
+    /**
+     * @test
+     * @group  issue7
+     * @group  issue13
+     */
+    public function appendContentIfOpenedWithModeA()
+    {
+        $vfsFile = vfsStream::url('foo/overwrite.txt');
+        file_put_contents($vfsFile, 'test');
+        $fp = fopen($vfsFile, 'ab');
+        fwrite($fp, 'd');
+        fclose($fp);
+        $this->assertEquals('testd', file_get_contents($vfsFile));
+    }
+
+    /**
+     * @test
+     * @group  issue7
+     * @group  issue13
+     */
+    public function canOverwriteNonExistingFileWithModeX()
+    {
+        $vfsFile = vfsStream::url('foo/overwrite.txt');
+        $fp = fopen($vfsFile, 'xb');
+        fwrite($fp, 'test');
+        fclose($fp);
+        $this->assertEquals('test', file_get_contents($vfsFile));
+    }
+
+    /**
+     * @test
+     * @group  issue7
+     * @group  issue13
+     */
+    public function canNotOverwriteExistingFileWithModeX()
+    {
+        $vfsFile = vfsStream::url('foo/overwrite.txt');
+        file_put_contents($vfsFile, 'test');
+        $this->assertFalse(@fopen($vfsFile, 'xb'));
+        $this->assertEquals('test', file_get_contents($vfsFile));
+    }
+
+    /**
+     * @test
+     * @group  issue7
+     * @group  issue13
+     */
+    public function canNotOpenNonExistingFileReadonly()
+    {
+        $this->assertFalse(@fopen(vfsStream::url('foo/doesNotExist.txt'), 'rb'));
+    }
+
+    /**
+     * @test
+     * @group  issue7
+     * @group  issue13
+     */
+    public function canNotOpenNonExistingFileReadAndWrite()
+    {
+        $this->assertFalse(@fopen(vfsStream::url('foo/doesNotExist.txt'), 'rb+'));
+    }
+
+    /**
+     * @test
+     * @group  issue7
+     * @group  issue13
+     */
+    public function canNotOpenWithIllegalMode()
+    {
+        $this->assertFalse(@fopen($this->baz2URL, 'invalid'));
+    }
+
+    /**
+     * @test
+     * @group  issue7
+     * @group  issue13
+     */
+    public function canNotWriteToReadOnlyFile()
+    {
+        $fp = fopen($this->baz2URL, 'rb');
+        $this->assertEquals('baz2', fread($fp, 4096));
+        $this->assertEquals(0, fwrite($fp, 'foo'));
+        fclose($fp);
+        $this->assertEquals('baz2', file_get_contents($this->baz2URL));
+    }
+
+    /**
+     * @test
+     * @group  issue7
+     * @group  issue13
+     */
+    public function canNotReadFromWriteOnlyFileWithModeW()
+    {
+        $fp = fopen($this->baz2URL, 'wb');
+        $this->assertEquals('', fread($fp, 4096));
+        $this->assertEquals(3, fwrite($fp, 'foo'));
+        fseek($fp, 0);
+        $this->assertEquals('', fread($fp, 4096));
+        fclose($fp);
+        $this->assertEquals('foo', file_get_contents($this->baz2URL));
+    }
+
+    /**
+     * @test
+     * @group  issue7
+     * @group  issue13
+     */
+    public function canNotReadFromWriteOnlyFileWithModeA()
+    {
+        $fp = fopen($this->baz2URL, 'ab');
+        $this->assertEquals('', fread($fp, 4096));
+        $this->assertEquals(3, fwrite($fp, 'foo'));
+        fseek($fp, 0);
+        $this->assertEquals('', fread($fp, 4096));
+        fclose($fp);
+        $this->assertEquals('baz2foo', file_get_contents($this->baz2URL));
+    }
+
+    /**
+     * @test
+     * @group  issue7
+     * @group  issue13
+     */
+    public function canNotReadFromWriteOnlyFileWithModeX()
+    {
+        $vfsFile = vfsStream::url('foo/modeXtest.txt');
+        $fp = fopen($vfsFile, 'xb');
+        $this->assertEquals('', fread($fp, 4096));
+        $this->assertEquals(3, fwrite($fp, 'foo'));
+        fseek($fp, 0);
+        $this->assertEquals('', fread($fp, 4096));
+        fclose($fp);
+        $this->assertEquals('foo', file_get_contents($vfsFile));
+    }
+
+    /**
+     * @test
+     * @group  permissions
+     * @group  bug_15
+     */
+    public function canNotRemoveFileFromDirectoryWithoutWritePermissions()
+    {
+        vfsStreamWrapper::register();
+        vfsStreamWrapper::setRoot(new vfsStreamDirectory('root', 0000));
+        vfsStream::newFile('new.txt')->at(vfsStreamWrapper::getRoot());
+        $this->assertFalse(unlink(vfsStream::url('root/new.txt')));
+        $this->assertTrue(file_exists(vfsStream::url('root/new.txt')));
+    }
+
+    /**
+     * @test
+     * @group  issue_30
+     */
+    public function truncatesFileWhenOpenedWithModeW()
+    {
+        $vfsFile = vfsStream::url('foo/overwrite.txt');
+        file_put_contents($vfsFile, 'test');
+        $fp = fopen($vfsFile, 'wb');
+        $this->assertEquals('', file_get_contents($vfsFile));
+        fclose($fp);
+    }
+
+    /**
+     * @test
+     * @group  issue_30
+     */
+    public function createsNonExistingFileWhenOpenedWithModeC()
+    {
+        $vfsFile = vfsStream::url('foo/tobecreated.txt');
+        $fp = fopen($vfsFile, 'cb');
+        fwrite($fp, 'some content');
+        $this->assertTrue($this->foo->hasChild('tobecreated.txt'));
+        fclose($fp);
+        $this->assertEquals('some content', file_get_contents($vfsFile));
+    }
+
+    /**
+     * @test
+     * @group  issue_30
+     */
+    public function createsNonExistingFileWhenOpenedWithModeCplus()
+    {
+        $vfsFile = vfsStream::url('foo/tobecreated.txt');
+        $fp = fopen($vfsFile, 'cb+');
+        fwrite($fp, 'some content');
+        $this->assertTrue($this->foo->hasChild('tobecreated.txt'));
+        fclose($fp);
+        $this->assertEquals('some content', file_get_contents($vfsFile));
+    }
+
+    /**
+     * @test
+     * @group  issue_30
+     */
+    public function doesNotTruncateFileWhenOpenedWithModeC()
+    {
+        $vfsFile = vfsStream::url('foo/overwrite.txt');
+        file_put_contents($vfsFile, 'test');
+        $fp = fopen($vfsFile, 'cb');
+        $this->assertEquals('test', file_get_contents($vfsFile));
+        fclose($fp);
+    }
+
+    /**
+     * @test
+     * @group  issue_30
+     */
+    public function setsPointerToStartWhenOpenedWithModeC()
+    {
+        $vfsFile = vfsStream::url('foo/overwrite.txt');
+        file_put_contents($vfsFile, 'test');
+        $fp = fopen($vfsFile, 'cb');
+        $this->assertEquals(0, ftell($fp));
+        fclose($fp);
+    }
+
+    /**
+     * @test
+     * @group  issue_30
+     */
+    public function doesNotTruncateFileWhenOpenedWithModeCplus()
+    {
+        $vfsFile = vfsStream::url('foo/overwrite.txt');
+        file_put_contents($vfsFile, 'test');
+        $fp = fopen($vfsFile, 'cb+');
+        $this->assertEquals('test', file_get_contents($vfsFile));
+        fclose($fp);
+    }
+
+    /**
+     * @test
+     * @group  issue_30
+     */
+    public function setsPointerToStartWhenOpenedWithModeCplus()
+    {
+        $vfsFile = vfsStream::url('foo/overwrite.txt');
+        file_put_contents($vfsFile, 'test');
+        $fp = fopen($vfsFile, 'cb+');
+        $this->assertEquals(0, ftell($fp));
+        fclose($fp);
+    }
+
+    /**
+     * @test
+     */
+    public function cannotOpenExistingNonwritableFileWithModeA()
+    {
+        $this->baz1->chmod(0400);
+        $this->assertFalse(@fopen($this->baz1URL, 'a'));
+    }
+
+    /**
+     * @test
+     */
+    public function cannotOpenExistingNonwritableFileWithModeW()
+    {
+        $this->baz1->chmod(0400);
+        $this->assertFalse(@fopen($this->baz1URL, 'w'));
+    }
+
+    /**
+     * @test
+     */
+    public function cannotOpenNonReadableFileWithModeR()
+    {
+        $this->baz1->chmod(0);
+        $this->assertFalse(@fopen($this->baz1URL, 'r'));
+    }
+
+    /**
+     * @test
+     */
+    public function cannotRenameToNonWritableDir()
+    {
+        $this->bar->chmod(0);
+        $this->assertFalse(@rename($this->baz2URL, vfsStream::url('foo/bar/baz3')));
+    }
+
+    /**
+     * @test
+     * @group issue_38
+     */
+    public function cannotReadFileFromNonReadableDir()
+    {
+        $this->markTestSkipped("Issue #38.");
+        $this->bar->chmod(0);
+        $this->assertFalse(@file_get_contents($this->baz1URL));
+    }
+}