Version 1
[yaffs-website] / vendor / mikey179 / vfsStream / src / test / php / org / bovigo / vfs / vfsStreamWrapperQuotaTestCase.php
diff --git a/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamWrapperQuotaTestCase.php b/vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamWrapperQuotaTestCase.php
new file mode 100644 (file)
index 0000000..c87c86b
--- /dev/null
@@ -0,0 +1,223 @@
+<?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;
+/**
+ * Test for quota related functionality of org\bovigo\vfs\vfsStreamWrapper.
+ *
+ * @group  issue_35
+ */
+class vfsStreamWrapperQuotaTestCase extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * access to root
+     *
+     * @type  vfsStreamDirectory
+     */
+    private $root;
+
+    /**
+     * set up test environment
+     */
+    public function setUp()
+    {
+        $this->root = vfsStream::setup();
+        vfsStream::setQuota(10);
+    }
+
+    /**
+     * @test
+     */
+    public function writeLessThanQuotaWritesEverything()
+    {
+        $this->assertEquals(9, file_put_contents(vfsStream::url('root/file.txt'), '123456789'));
+        $this->assertEquals('123456789', $this->root->getChild('file.txt')->getContent());
+    }
+
+    /**
+     * @test
+     */
+    public function writeUpToQotaWritesEverything()
+    {
+        $this->assertEquals(10, file_put_contents(vfsStream::url('root/file.txt'), '1234567890'));
+        $this->assertEquals('1234567890', $this->root->getChild('file.txt')->getContent());
+    }
+
+    /**
+     * @test
+     */
+    public function writeMoreThanQotaWritesOnlyUpToQuota()
+    {
+        try {
+            file_put_contents(vfsStream::url('root/file.txt'), '12345678901');
+        } catch (\PHPUnit_Framework_Error $e) {
+            $this->assertEquals('file_put_contents(): Only 10 of 11 bytes written, possibly out of free disk space',
+                                $e->getMessage()
+            );
+        }
+
+        $this->assertEquals('1234567890', $this->root->getChild('file.txt')->getContent());
+    }
+
+    /**
+     * @test
+     */
+    public function considersAllFilesForQuota()
+    {
+        vfsStream::newFile('foo.txt')
+                 ->withContent('foo')
+                 ->at(vfsStream::newDirectory('bar')
+                               ->at($this->root)
+                   );
+        try {
+            file_put_contents(vfsStream::url('root/file.txt'), '12345678901');
+        } catch (\PHPUnit_Framework_Error $e) {
+            $this->assertEquals('file_put_contents(): Only 7 of 11 bytes written, possibly out of free disk space',
+                                $e->getMessage()
+            );
+        }
+
+        $this->assertEquals('1234567', $this->root->getChild('file.txt')->getContent());
+    }
+
+    /**
+     * @test
+     * @group  issue_33
+     */
+    public function truncateToLessThanQuotaWritesEverything()
+    {
+        if (version_compare(PHP_VERSION, '5.4.0', '<')) {
+            $this->markTestSkipped('Requires PHP 5.4');
+        }
+
+        if (strstr(PHP_VERSION, 'hiphop') !== false) {
+            $this->markTestSkipped('Not supported on hhvm');
+        }
+
+        $fp = fopen(vfsStream::url('root/file.txt'), 'w+');
+        $this->assertTrue(ftruncate($fp, 9));
+        fclose($fp);
+        $this->assertEquals(9,
+                            $this->root->getChild('file.txt')->size()
+        );
+        $this->assertEquals("\0\0\0\0\0\0\0\0\0",
+                            $this->root->getChild('file.txt')->getContent()
+        );
+    }
+
+    /**
+     * @test
+     * @group  issue_33
+     */
+    public function truncateUpToQotaWritesEverything()
+    {
+        if (version_compare(PHP_VERSION, '5.4.0', '<')) {
+            $this->markTestSkipped('Requires PHP 5.4');
+        }
+
+        if (strstr(PHP_VERSION, 'hiphop') !== false) {
+            $this->markTestSkipped('Not supported on hhvm');
+        }
+
+        $fp = fopen(vfsStream::url('root/file.txt'), 'w+');
+        $this->assertTrue(ftruncate($fp, 10));
+        fclose($fp);
+        $this->assertEquals(10,
+                            $this->root->getChild('file.txt')->size()
+        );
+        $this->assertEquals("\0\0\0\0\0\0\0\0\0\0",
+                            $this->root->getChild('file.txt')->getContent()
+        );
+    }
+
+    /**
+     * @test
+     * @group  issue_33
+     */
+    public function truncateToMoreThanQotaWritesOnlyUpToQuota()
+    {
+        if (version_compare(PHP_VERSION, '5.4.0', '<')) {
+            $this->markTestSkipped('Requires PHP 5.4');
+        }
+
+        if (strstr(PHP_VERSION, 'hiphop') !== false) {
+            $this->markTestSkipped('Not supported on hhvm');
+        }
+
+        $fp = fopen(vfsStream::url('root/file.txt'), 'w+');
+        $this->assertTrue(ftruncate($fp, 11));
+        fclose($fp);
+        $this->assertEquals(10,
+                            $this->root->getChild('file.txt')->size()
+        );
+        $this->assertEquals("\0\0\0\0\0\0\0\0\0\0",
+                            $this->root->getChild('file.txt')->getContent()
+        );
+    }
+
+    /**
+     * @test
+     * @group  issue_33
+     */
+    public function truncateConsidersAllFilesForQuota()
+    {
+        if (version_compare(PHP_VERSION, '5.4.0', '<')) {
+            $this->markTestSkipped('Requires PHP 5.4');
+        }
+
+        if (strstr(PHP_VERSION, 'hiphop') !== false) {
+            $this->markTestSkipped('Not supported on hhvm');
+        }
+
+        vfsStream::newFile('bar.txt')
+                 ->withContent('bar')
+                 ->at(vfsStream::newDirectory('bar')
+                               ->at($this->root)
+                   );
+        $fp = fopen(vfsStream::url('root/file.txt'), 'w+');
+        $this->assertTrue(ftruncate($fp, 11));
+        fclose($fp);
+        $this->assertEquals(7,
+                            $this->root->getChild('file.txt')->size()
+        );
+        $this->assertEquals("\0\0\0\0\0\0\0",
+                            $this->root->getChild('file.txt')->getContent()
+        );
+    }
+
+    /**
+     * @test
+     * @group  issue_33
+     */
+    public function canNotTruncateToGreaterLengthWhenDiscQuotaReached()
+    {
+        if (version_compare(PHP_VERSION, '5.4.0', '<')) {
+            $this->markTestSkipped('Requires PHP 5.4');
+        }
+
+        if (strstr(PHP_VERSION, 'hiphop') !== false) {
+            $this->markTestSkipped('Not supported on hhvm');
+        }
+
+        vfsStream::newFile('bar.txt')
+                 ->withContent('1234567890')
+                 ->at(vfsStream::newDirectory('bar')
+                               ->at($this->root)
+                   );
+        $fp = fopen(vfsStream::url('root/file.txt'), 'w+');
+        $this->assertFalse(ftruncate($fp, 11));
+        fclose($fp);
+        $this->assertEquals(0,
+                            $this->root->getChild('file.txt')->size()
+        );
+        $this->assertEquals('',
+                            $this->root->getChild('file.txt')->getContent()
+        );
+    }
+}