Completed
Push — master ( d83618...ef3736 )
by Jakub
02:18
created

Assert::tryAssertion()   A

Complexity

Conditions 4
Paths 6

Size

Total Lines 9
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 5
Bugs 0 Features 0
Metric Value
cc 4
eloc 6
c 5
b 0
f 0
nc 6
nop 3
dl 0
loc 9
rs 10
1
<?php
2
declare(strict_types=1);
3
4
namespace MyTester;
5
6
/**
7
 * Assertions
8
 *
9
 * @author Jakub Konečný
10
 * @copyright (c) 2015-2019, Jakub Konečný
11
 * @license https://spdx.org/licenses/BSD-3-Clause.html BSD-3-Clause
12
 */
13
final class Assert {
14
  use \Nette\StaticClass;
15
16
  /**
17
   * @param string|array $variable
18
   */
19
  private static function showStringOrArray($variable): string {
20
    return (is_string($variable) ? $variable : "(array)");
21
  }
22
  
23
  /**
24
   * Tries an assertion
25
   * 
26
   * @param mixed $code Assertion to try
27
   * @param string $successText Text to print on success
28
   * @param string $failureText Text to print on failure
29
   */
30
  public static function tryAssertion($code, string $successText = "", string $failureText = ""): void {
1 ignored issue
show
introduced by
The method parameter $successText is never used
Loading history...
Unused Code introduced by
The parameter $successText is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

30
  public static function tryAssertion($code, /** @scrutinizer ignore-unused */ string $successText = "", string $failureText = ""): void {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
31
    $success = ($code == true);
32
    if(Environment::getShouldFail()) {
33
      $success = !$success;
34
    }
35
    if(!$success) {
36
      $message = ($failureText === "") ? "Assertion \"$code\" is not true." : $failureText;
37
    }
38
    Environment::testResult($message ?? "", $success);
39
  }
40
  
41
  /**
42
   * Are both values same?
43
   * 
44
   * @param mixed $expected
45
   * @param mixed $actual
46
   */
47
  public static function same($expected, $actual): void {
48
    $success = ($expected == $actual);
49
    if(Environment::getShouldFail()) {
50
      $success = !$success;
51
    }
52
    if(!$success) {
53
      $message = "The value is not $expected but $actual.";
54
    }
55
    Environment::testResult($message ?? "", $success);
56
  }
57
  
58
  /**
59
   * Are not both values same?
60
   * 
61
   * @param mixed $expected
62
   * @param mixed $actual
63
   */
64
  public static function notSame($expected, $actual): void {
65
    $success = ($expected !== $actual);
66
    if(Environment::getShouldFail()) {
67
      $success = !$success;
68
    }
69
    if(!$success) {
70
      $message = "The value is $expected.";
71
    }
72
    Environment::testResult($message ?? "", $success);
73
  }
74
  
75
  /**
76
   * Is the expression true?
77
   * 
78
   * @param mixed $actual
79
   */
80
  public static function true($actual): void {
81
    $success = ($actual == true);
82
    if(Environment::getShouldFail()) {
83
      $success = !$success;
84
    }
85
    if(!$success) {
86
      $message = "The expression is not true.";
87
    }
88
    Environment::testResult($message ?? "", $success);
89
  }
90
  
91
  /**
92
   * Is the expression false?
93
   * 
94
   * @param mixed $actual
95
   */
96
  public static function false($actual): void {
97
    $success = ($actual == false);
98
    if(Environment::getShouldFail()) {
99
      $success = !$success;
100
    }
101
    if(!$success) {
102
      $message = "The expression is not false.";
103
    }
104
    Environment::testResult($message ?? "", $success);
105
  }
106
  
107
  /**
108
   * Is the value null?
109
   * 
110
   * @param mixed $actual
111
   */
112
  public static function null($actual): void {
113
    $success = ($actual == null);
114
    if(Environment::getShouldFail()) {
115
      $success = !$success;
116
    }
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
  public static function notNull($actual): void {
129
    $success = ($actual !== null);
130
    if(Environment::getShouldFail()) {
131
      $success = !$success;
132
    }
133
    if(!$success) {
134
      $message = "The value is null.";
135
    }
136
    Environment::testResult($message ?? "", $success);
137
  }
138
  
139
  /**
140
   * Does $actual contain $needle?
141
   * 
142
   * @param string|array $needle
143
   * @param string|array $actual
144
   */
145
  public static function contains($needle, $actual): void {
146
    if(!is_string($needle) AND !is_array($needle)) {
0 ignored issues
show
introduced by
The condition is_array($needle) is always true.
Loading history...
147
      Environment::testResult("The variable is not string or array.", false);
148
    } elseif(is_string($actual) AND is_string($needle)) {
149
      if($needle !== "" AND strpos($actual, $needle) !== false) {
150
        Environment::testResult("");
151
      } else {
152
        Environment::testResult("$needle is not in the variable.", false);
153
      }
154
    } elseif(is_array($actual)) {
155
      if(in_array($needle, $actual)) {
156
        Environment::testResult(self::showStringOrArray($needle) . " is in the variable.");
157
      } else {
158
        Environment::testResult(self::showStringOrArray($needle) . " is not in the variable.", false);
159
      }
160
    } else {
161
      Environment::testResult(self::showStringOrArray($needle) . " is not in the variable.", false);
162
    }
163
  }
164
  
165
  /**
166
   * Does $actual not contain $needle?
167
   * 
168
   * @param string|array $needle
169
   * @param string|array $actual
170
   */
171
  public static function notContains($needle, $actual): void {
172
    if(!is_string($needle) AND !is_array($needle)) {
0 ignored issues
show
introduced by
The condition is_array($needle) is always true.
Loading history...
173
      Environment::testResult("The variable is not string or array.", false);
174
    } elseif(is_string($actual) AND is_string($needle)) {
175
      if($needle === "" OR strpos($actual, $needle) === false) {
176
        Environment::testResult("");
177
      } else {
178
        Environment::testResult("$needle is in the variable.", false);
179
      }
180
    } elseif(is_array($actual)) {
181
      if(!in_array($needle, $actual)) {
182
        Environment::testResult("");
183
      } else {
184
        Environment::testResult(self::showStringOrArray($needle) . " is in the variable.", false);
185
      }
186
    } else {
187
      Environment::testResult(self::showStringOrArray($needle) . " is not in the variable.", false);
188
    }
189
  }
190
  
191
  /**
192
   * Does $value contain $count items?
193
   *
194
   * @param string|array|\Countable $value
195
   */
196
  public static function count(int $count, $value): void {
197
    if(!is_array($value) AND !$value instanceof \Countable) {
198
      Environment::testResult("The variable is not array or countable object.", false);
199
    } elseif(count($value) === $count) {
200
      Environment::testResult("");
201
    } else {
202
      $actual = count($value);
203
      Environment::testResult("Count of the variable is $actual.", false);
204
    }
205
  }
206
  
207
  /**
208
   * Does $value not contain $count items?
209
   *
210
   * @param string|array|\Countable $value
211
   */
212
  public static function notCount(int $count, $value): void {
213
    if(!is_array($value) AND !$value instanceof \Countable) {
214
      Environment::testResult("The variable is not array or countable object.", false);
215
    } elseif(count($value) === $count) {
216
      $actual = count($value);
217
      Environment::testResult("Count of the variable is $actual.", false);
218
    } else {
219
      Environment::testResult("");
220
    }
221
  }
222
  
223
  /**
224
   * Is $value of type $type?
225
   * 
226
   * @param string|object $type
227
   * @param mixed $value
228
   */
229
  public static function type($type, $value): void {
230
    if(!is_object($type) AND !is_string($type)) {
0 ignored issues
show
introduced by
The condition is_string($type) is always true.
Loading history...
231
      Environment::testResult("Type must be string or object.", false);
232
    } elseif(in_array($type, ["array", "bool", "callable", "float",
233
      "int", "integer", "null", "object", "resource", "scalar", "string"], true)) {
234
      if(!call_user_func("is_$type", $value)) {
235
        Environment::testResult("The variable is " . gettype($value) . ".", false);
236
      } else {
237
        Environment::testResult("");
238
      }
239
    } elseif(!$value instanceof $type) {
240
      $actual = is_object($value) ? get_class($value) : gettype($value);
241
      Environment::testResult("The variable is instance of $actual.", false);
242
    } else {
243
      Environment::testResult("");
244
    }
245
  }
246
}
247
?>