Passed
Push — master ( 06f87c...33b6d3 )
by Siad
08:23
created

SizeHelperTest   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 154
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 108
dl 0
loc 154
rs 10
c 1
b 0
f 0
wmc 8

8 Methods

Rating   Name   Duplication   Size   Complexity  
A fromHumanToBytesProvider() 0 43 1
A testInvalidFromHumanToBytes() 0 5 1
A invalidFromBytesToProvider() 0 12 1
A fromBytesToProvider() 0 37 1
A invalidFromHumanToBytesProvider() 0 13 1
A testInvalidFromBytesTo() 0 5 1
A testFromHumanToBytes() 0 4 1
A testFromBytesTo() 0 4 1
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
use PHPUnit\Framework\TestCase;
21
22
class SizeHelperTest extends TestCase
23
{
24
    /**
25
     * @dataProvider fromHumanToBytesProvider
26
     */
27
    public function testFromHumanToBytes(string $humanSize, $expectedBytes)
28
    {
29
        $bytes = SizeHelper::fromHumanToBytes($humanSize);
30
        $this->assertSame($expectedBytes, $bytes);
31
    }
32
33
    public function fromHumanToBytesProvider(): array
34
    {
35
        return [
36
            ['1024', 1024.0],
37
            ['0', 0.0],
38
            ['-10', -10.0],
39
            ['13.20 B', 13.2],
40
            ['13.20b', 13.2],
41
            ['0.3 K', 307.2],
42
            ['0.3 ki', 307.2],
43
            ['0.3 K', 307.2],
44
            ['0.3 ki', 307.2],
45
            ['0.3 Kibi', 307.2],
46
            ['0.3 Kibibyte', 307.2],
47
            ['5.5e2kb', 550000.0],
48
            ['10kb', 10000.0],
49
            ['10kilo', 10000.0],
50
            ['10kilobyte', 10000.0],
51
            ['-10ki', -10240.0],
52
            [' 10kibi ', 10240.0],
53
            ["\t\n10ki\t\n", 10240.0],
54
            ['    10        kilo     ', 10000.0],
55
            ['153.12M', 160557957.12],
56
            ['153.12Mi', 160557957.12],
57
            ['153.12MiB', 160557957.12],
58
            ['153.12mebi', 160557957.12],
59
            ['153.12MebiByte', 160557957.12],
60
            ['5G', 5368709120.0],
61
            ['5gi', 5368709120.0],
62
            ['5gib', 5368709120.0],
63
            ['5gibi', 5368709120.0],
64
            ['5gibibyte', 5368709120.0],
65
            ['5gb', 5000000000.0],
66
            ['5giga', 5000000000.0],
67
            ['5gigabyte', 5000000000.0],
68
            ['00.1T', 109951162777.6],
69
            ['00.1ti', 109951162777.6],
70
            ['00.1tib', 109951162777.6],
71
            ['00.1tebi', 109951162777.6],
72
            ['00.1tebibyte', 109951162777.6],
73
            ['00.1tb', 100000000000.0],
74
            ['00.1tera', 100000000000.0],
75
            ['00.1terabyte', 100000000000.0],
76
        ];
77
    }
78
79
    /**
80
     * @dataProvider invalidFromHumanToBytesProvider
81
     */
82
    public function testInvalidFromHumanToBytes(string $human, string $message)
83
    {
84
        $this->expectException(BuildException::class);
85
        $this->expectExceptionMessage($message);
86
        SizeHelper::fromHumanToBytes($human);
87
    }
88
89
    public function invalidFromHumanToBytesProvider(): array
90
    {
91
        return [
92
            ['', "Invalid size ''"],
93
            ['+', "Invalid size '+'"],
94
            ['--', "Invalid size '--'"],
95
            ['m', "Invalid size 'm'"],
96
            ['M50', "Invalid size 'M50'"],
97
            ['90x', "Invalid unit 'x'"],
98
            ['10E', "Invalid unit 'E'"],
99
            ['10Z', "Invalid unit 'Z'"],
100
            ['10Y', "Invalid unit 'Y'"],
101
            ['3Hello', "Invalid unit 'Hello'"],
102
        ];
103
    }
104
105
    /**
106
     * @dataProvider fromBytesToProvider
107
     */
108
    public function testFromBytesTo(int $bytes, string $unit, float $expected)
109
    {
110
        $converted = SizeHelper::fromBytesTo($bytes, $unit);
111
        $this->assertSame($expected, $converted);
112
    }
113
114
    public function fromBytesToProvider(): array
115
    {
116
        return [
117
            [1024, 'B', 1024],
118
            [1024, 'b', 1024],
119
            [2048, 'k', 2],
120
            [2048, 'ki', 2],
121
            [2048, 'kib', 2],
122
            [2048, 'kibi', 2],
123
            [2048, 'kibibyte', 2],
124
            [2500, 'Kb', 2.5],
125
            [2500, 'kilo', 2.5],
126
            [2500, 'kilobyte', 2.5],
127
            [3145728, 'M', 3],
128
            [3145728, 'MI', 3],
129
            [3145728, 'MIB', 3],
130
            [3145728, 'MEBI', 3],
131
            [3145728, 'MEBIBYTE', 3],
132
            [3500000, 'MB', 3.5],
133
            [3500000, 'MEGA', 3.5],
134
            [3500000, 'MEGABYTE', 3.5],
135
            [4294967296, 'g', 4],
136
            [4294967296, 'gi', 4],
137
            [4294967296, 'gib', 4],
138
            [4294967296, 'gibi', 4],
139
            [4294967296, 'gibibyte', 4],
140
            [4500000000, 'gb', 4.5],
141
            [4500000000, 'giga', 4.5],
142
            [4500000000, 'gigabyte', 4.5],
143
            [5497558138880, 'T', 5],
144
            [5497558138880, 'Ti', 5],
145
            [5497558138880, 'Tib', 5],
146
            [5497558138880, 'Tebi', 5],
147
            [5497558138880, 'Tebibyte', 5],
148
            [5500000000000, 'Tb', 5.5],
149
            [5500000000000, 'Tera', 5.5],
150
            [5500000000000, 'Terabyte', 5.5],
151
        ];
152
    }
153
154
    /**
155
     * @dataProvider invalidFromBytesToProvider
156
     */
157
    public function testInvalidFromBytesTo(string $unit, string $message)
158
    {
159
        $this->expectException(BuildException::class);
160
        $this->expectExceptionMessage($message);
161
        SizeHelper::fromBytesTo(1024, $unit);
162
    }
163
164
    public function invalidFromBytesToProvider(): array
165
    {
166
        return [
167
            ['', "Invalid unit ''"],
168
            ["\t", "Invalid unit '\t'"],
169
            ['-', "Invalid unit '-'"],
170
            ['  B  ', "Invalid unit '  B  '"],
171
            ['x', "Invalid unit 'x'"],
172
            ['E', "Invalid unit 'E'"],
173
            ['Z', "Invalid unit 'Z'"],
174
            ['Y', "Invalid unit 'Y'"],
175
            ['Hello', "Invalid unit 'Hello'"],
176
        ];
177
    }
178
}
179