| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 
 | <?php
declare(strict_types=1);
namespace PhpMyAdmin\Tests;
use PhpMyAdmin\FileListing;
use function array_values;
use function extension_loaded;
use function is_bool;
use const TEST_PATH;
/**
 * @covers \PhpMyAdmin\FileListing
 */
#[\PHPUnit\Framework\Attributes\CoversClass(\PhpMyAdmin\FileListing::class)]
class FileListingTest extends AbstractTestCase
{
    /** @var FileListing $fileListing */
    private $fileListing;
    protected function setUp(): void
    {
        parent::setUp();
        $this->fileListing = new FileListing();
    }
    public function testGetDirContent(): void
    {
        self::assertFalse($this->fileListing->getDirContent('nonexistent directory'));
        $fixturesDir = TEST_PATH . 'test/classes/_data/file_listing';
        $dirContent = $this->fileListing->getDirContent($fixturesDir);
        if (is_bool($dirContent)) {
            $dirContent = [];
        }
        self::assertSame([
            'one.txt',
            'two.md',
        ], array_values($dirContent));
    }
    public function testGetFileSelectOptions(): void
    {
        $fixturesDir = TEST_PATH . 'test/classes/_data/file_listing';
        self::assertFalse($this->fileListing->getFileSelectOptions('nonexistent directory'));
        $expectedHtmlWithoutActive = '  <option value="one.txt">' . "\n"
            . '    one.txt' . "\n"
            . '  </option>' . "\n"
            . '  <option value="two.md">' . "\n"
            . '    two.md' . "\n"
            . '  </option>' . "\n";
        self::assertSame($expectedHtmlWithoutActive, $this->fileListing->getFileSelectOptions($fixturesDir));
        $expectedHtmlWithActive = '  <option value="one.txt">' . "\n"
            . '    one.txt' . "\n"
            . '  </option>' . "\n"
            . '  <option value="two.md" selected="selected">' . "\n"
            . '    two.md' . "\n"
            . '  </option>' . "\n";
        self::assertSame($expectedHtmlWithActive, $this->fileListing->getFileSelectOptions($fixturesDir, '', 'two.md'));
        $expectedFilteredHtml = '  <option value="one.txt">' . "\n"
            . '    one.txt' . "\n"
            . '  </option>' . "\n";
        self::assertSame($expectedFilteredHtml, $this->fileListing->getFileSelectOptions($fixturesDir, '/.*\.txt/'));
    }
    public function testSupportedDecompressionsEmptyList(): void
    {
        $GLOBALS['cfg']['ZipDump'] = false;
        $GLOBALS['cfg']['GZipDump'] = false;
        $GLOBALS['cfg']['BZipDump'] = false;
        self::assertEmpty($this->fileListing->supportedDecompressions());
    }
    /**
     * @requires extension bz2
     */
    #[\PHPUnit\Framework\Attributes\RequiresPhpExtension('bz2')]
    public function testSupportedDecompressionsFull(): void
    {
        $GLOBALS['cfg']['ZipDump'] = true;
        $GLOBALS['cfg']['GZipDump'] = true;
        $GLOBALS['cfg']['BZipDump'] = true;
        self::assertSame('gz|bz2|zip', $this->fileListing->supportedDecompressions());
    }
    public function testSupportedDecompressionsPartial(): void
    {
        $GLOBALS['cfg']['ZipDump'] = true;
        $GLOBALS['cfg']['GZipDump'] = true;
        $GLOBALS['cfg']['BZipDump'] = true;
        $extensionString = 'gz';
        if (extension_loaded('bz2')) {
            $extensionString .= '|bz2';
        }
        $extensionString .= '|zip';
        self::assertSame($extensionString, $this->fileListing->supportedDecompressions());
    }
}
 |