/
testfx.php
79 lines (67 loc) · 1.77 KB
/
testfx.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<?php
function monitor($action) {
$start = microtime(true);
$action();
$end = microtime(true);
$duration = $end - $start;
return $duration;
}
function print_result($testResult) {
if($testResult->success) {
echo "Success";
}
else {
print_fail($testResult->actual, $testResult->expected);
}
print(" in ".format_duration($testResult->duration)." ms.\n\n");
}
function format_duration($duration) {
return substr($duration, 0, 4);
}
function print_fail($actual, $expected) {
$sane_expectation = var_export($expected, true);
$actual_export = var_export($actual, true);
print("Expected:\n");
print($sane_expectation);
print("\nBut got:\n");
print($actual_export);
print("\n");
}
class TestResult {
public $actual;
public $duration;
public $expected;
public $success;
}
function expect($expected, $testCase) {
$result = monitorTestCase($testCase);
$testResult = new TestResult();
$testResult->expected = $expected;
$testResult->duration = $result[1];
$testResult->actual = $result[0];
$testResult->success = ($testResult->actual == $expected);
return $testResult;
}
function expect_times($expected, $times, $testCase) {
$totalDuration = 0;
for ($run=0; $run < $times; $run++) {
$testResult = expect($expected, $testCase);
if(!$testResult->success) {
print("Run ".$run." failed");
print_result($testResult);
break;
}
$totalDuration += $testResult->duration;
}
$averageDuration = $totalDuration / $times;
print("Average duration: ".format_duration($averageDuration)." \n");
}
function monitorTestCase($testCase) {
// fuck scope
$GLOBALS['testCase'] = $testCase;
$duration = monitor(function() {
$GLOBALS['actual'] = $GLOBALS['testCase']();
});
return [$GLOBALS['actual'], $duration];
}
?>