Welcome to mirror list, hosted at ThFree Co, Russian Federation.

ZipMatcherTest.php « PhpZip « tests « zip « nelexa « vendor - github.com/CarnetApp/CarnetNextcloud.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: c824765a9bbf3441fe0dbe98f60372beeec92f7b (plain)
1
2
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

namespace PhpZip;

use PhpZip\Model\ZipEntryMatcher;
use PhpZip\Model\ZipInfo;
use PhpZip\Util\CryptoUtil;

class ZipMatcherTest extends \PHPUnit_Framework_TestCase
{
    public function testMatcher()
    {
        $zipFile = new ZipFile();
        for ($i = 0; $i < 100; $i++) {
            $zipFile[$i] = $i;
        }

        $matcher = $zipFile->matcher();
        self::assertInstanceOf(ZipEntryMatcher::class, $matcher);

        $this->assertTrue(is_array($matcher->getMatches()));
        $this->assertCount(0, $matcher);

        $matcher->add(1)->add(10)->add(20);
        $this->assertCount(3, $matcher);
        $this->assertEquals($matcher->getMatches(), ['1', '10', '20']);

        $matcher->delete();
        $this->assertCount(97, $zipFile);
        $this->assertCount(0, $matcher);

        $matcher->match('~^[2][1-5]|[3][6-9]|40$~s');
        $this->assertCount(10, $matcher);
        $actualMatches = [
            '21', '22', '23', '24', '25',
            '36', '37', '38', '39',
            '40'
        ];
        $this->assertEquals($matcher->getMatches(), $actualMatches);
        $matcher->setPassword('qwerty');
        $info = $zipFile->getAllInfo();
        array_walk($info, function (ZipInfo $zipInfo) use ($actualMatches) {
            self::assertEquals($zipInfo->isEncrypted(), in_array($zipInfo->getName(), $actualMatches));
        });

        $matcher->all();
        $this->assertCount(count($zipFile), $matcher);

        $expectedNames = [];
        $matcher->invoke(function ($entryName) use (&$expectedNames) {
            $expectedNames[] = $entryName;
        });
        $this->assertEquals($expectedNames, $matcher->getMatches());

        $zipFile->close();
    }

    public function testDocsExample()
    {
        $zipFile = new ZipFile();
        for ($i = 0; $i < 100; $i++) {
            $zipFile['file_'.$i.'.jpg'] = CryptoUtil::randomBytes(100);
        }

        $renameEntriesArray = [
            'file_10.jpg',
            'file_11.jpg',
            'file_12.jpg',
            'file_13.jpg',
            'file_14.jpg',
            'file_15.jpg',
            'file_16.jpg',
            'file_17.jpg',
            'file_18.jpg',
            'file_19.jpg',
            'file_50.jpg',
            'file_51.jpg',
            'file_52.jpg',
            'file_53.jpg',
            'file_54.jpg',
            'file_55.jpg',
            'file_56.jpg',
            'file_57.jpg',
            'file_58.jpg',
            'file_59.jpg',
        ];

        foreach ($renameEntriesArray as $name) {
            self::assertTrue(isset($zipFile[$name]));
        }

        $matcher = $zipFile->matcher();
        $matcher->match('~^file_(1|5)\d+~');
        self::assertEquals($matcher->getMatches(), $renameEntriesArray);

        $matcher->invoke(function ($entryName) use ($zipFile) {
            $newName = preg_replace('~\.(jpe?g)$~i', '.no_optimize.$1', $entryName);
            $zipFile->rename($entryName, $newName);
        });

        foreach ($renameEntriesArray as $name) {
            self::assertFalse(isset($zipFile[$name]));

            $pathInfo = pathinfo($name);
            $newName = $pathInfo['filename'].'.no_optimize.'.$pathInfo['extension'];
            self::assertTrue(isset($zipFile[$newName]));
        }

        $zipFile->close();
    }
}