Skip to content

Commit 2a6f9c1

Browse files
committed
Upd.
1 parent d5304dd commit 2a6f9c1

File tree

17 files changed

+508
-44
lines changed

17 files changed

+508
-44
lines changed

.gitignore

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,9 @@
2222
hs_err_pid*
2323

2424

25-
.idea/
25+
.idea/
26+
vendor/
27+
**/tester.json
28+
package-lock.php.yml
29+
package.*.yml
30+
!package.php.yml

.travis.yml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
language: java
2+
3+
jdk:
4+
- oraclejdk9
5+
- oraclejdk8
6+
7+
before_install:
8+
- wget -O - https://github.com/jphp-compiler/jphp/releases/download/jppm-0.2.7/jppm-setup-0.2.7.sh | bash
9+
10+
script: cd ./tests/ && jppm check

examples/simple/package.php.yml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
name: simple
2+
version: 1.0.0
3+
4+
deps:
5+
jphp-core: '*'
6+
jphp-zend-ext: '*'
7+
8+
devDeps:
9+
tester: '../../'
10+
11+
plugins:
12+
- App
13+
14+
sources:
15+
- src
16+
17+
includes:
18+
- index.php

examples/simple/src/index.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
<?php
2+
echo "Hello World\n";
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
3+
use support\BasicTest;
4+
use tester\Assert;
5+
6+
class SimpleTest extends BasicTest
7+
{
8+
/*public function testBasic()
9+
{
10+
Assert::isEqual("100", 105);
11+
Assert::isIdentical("100", "100");
12+
}
13+
14+
public function testFeature2()
15+
{
16+
Assert::isIdentical("100", 100);
17+
}*/
18+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<?php
2+
namespace support;
3+
4+
use tester\TestCase;
5+
6+
abstract class BasicTest extends TestCase
7+
{
8+
9+
}

package.php.yml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,15 @@ plugins: [Doc, Hub]
88

99
deps:
1010
jphp-runtime: '*'
11-
11+
jphp-json-ext: '*'
12+
1213
sources:
1314
- src
1415

1516
plugin:
1617
list: [tester\TesterPlugin]
1718
sources:
1819
- src-plugin
20+
21+
config:
22+
ignore: ['/.git/**', '/.idea/**', '/examples/**', '/tests/**']

src-plugin/tester/TesterPlugin.php

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
use packager\Event;
55
use packager\JavaExec;
66
use packager\Vendor;
7+
use php\format\JsonProcessor;
78
use php\lib\arr;
89
use php\lib\fs;
910
use phpx\parser\ClassRecord;
@@ -21,23 +22,26 @@ class TesterPlugin
2122
/**
2223
* @jppm-need-package
2324
*
24-
* @jppm-denendency-of test
25+
* @jppm-dependency-of test
2526
*
2627
* @jppm-description Run all tests.
2728
* @param $event
2829
*/
2930
public function run(Event $event)
3031
{
32+
\Tasks::run('install');
33+
3134
$vendor = new Vendor($event->package()->getConfigVendorPath());
3235

3336
$exec = new JavaExec();
3437
$exec->setSystemProperties([
35-
'bootstrap.file' => 'tester/.bootstrap.php'
38+
'bootstrap.file' => 'res://tester/.bootstrap.php'
3639
]);
3740

3841
$exec->addPackageClassPath($event->package());
3942
$exec->addVendorClassPath($vendor);
40-
$exec->addClassPath("./tests");
43+
$exec->addVendorClassPath($vendor, 'dev');
44+
$exec->addClassPath("./tests/");
4145

4246
$files = fs::scan("./tests/", ['extensions' => ['php']]);
4347

@@ -51,7 +55,7 @@ public function run(Event $event)
5155

5256
foreach ($source->moduleRecord->getClasses() as $class) {
5357
if ($this->isTestCase($class, $testCases)) {
54-
$testCases[$class->name] = $class->name;
58+
$testCases[$class->name] = $class;
5559
}
5660
}
5761
}
@@ -64,19 +68,27 @@ public function run(Event $event)
6468
if ($testCases[$class->name]) continue;
6569

6670
if ($this->isTestCase($class, $testCases)) {
67-
$testCases[$class->name] = $class->name;
71+
$testCases[$class->name] = $class;
6872
}
6973
}
7074
}
7175

72-
fs::format($vendor->getDir() . "/tester.json", [
73-
'testCases' => arr::values($testCases)
74-
]);
76+
fs::format("./tests/tester.json", [
77+
'testCases' => flow($testCases)
78+
->find(function ($class) { return !$class->abstract; })
79+
->map(function ($class) { return $class->name; })
80+
->toArray()
81+
], JsonProcessor::SERIALIZE_PRETTY_PRINT);
82+
83+
$process = $exec->run();
84+
$process = $process->inheritIO()->startAndWait();
85+
86+
exit($process->getExitValue());
7587
}
7688

7789
protected function isTestCase(ClassRecord $record, array $otherTestCases = [])
7890
{
79-
if ($record->parent && !$record->abstract && $record->type === 'CLASS') {
91+
if ($record->parent && $record->type === 'CLASS') {
8092
if ($record->parent->name === 'tester\TestCase' || $otherTestCases[$record->parent->name]) {
8193
return true;
8294
}

src/tester/.bootstrap.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<?php
2+
3+
use php\lib\fs;
4+
use tester\StdoutPrinter;
5+
use tester\TestEnvironment;
6+
7+
$env = new TestEnvironment();
8+
$env->addPrinter(new StdoutPrinter());
9+
$env->run(fs::parse("./tests/tester.json"));

src/tester/Assert.php

Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
<?php
2+
namespace tester;
3+
4+
5+
use php\lib\reflect;
6+
use php\lib\str;
7+
8+
class Assert
9+
{
10+
/**
11+
* @param $value
12+
* @return string
13+
*/
14+
static protected function formatValue($value): string
15+
{
16+
if ($value === null) {
17+
return "NULL";
18+
}
19+
20+
if (is_object($value)) {
21+
return "instance of " . reflect::typeOf($value);
22+
}
23+
24+
if (is_array($value)) {
25+
$result = var_export($value, true);
26+
if (str::length($result) > 255) {
27+
return "Array<" . sizeof($value) . ">";
28+
} else {
29+
return $result;
30+
}
31+
}
32+
33+
return var_export($value, true);
34+
}
35+
36+
/**
37+
* @param string $message
38+
* @param array ...$args
39+
* @throws AssertionError
40+
*/
41+
static function fail(string $message, $formatted, ...$args)
42+
{
43+
foreach ($args as $i => $arg) {
44+
$formatted = str::replace($formatted, "\{$i\}", Assert::formatValue($arg));
45+
}
46+
47+
if (isset($message) && $message !== '') {
48+
$formatted = "$message, $formatted";
49+
}
50+
51+
throw new AssertionError($formatted);
52+
}
53+
54+
/**
55+
* @param $expected
56+
* @param $actual
57+
* @param string|null $message
58+
* @throws AssertionError
59+
*/
60+
static function isEqual($expected, $actual, string $message = null)
61+
{
62+
if ($expected != $actual) {
63+
Assert::fail($message, "expected: {0}, but was: {1}", $expected, $actual);
64+
}
65+
}
66+
67+
/**
68+
* @param $expected
69+
* @param $actual
70+
* @param string|null $message
71+
*/
72+
static function isIdentical($expected, $actual, string $message = null)
73+
{
74+
if ($expected !== $actual) {
75+
Assert::fail($message, 'expected: {0}, but was: {1}, is not identical', $expected, $actual);
76+
}
77+
}
78+
79+
/**
80+
* @param $actual
81+
* @param string|null $message
82+
*/
83+
static function isNull($actual, string $message = null)
84+
{
85+
if ($actual !== null) {
86+
Assert::fail($message, "expected NULL, but was: {0}", $actual);
87+
}
88+
}
89+
90+
/**
91+
* @param $actual
92+
* @param string|null $message
93+
*/
94+
static function isNotNull($actual, string $message = null)
95+
{
96+
if ($actual === null) {
97+
Assert::fail($message, "expected not NULL, but was: {0}", $actual);
98+
}
99+
}
100+
101+
/**
102+
* @param $actual
103+
* @param string|null $message
104+
*/
105+
static function isTrue($actual, string $message = null)
106+
{
107+
if ($actual !== true) {
108+
Assert::fail($message, "expected true, but was: {0}", $actual);
109+
}
110+
}
111+
112+
/**
113+
* @param $actual
114+
* @param string|null $message
115+
*/
116+
static function isFalse($actual, string $message = null)
117+
{
118+
if ($actual !== false) {
119+
Assert::fail($message, "expected false, but was: {0}", $actual);
120+
}
121+
}
122+
123+
/**
124+
* @param $actual
125+
* @param string|null $message
126+
*/
127+
static function isEmpty($actual, string $message = null)
128+
{
129+
if (!empty($actual)) {
130+
Assert::fail($message, "expected empty, but was: {0}", $actual);
131+
}
132+
}
133+
134+
/**
135+
* @param $actual
136+
* @param string|null $message
137+
*/
138+
static function isNotEmpty($actual, string $message = null)
139+
{
140+
if (empty($actual)) {
141+
Assert::fail($message, "expected not empty, but was: {0}", $actual);
142+
}
143+
}
144+
}

0 commit comments

Comments
 (0)