Completed
Push — master ( 67e18b...1f3c92 )
by Jakub
01:44
created

TAssertions::assert()   A

Complexity

Conditions 4
Paths 6

Size

Total Lines 9
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

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