FileUtilityTest.php #1

  • //
  • guest/
  • perforce_software/
  • chronicle/
  • main/
  • tests/
  • phpunit/
  • P4Cms/
  • FileUtilityTest.php
  • View
  • Commits
  • Open Download .zip Download (4 KB)
<?php
/**
 * Test methods for the File Utility class.
 *
 * @copyright   2011 Perforce Software. All rights reserved.
 * @license     Please see LICENSE.txt in top-level folder of this distribution.
 * @version     <release>/<patch>
 */
class P4Cms_FileUtilityTest extends TestCase
{
    /**
     * Test deleting a directory and all its contents.
     */
    public function testDeleteRecursive()
    {
        $path = TEST_DATA_PATH . '/test-dir';
        $this->_createTestDirectory($path);
        $this->assertTrue(is_dir($path));

        P4Cms_FileUtility::deleteRecursive($path);
        $this->assertFalse(is_dir($path));

        // try again w. non-writable files.
        $this->_createTestDirectory($path);
        chmod($path . '/sub/sub/foo', 0000);
        $this->assertTrue(is_dir($path));

        P4Cms_FileUtility::deleteRecursive($path);
        $this->assertFalse(is_dir($path));
    }

    /**
     * Test providing a bad path to deleteRecursive.
     */
    public function testDeleteRecursiveWithBadPath()
    {
        $path = TEST_DATA_PATH . '/test-file-to-delete.txt';
        touch($path);

        try {
            P4Cms_FileUtility::deleteRecursive($path);
            $this->fail('Unexpected success');
        } catch (PHPUnit_Framework_AssertionFailedError $e) {
            $this->fail($e->getMessage());
        } catch (InvalidArgumentException $e) {
            $this->assertEquals(
                'Failed to delete path. Path is not a directory.',
                $e->getMessage(),
                'Expected exception.'
            );
        } catch (Exception $e) {
            $this->fail("$label - Unexpected exception (" . get_class($e) .') :'. $e->getMessage());
        }
    }

    /**
     * Test that constructor is private, preventing instances.
     */
    public function testConstructor()
    {
        $class = new ReflectionClass('P4Cms_FileUtility');
        $constructor = $class->getConstructor();
        $footprint = "$constructor";
        $this->assertRegExp('/private/', $footprint, 'Expected constructor to be private.');
    }

    /**
     * Create a test directory with contents so we can delete it.
     *
     * @param   string  $path   the test path to create.
     */
    protected function _createTestDirectory($path)
    {
        // make some dirs.
        mkdir($path);
        mkdir($path . '/sub');
        mkdir($path . '/sub/sub');
        mkdir($path . '/alt');

        // make some files.
        touch($path . '/foo');
        touch($path . '/sub/foo');
        touch($path . '/sub/sub/foo');
        touch($path . '/sub/sub/bar');
        touch($path . '/alt/foo');
    }

    /**
     * Test recursive md5 calculation.
     */
    public function testRecursiveMd5()
    {
        $path = TEST_DATA_PATH . '/test-dir';
        $this->_createTestDirectory($path);
        $this->assertTrue(is_dir($path), 'Test directory is not a directory.');

        $result = P4Cms_FileUtility::md5Recursive($path);
        $this->assertTrue(is_array($result), 'Result is not an array.');
        $this->assertTrue((count($result) == 5), 'Result count does not match expected.');

        $result = P4Cms_FileUtility::md5Recursive($path, null, array('foo'));
        $this->assertTrue(is_array($result), 'Result is not an array.');
        $this->assertTrue(
            (count($result) == 4),
            'Exclude result count does not match expected (expected 4, found '.count($result).'.'
        );

        $result = P4Cms_FileUtility::md5Recursive($path, null, array('sub/foo', 'sub/sub/bar'));
        $this->assertTrue(is_array($result), 'Result is not an array.');
        $this->assertTrue(
            (count($result) == 3),
            'Exclude result count does not match expected (expected 4, found '.count($result).'.'
        );

        try {
            $result = P4Cms_FileUtility::md5Recursive('foo');
        }
        catch (InvalidArgumentException $e) {
            $this->assertEquals(
                "Provided path is not a valid directory.",
                $e->getMessage(),
                'Expected error message.'
            );
        }
    }
}
# Change User Description Committed
#1 16170 perforce_software Move Chronicle files to follow new path scheme for branching.
//guest/perforce_software/chronicle/tests/phpunit/P4Cms/FileUtilityTest.php
#1 8972 Matt Attaway Initial add of the Chronicle source code