1
0
mirror of https://github.com/splitbrain/php-archive.git synced 2025-01-17 13:38:26 +01:00
php-archive/tests/FileInfoTest.php
Andreas Gohr d53bf2ed77 updated testing
* test on github not travis
* run phpunit8 (tests only on 7.2+)
* use github action to build api docs
2021-02-05 13:38:50 +01:00

115 lines
3.9 KiB
PHP

<?php /** @noinspection PhpUnhandledExceptionInspection */
namespace splitbrain\PHPArchive;
use PHPUnit\Framework\TestCase;
class FileInfoTest extends TestCase
{
public function testDefaults()
{
$fileinfo = new FileInfo('foobar');
$this->assertEquals('foobar', $fileinfo->getPath());
$this->assertTrue($fileinfo->getMtime() > time() - 30);
$this->assertFalse($fileinfo->getIsdir());
$this->assertEquals(0, $fileinfo->getSize());
$this->assertEquals(0, $fileinfo->getCompressedSize());
$this->assertEquals(0664, $fileinfo->getMode());
$this->assertEquals(0, $fileinfo->getGid());
$this->assertEquals(0, $fileinfo->getUid());
$this->assertEquals('', $fileinfo->getOwner());
$this->assertEquals('', $fileinfo->getGroup());
$this->assertEquals('', $fileinfo->getComment());
}
public function testClean()
{
$data = array(
array('foo', 'foo'),
array('/foo/', 'foo'),
array('/foo/../bar', 'bar'),
array('/foo/../../bar', 'bar'),
array('/foo/../baz/../bar', 'bar'),
array('/foo/baz/../bar', 'foo/bar'),
array('\\foo/baz\\../bar', 'foo/bar'),
array('/foo/bar', 'foo/bar'),
array('/foo/bar/', 'foo/bar'),
array('foo//bar', 'foo/bar'),
array('foo/0/bar', 'foo/0/bar'),
array('foo/../bar', 'bar'),
array('foo/bang/bang/../../bar', 'foo/bar'),
array('foo/../../bar', 'bar'),
array('foo/.././../bar', 'bar'),
);
$fileinfo = new FileInfo();
foreach ($data as $test) {
$fileinfo->setPath($test[0]);
$this->assertEquals($test[1], $fileinfo->getPath());
}
}
public function testStrip()
{
$fileinfo = new FileInfo('foo/bar/baz/bang');
$this->assertEquals('foo/bar/baz/bang', $fileinfo->getPath());
$fileinfo->strip(1);
$this->assertEquals('bar/baz/bang', $fileinfo->getPath());
$fileinfo->strip(2);
$this->assertEquals('bang', $fileinfo->getPath());
$fileinfo = new FileInfo('foo/bar/baz/bang');
$fileinfo->strip('nomatch');
$this->assertEquals('foo/bar/baz/bang', $fileinfo->getPath());
$fileinfo->strip('foo/bar');
$this->assertEquals('baz/bang', $fileinfo->getPath());
}
public function testMatchExpression()
{
$fileinfo = new FileInfo('foo/bar/baz/bang');
$this->assertTrue($fileinfo->matchExpression());
$this->assertTrue($fileinfo->matchExpression('/bang/'));
$this->assertFalse($fileinfo->matchExpression('/bark/'));
$this->assertFalse($fileinfo->matchExpression('', '/bang/'));
$this->assertTrue($fileinfo->matchExpression('', '/bark/'));
$this->assertFalse($fileinfo->matchExpression('/bang/', '/foo/'));
$this->assertTrue($fileinfo->matchExpression('/bang/', '/bark/'));
}
public function testMatchDeprecation()
{
$this->expectException(\PHPUnit\Framework\Error\Notice::class);
$fileinfo = new FileInfo('foo/bar/baz/bang');
$fileinfo->match('/bang/', '/bark/');
}
public function testFromPath()
{
$fileinfo = FileInfo::fromPath(__DIR__ . '/zip/block.txt', 'test.txt');
$this->assertEquals('test.txt', $fileinfo->getPath());
$this->assertFalse($fileinfo->getIsdir());
$this->assertSame(512, $fileinfo->getSize());
$fileinfo = FileInfo::fromPath(__DIR__ . '/zip', 'zip');
$this->assertEquals('zip', $fileinfo->getPath());
$this->assertTrue($fileinfo->getIsdir());
$this->assertSame(0, $fileinfo->getSize());
}
public function testFromPathWithFileNotExisted()
{
$this->expectException(\splitbrain\PHPArchive\FileInfoException::class);
FileInfo::fromPath('invalid_file_path');
}
}