Completed
Branch master (08dae2)
by Randy
03:44
created

ExpectationsTest::testIsOdd()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 3
nc 1
nop 0
dl 0
loc 5
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
use PHPUnit\Framework\TestCase;
4
use function Dgame\Expectation\expect;
5
6
final class ExpectationsTest extends TestCase
7
{
8
    public function testIsInt()
9
    {
10
        $this->assertEquals(42, expect(42)->isInt()->else(23));
11
        $this->assertEquals(1337, expect('foo')->isInt()->else(1337));
12
    }
13
14
    public function testIsFloat()
15
    {
16
        $this->assertEquals(4.2, expect(4.2)->isFloat()->else(2.3));
17
        $this->assertEquals(13.37, expect('foo')->isFloat()->else(13.37));
18
    }
19
20
    public function testIsScalar()
21
    {
22
        $this->assertEquals('bar', expect('bar')->isScalar()->else('foo'));
23
        $this->assertEquals(42, expect(42)->isScalar()->else('bar'));
24
    }
25
26
    public function testIsNumeric()
27
    {
28
        $this->assertEquals(42, expect(42)->isNumeric()->else('foo'));
29
        $this->assertEquals('1337', expect('1337')->isNumeric()->else('bar'));
30
    }
31
32
    public function testIsString()
33
    {
34
        $this->assertEquals('foo', expect('foo')->isString()->else('bar'));
35
        $this->assertEquals('bar', expect(42)->isString()->else('bar'));
36
    }
37
38
    public function testIsBool()
39
    {
40
        $this->assertTrue(expect(true)->isBool()->else(false));
41
        $this->assertFalse(expect(1)->isBool()->else(false));
42
    }
43
44
    public function testIsArray()
45
    {
46
        $this->assertEquals([1, 2, 3], expect([1, 2, 3])->isArray()->else([]));
47
        $this->assertEquals([2], expect('abc')->isArray()->else([2]));
48
        $this->assertEquals([], expect(null)->isArray()->else([]));
49
    }
50
51
    public function testIsObject()
52
    {
53
        $this->assertEquals($this, expect($this)->isObject()->else(null));
54
        $this->assertEquals(null, expect(null)->isObject()->else(null));
55
        $this->assertEquals(23, expect(42)->isObject()->else(23));
56
    }
57
58
    public function testIsInstanceOf()
59
    {
60
        $this->assertEquals($this, expect($this)->isInstanceOf(self::class)->else(null));
61
        $this->assertEquals(null, expect(new Exception())->isInstanceOf(self::class)->else(null));
62
        $this->assertEquals(null, expect(null)->isInstanceOf(self::class)->else(null));
63
    }
64
65
    public function testIsCallable()
66
    {
67
        $this->assertEquals('trim', expect('trim')->isCallable()->else(null));
68
        $this->assertEquals(null, expect('empty')->isCallable()->else(null));
69
    }
70
71
    public function testIsDir()
72
    {
73
        $this->assertEquals(__DIR__, expect(__DIR__)->isDir()->else('src'));
74
        $this->assertEquals('src', expect('test')->isDir()->else('src'));
75
    }
76
77
    public function testIsFile()
78
    {
79
        $this->assertEquals(__FILE__, expect(__FILE__)->isFile()->else(null));
80
        $this->assertEquals(null, expect('src')->isFile()->else(null));
81
    }
82
83
    public function testIsEmpty()
84
    {
85
        $this->assertEmpty(expect(null)->isEmpty()->else('abc'));
86
        $this->assertNull(expect('abc')->isEmpty()->else(null));
87
    }
88
89
    public function testIsNotEmpty()
90
    {
91
        $this->assertNotEmpty(expect(null)->isNotEmpty()->else('abc'));
92
        $this->assertNotNull(expect('abc')->isNotEmpty()->else(null));
93
    }
94
95
    public function testIsNull()
96
    {
97
        $this->assertNull(expect(null)->isNull()->else('abc'));
98
        $this->assertEquals('foobar', expect('abc')->isNull()->else('foobar'));
99
    }
100
101
    public function testIsNotNull()
102
    {
103
        $this->assertNotNull(expect(null)->isNotNull()->else('abc'));
104
        $this->assertNull(expect(null)->isNotNull()->else(null));
105
    }
106
107
    public function testIsTrue()
108
    {
109
        $this->assertTrue(expect(false)->isTrue()->else(true));
110
        $this->assertTrue(expect(true)->isTrue()->else(false));
111
        $this->assertFalse(expect(false)->isTrue()->else(false));
112
    }
113
114
    public function testIsFalse()
115
    {
116
        $this->assertFalse(expect(false)->isFalse()->else(true));
117
        $this->assertFalse(expect(true)->isFalse()->else(false));
118
        $this->assertTrue(expect(true)->isFalse()->else(true));
119
    }
120
121
    public function testIsEqual()
122
    {
123
        $this->assertEquals('abc', expect('abc')->isEqual('abc')->else('foo'));
124
        $this->assertEquals('42', expect('42')->isEqual('42')->else(null));
125
        $this->assertEquals(42, expect('42')->isEqual(42)->else(null));
126
    }
127
128
    public function testIsNotEqual()
129
    {
130
        $this->assertEquals('foo', expect('abc')->isNotEqual('abc')->else('foo'));
131
        $this->assertEquals(null, expect('42')->isNotEqual('42')->else(null));
132
        $this->assertEquals(42, expect('42')->isEqual(42)->else(null));
133
    }
134
135
    public function testIsIdenticalTo()
136
    {
137
        $this->assertEquals('abc', expect('abc')->isIdenticalTo('abc')->else('foo'));
138
        $this->assertEquals('42', expect('42')->isIdenticalTo('42')->else(null));
139
        $this->assertEquals(null, expect('42')->isIdenticalTo(42)->else(null));
140
        $this->assertEquals(42, expect(42)->isIdenticalTo(42)->else(null));
141
    }
142
143
    public function testIsNotIdenticalTo()
144
    {
145
        $this->assertEquals('foo', expect('abc')->isNotIdenticalTo('abc')->else('foo'));
146
        $this->assertEquals(null, expect('42')->isNotIdenticalTo('42')->else(null));
147
        $this->assertEquals('42', expect('42')->isNotIdenticalTo(42)->else(null));
148
        $this->assertEquals(null, expect(42)->isNotIdenticalTo(42)->else(null));
149
    }
150
151
    public function testIsBetween()
152
    {
153
        $this->assertEquals(7, expect(7)->isBetween(0, 8)->else(null));
154
        $this->assertEquals(7, expect(7)->isBetween(0, 7)->else(null));
155
        $this->assertEquals(0, expect(0)->isBetween(0, 7)->else(null));
156
        $this->assertEquals('nope', expect(12)->isBetween(15, 20)->else('nope'));
157
    }
158
159
    public function testhasLength()
160
    {
161
        $this->assertEquals('foo', expect('foo')->hasLength(3)->else('aye'));
162
        $this->assertEquals('nope', expect('foobar')->hasLength(4)->else('nope'));
163
164
        $this->assertEquals([1, 2, 3], expect([1, 2, 3])->hasLength(3)->else([]));
165
        $this->assertEquals([42, 23], expect([])->hasLength(2)->else([42, 23]));
166
    }
167
168
    public function testIsIn()
169
    {
170
        $this->assertEquals(42, expect(42)->isIn([1, 2, 23, 36, 42, 44, 48])->else(null));
171
        $this->assertEquals(42, expect(42)->isIn([1, 2, 23, 36, 42])->else(null));
172
        $this->assertEquals(null, expect(42)->isIn([1, 2, 23, 36])->else(null));
173
    }
174
175
    public function testIsKeyOf()
176
    {
177
        $this->assertEquals('foo', expect('foo')->isKeyOf(['a' => 23, 'foo' => 42])->else(null));
178
        $this->assertEquals(null, expect('foo')->isKeyOf(['a' => 23])->else(null));
179
    }
180
181
    public function testIsBelow()
182
    {
183
        $this->assertEquals(3, expect(3)->isBelow(4)->else(42));
184
        $this->assertEquals(42, expect(6)->isBelow(4)->else(42));
185
    }
186
187
    public function testIsAbove()
188
    {
189
        $this->assertEquals(42, expect(3)->isAbove(4)->else(42));
190
        $this->assertEquals(6, expect(6)->isAbove(4)->else(42));
191
    }
192
193
    public function testIsBelowOrEqual()
194
    {
195
        $this->assertEquals(23, expect(23)->isBelowOrEqual(23)->else(null));
196
        $this->assertEquals(23, expect(23)->isBelowOrEqual(42)->else(null));
197
        $this->assertEquals(null, expect(23)->isBelowOrEqual(22)->else(null));
198
    }
199
200
    public function testIsAboveOrEqual()
201
    {
202
        $this->assertEquals(42, expect(42)->isAboveOrEqual(42)->else(null));
203
        $this->assertEquals(42, expect(42)->isAboveOrEqual(23)->else(null));
204
        $this->assertEquals(null, expect(42)->isAboveOrEqual(256)->else(null));
205
    }
206
207
    public function testIsPositive()
208
    {
209
        $this->assertEquals(42, expect(-1)->isPositive()->else(42));
210
        $this->assertEquals(0, expect(0)->isPositive()->else(42));
211
    }
212
213
    public function testIsNegative()
214
    {
215
        $this->assertEquals(-1, expect(-1)->isNegative()->else(42));
216
        $this->assertEquals(42, expect(0)->isNegative()->else(42));
217
    }
218
219
    public function testIsEven()
220
    {
221
        $this->assertEquals(42, expect(42)->isEven()->else(23));
222
        $this->assertEquals(42, expect(23)->isEven()->else(42));
223
    }
224
225
    public function testIsOdd()
226
    {
227
        $this->assertEquals(23, expect(42)->isOdd()->else(23));
228
        $this->assertEquals(23, expect(23)->isOdd()->else(42));
229
    }
230
231
    public function testMatch()
232
    {
233
        $this->assertEquals('abc', expect('abc')->match('/a*b{1}c?d?/')->else('foo'));
234
        $this->assertEquals('foo', expect('ac')->match('/a*b{1}c?d?/')->else('foo'));
235
    }
236
237
    public function testThen()
238
    {
239
        $this->assertEquals('foo', expect(42)->isEven()->then('foo'));
240
        $this->assertEquals(42, expect(42)->isOdd()->then('foo'));
241
    }
242
}