Completed
Push — master ( 08298d...dff84c )
by Jakub
01:31
created

TAssertions::isSuccess()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
cc 2
eloc 3
c 1
b 0
f 1
nc 2
nop 1
dl 0
loc 5
rs 10
1
<?php
2
declare(strict_types=1);
3
4
namespace MyTester;
5
6
trait TAssertions {
7
  /**
8
   * @param string|array $variable
9
   */
10
  protected function showStringOrArray($variable): string {
11
    return (is_string($variable) ? $variable : "(array)");
12
  }
13
14
  protected function isSuccess(bool $success): bool {
15
    if(Environment::getShouldFail()) {
16
      $success = !$success;
17
    }
18
    return $success;
19
  }
20
  
21
  /**
22
   * Tries an assertion
23
   *
24
   * @param mixed $code Assertion to try
25
   */
26
  protected function assert($code, string $failureText = ""): void {
27
    $success = $this->isSuccess($code == true);
28
    if(!$success) {
29
      $message = ($failureText === "") ? "Assertion \"$code\" is not true." : $failureText;
30
    }
31
    Environment::testResult($message ?? "", $success);
32
  }
33
34
  /**
35
   * Are both values same?
36
   *
37
   * @param mixed $expected
38
   * @param mixed $actual
39
   */
40
  protected function assertSame($expected, $actual): void {
41
    $success = $this->isSuccess($expected == $actual);
42
    if(!$success) {
43
      $message = "The value is not $expected but $actual.";
44
    }
45
    Environment::testResult($message ?? "", $success);
46
  }
47
48
  /**
49
   * Are not both values same?
50
   *
51
   * @param mixed $expected
52
   * @param mixed $actual
53
   */
54
  protected function assertNotSame($expected, $actual): void {
55
    $success = $this->isSuccess($expected !== $actual);
56
    if(!$success) {
57
      $message = "The value is $expected.";
58
    }
59
    Environment::testResult($message ?? "", $success);
60
  }
61
62
  /**
63
   * Is $actual equal to true?
64
   */
65
  protected function assertTrue(bool $actual): void {
66
    $success = $this->isSuccess($actual);
67
    if(!$success) {
68
      $message = "The value is not true.";
69
    }
70
    Environment::testResult($message ?? "", $success);
71
  }
72
73
  /**
74
   * Is the expression true?
75
   *
76
   * @param mixed $actual
77
   */
78
  protected function assertTruthy($actual): void {
79
    $success = $this->isSuccess($actual == true);
80
    if(!$success) {
81
      $message = "The expression is not true.";
82
    }
83
    Environment::testResult($message ?? "", $success);
84
  }
85
86
  /**
87
   * Is $actual equal to false?
88
   */
89
  protected function assertFalse(bool $actual): void {
90
    $success = $this->isSuccess(!$actual);
91
    if(!$success) {
92
      $message = "The value is not false.";
93
    }
94
    Environment::testResult($message ?? "", $success);
95
  }
96
97
  /**
98
   * Is the expression false?
99
   *
100
   * @param mixed $actual
101
   */
102
  protected function assertFalsey($actual): void {
103
    $success = $this->isSuccess($actual == false);
104
    if(!$success) {
105
      $message = "The expression is not false.";
106
    }
107
    Environment::testResult($message ?? "", $success);
108
  }
109
110
  /**
111
   * Is the value null?
112
   *
113
   * @param mixed $actual
114
   */
115
  protected function assertNull($actual): void {
116
    $success = $this->isSuccess($actual == null);
117
    if(!$success) {
118
      $message = "The value is not null.";
119
    }
120
    Environment::testResult($message ?? "", $success);
121
  }
122
123
  /**
124
   * Is not the value null?
125
   *
126
   * @param mixed $actual
127
   */
128
  protected function assertNotNull($actual): void {
129
    $success = $this->isSuccess($actual !== null);
130
    if(!$success) {
131
      $message = "The value is null.";
132
    }
133
    Environment::testResult($message ?? "", $success);
134
  }
135
136
  /**
137
   * Does $actual contain $needle?
138
   *
139
   * @param string|array $needle
140
   * @param string|array $actual
141
   */
142
  protected function assertContains($needle, $actual): void {
143
    if(!is_string($needle) && !is_array($needle)) {
1 ignored issue
show
introduced by
The condition is_array($needle) is always true.
Loading history...
144
      Environment::testResult("The variable is not string or array.", false);
145
    } elseif(is_string($actual) && is_string($needle)) {
146
      $success = $this->isSuccess($needle !== "" && strpos($actual, $needle) !== false);
147
      if($success) {
148
        Environment::testResult("");
149
      } else {
150
        Environment::testResult("$needle is not in the variable.", false);
151
      }
152
    } elseif(is_array($actual)) {
153
      $success = $this->isSuccess(in_array($needle, $actual));
154
      if($success) {
155
        Environment::testResult("");
156
      } else {
157
        Environment::testResult($this->showStringOrArray($needle) . " is not in the variable.", false);
158
      }
159
    } else {
160
      Environment::testResult($this->showStringOrArray($needle) . " is not in the variable.", false);
161
    }
162
  }
163
164
  /**
165
   * Does $actual not contain $needle?
166
   *
167
   * @param string|array $needle
168
   * @param string|array $actual
169
   */
170
  protected function assertNotContains($needle, $actual): void {
171
    if(!is_string($needle) && !is_array($needle)) {
1 ignored issue
show
introduced by
The condition is_array($needle) is always true.
Loading history...
172
      Environment::testResult("The variable is not string or array.", false);
173
    } elseif(is_string($actual) && is_string($needle)) {
174
      $success = $this->isSuccess($needle === "" || strpos($actual, $needle) === false);
175
      if($success) {
176
        Environment::testResult("");
177
      } else {
178
        Environment::testResult("$needle is in the variable.", false);
179
      }
180
    } elseif(is_array($actual)) {
181
      $success = $this->isSuccess(!in_array($needle, $actual));
182
      if($success) {
183
        Environment::testResult("");
184
      } else {
185
        Environment::testResult($this->showStringOrArray($needle) . " is in the variable.", false);
186
      }
187
    } else {
188
      Environment::testResult($this->showStringOrArray($needle) . " is not in the variable.", false);
189
    }
190
  }
191
192
  /**
193
   * Does $value contain $count items?
194
   *
195
   * @param string|array|\Countable $value
196
   */
197
  protected function assertCount(int $count, $value): void {
198
    if(!is_array($value) && !$value instanceof \Countable) {
199
      Environment::testResult("The variable is not array or countable object.", false);
200
      return;
201
    }
202
    $success = $this->isSuccess(count($value) === $count);
203
    if($success) {
204
      Environment::testResult("");
205
    } else {
206
      $actual = count($value);
207
      Environment::testResult("Count of the variable is $actual.", false);
208
    }
209
  }
210
211
  /**
212
   * Does $value not contain $count items?
213
   *
214
   * @param string|array|\Countable $value
215
   */
216
  protected function assertNotCount(int $count, $value): void {
217
    if(!is_array($value) && !$value instanceof \Countable) {
218
      Environment::testResult("The variable is not array or countable object.", false);
219
      return;
220
    }
221
    $success = $this->isSuccess(count($value) !== $count);
222
    if($success) {
223
      Environment::testResult("");
224
    } else {
225
      $actual = count($value);
226
      Environment::testResult("Count of the variable is $actual.", false);
227
    }
228
  }
229
230
  /**
231
   * Is $value of type $type?
232
   *
233
   * @param string|object $type
234
   * @param mixed $value
235
   */
236
  protected function assertType($type, $value): void {
237
    if(!is_object($type) && !is_string($type)) {
1 ignored issue
show
introduced by
The condition is_string($type) is always true.
Loading history...
238
      Environment::testResult("Type must be string or object.", false);
239
      return;
240
    }
241
    if(in_array($type, ["array", "bool", "float", "int", "string", "null", "object", "resource",
242
      "scalar", "iterable", "callable", ], true)) {
243
      $success = $this->isSuccess(call_user_func("is_$type", $value));
244
      if(!$success) {
245
        Environment::testResult("The variable is " . gettype($value) . ".", false);
246
      } else {
247
        Environment::testResult("");
248
      }
249
      return;
250
    }
251
    $success = $this->isSuccess($value instanceof $type);
252
    if(!$success) {
253
      $actual = get_debug_type($value);
254
      Environment::testResult("The variable is instance of $actual.", false);
255
    } else {
256
      Environment::testResult("");
257
    }
258
  }
259
}
260
?>