Passed
Push — main ( 2c83d5...fb3f8a )
by Siad
05:21
created

SizeHelperTest::fromHumanToBytesProvider()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 43
Code Lines 41

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 41
dl 0
loc 43
rs 9.264
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
/**
3
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
4
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
5
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
6
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
7
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
8
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
9
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
10
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
11
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
12
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
13
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
14
 *
15
 * This software consists of voluntary contributions made by many individuals
16
 * and is licensed under the LGPL. For more information please see
17
 * <http://phing.info>.
18
 */
19
20
namespace Phing\Test\Util;
21
22
use Phing\Exception\BuildException;
23
use Phing\Util\SizeHelper;
24
use PHPUnit\Framework\TestCase;
25
26
class SizeHelperTest extends TestCase
27
{
28
    /**
29
     * @dataProvider fromHumanToBytesProvider
30
     */
31
    public function testFromHumanToBytes(string $humanSize, $expectedBytes)
32
    {
33
        $bytes = SizeHelper::fromHumanToBytes($humanSize);
34
        $this->assertSame($expectedBytes, $bytes);
35
    }
36
37
    public function fromHumanToBytesProvider(): array
38
    {
39
        return [
40
            ['1024', 1024.0],
41
            ['0', 0.0],
42
            ['-10', -10.0],
43
            ['13.20 B', 13.2],
44
            ['13.20b', 13.2],
45
            ['0.3 K', 307.2],
46
            ['0.3 ki', 307.2],
47
            ['0.3 K', 307.2],
48
            ['0.3 ki', 307.2],
49
            ['0.3 Kibi', 307.2],
50
            ['0.3 Kibibyte', 307.2],
51
            ['5.5e2kb', 550000.0],
52
            ['10kb', 10000.0],
53
            ['10kilo', 10000.0],
54
            ['10kilobyte', 10000.0],
55
            ['-10ki', -10240.0],
56
            [' 10kibi ', 10240.0],
57
            ["\t\n10ki\t\n", 10240.0],
58
            ['    10        kilo     ', 10000.0],
59
            ['153.12M', 160557957.12],
60
            ['153.12Mi', 160557957.12],
61
            ['153.12MiB', 160557957.12],
62
            ['153.12mebi', 160557957.12],
63
            ['153.12MebiByte', 160557957.12],
64
            ['5G', 5368709120.0],
65
            ['5gi', 5368709120.0],
66
            ['5gib', 5368709120.0],
67
            ['5gibi', 5368709120.0],
68
            ['5gibibyte', 5368709120.0],
69
            ['5gb', 5000000000.0],
70
            ['5giga', 5000000000.0],
71
            ['5gigabyte', 5000000000.0],
72
            ['00.1T', 109951162777.6],
73
            ['00.1ti', 109951162777.6],
74
            ['00.1tib', 109951162777.6],
75
            ['00.1tebi', 109951162777.6],
76
            ['00.1tebibyte', 109951162777.6],
77
            ['00.1tb', 100000000000.0],
78
            ['00.1tera', 100000000000.0],
79
            ['00.1terabyte', 100000000000.0],
80
        ];
81
    }
82
83
    /**
84
     * @dataProvider invalidFromHumanToBytesProvider
85
     */
86
    public function testInvalidFromHumanToBytes(string $human, string $message)
87
    {
88
        $this->expectException(BuildException::class);
89
        $this->expectExceptionMessage($message);
90
        SizeHelper::fromHumanToBytes($human);
91
    }
92
93
    public function invalidFromHumanToBytesProvider(): array
94
    {
95
        return [
96
            ['', "Invalid size ''"],
97
            ['+', "Invalid size '+'"],
98
            ['--', "Invalid size '--'"],
99
            ['m', "Invalid size 'm'"],
100
            ['M50', "Invalid size 'M50'"],
101
            ['90x', "Invalid unit 'x'"],
102
            ['10E', "Invalid unit 'E'"],
103
            ['10Z', "Invalid unit 'Z'"],
104
            ['10Y', "Invalid unit 'Y'"],
105
            ['3Hello', "Invalid unit 'Hello'"],
106
        ];
107
    }
108
109
    /**
110
     * @dataProvider fromBytesToProvider
111
     */
112
    public function testFromBytesTo(int $bytes, string $unit, float $expected)
113
    {
114
        $converted = SizeHelper::fromBytesTo($bytes, $unit);
115
        $this->assertSame($expected, $converted);
116
    }
117
118
    public function fromBytesToProvider(): array
119
    {
120
        return [
121
            [1024, 'B', 1024],
122
            [1024, 'b', 1024],
123
            [2048, 'k', 2],
124
            [2048, 'ki', 2],
125
            [2048, 'kib', 2],
126
            [2048, 'kibi', 2],
127
            [2048, 'kibibyte', 2],
128
            [2500, 'Kb', 2.5],
129
            [2500, 'kilo', 2.5],
130
            [2500, 'kilobyte', 2.5],
131
            [3145728, 'M', 3],
132
            [3145728, 'MI', 3],
133
            [3145728, 'MIB', 3],
134
            [3145728, 'MEBI', 3],
135
            [3145728, 'MEBIBYTE', 3],
136
            [3500000, 'MB', 3.5],
137
            [3500000, 'MEGA', 3.5],
138
            [3500000, 'MEGABYTE', 3.5],
139
            [4294967296, 'g', 4],
140
            [4294967296, 'gi', 4],
141
            [4294967296, 'gib', 4],
142
            [4294967296, 'gibi', 4],
143
            [4294967296, 'gibibyte', 4],
144
            [4500000000, 'gb', 4.5],
145
            [4500000000, 'giga', 4.5],
146
            [4500000000, 'gigabyte', 4.5],
147
            [5497558138880, 'T', 5],
148
            [5497558138880, 'Ti', 5],
149
            [5497558138880, 'Tib', 5],
150
            [5497558138880, 'Tebi', 5],
151
            [5497558138880, 'Tebibyte', 5],
152
            [5500000000000, 'Tb', 5.5],
153
            [5500000000000, 'Tera', 5.5],
154
            [5500000000000, 'Terabyte', 5.5],
155
        ];
156
    }
157
158
    /**
159
     * @dataProvider invalidFromBytesToProvider
160
     */
161
    public function testInvalidFromBytesTo(string $unit, string $message)
162
    {
163
        $this->expectException(BuildException::class);
164
        $this->expectExceptionMessage($message);
165
        SizeHelper::fromBytesTo(1024, $unit);
166
    }
167
168
    public function invalidFromBytesToProvider(): array
169
    {
170
        return [
171
            ['', "Invalid unit ''"],
172
            ["\t", "Invalid unit '\t'"],
173
            ['-', "Invalid unit '-'"],
174
            ['  B  ', "Invalid unit '  B  '"],
175
            ['x', "Invalid unit 'x'"],
176
            ['E', "Invalid unit 'E'"],
177
            ['Z', "Invalid unit 'Z'"],
178
            ['Y', "Invalid unit 'Y'"],
179
            ['Hello', "Invalid unit 'Hello'"],
180
        ];
181
    }
182
}
183