Skip to content

Commit 605a107

Browse files
committed
tests: improved, fixed optional parameters before required parameters
1 parent 7c965ce commit 605a107

File tree

4 files changed

+71
-53
lines changed

4 files changed

+71
-53
lines changed
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?php
2+
3+
/**
4+
* Test: Nette\PhpGenerator\Dumper::dump() errors
5+
*/
6+
7+
declare(strict_types=1);
8+
9+
use Nette\PhpGenerator\Dumper;
10+
use Tester\Assert;
11+
12+
13+
require __DIR__ . '/../bootstrap.php';
14+
15+
16+
Assert::exception(function () {
17+
$rec = [];
18+
$rec[] = &$rec;
19+
$dumper = new Dumper;
20+
$dumper->dump($rec);
21+
}, Nette\InvalidArgumentException::class, 'Nesting level too deep or recursive dependency.');
22+
23+
24+
Assert::exception(function () {
25+
$rec = new stdClass;
26+
$rec->x = &$rec;
27+
$dumper = new Dumper;
28+
$dumper->dump($rec);
29+
}, Nette\InvalidArgumentException::class, 'Nesting level too deep or recursive dependency.');

tests/PhpGenerator/Dumper.dump().phpt

Lines changed: 27 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ require __DIR__ . '/../bootstrap.php';
1616
ini_set('serialize_precision', '14');
1717

1818
$dumper = new Dumper;
19+
20+
// scalars
1921
Assert::same('0', $dumper->dump(0));
2022
Assert::same('1', $dumper->dump(1));
2123
Assert::same('0.0', $dumper->dump(0.0));
@@ -38,16 +40,19 @@ Assert::same(
3840
Assert::same('"\rHello \$"', $dumper->dump("\rHello $"));
3941
Assert::same("'He\\llo'", $dumper->dump('He\llo'));
4042
Assert::same('\'He\ll\\\\\o \\\'wor\\\\\\\'ld\\\\\'', $dumper->dump('He\ll\\\o \'wor\\\'ld\\'));
41-
Assert::same('[]', $dumper->dump([]));
4243

43-
// internal classes
44+
45+
// literal
4446
Assert::same('[$s]', $dumper->dump([new PhpLiteral('$s')]));
4547
same('[
4648
function () {
4749
return 1;
4850
},
4951
]', $dumper->dump([(new Nette\PhpGenerator\Closure)->setBody('return 1;')]));
5052

53+
54+
// arrays
55+
Assert::same('[]', $dumper->dump([]));
5156
Assert::same('[1, 2, 3]', $dumper->dump([1, 2, 3]));
5257
Assert::same("['a']", $dumper->dump(['a']));
5358
Assert::same("[2 => 'a']", $dumper->dump([2 => 'a']));
@@ -56,19 +61,8 @@ Assert::same("[-2 => 'a', -1 => 'b']", $dumper->dump([-2 => 'a', -1 => 'b']));
5661
Assert::same("[-2 => 'a', 0 => 'b']", $dumper->dump([-2 => 'a', 0 => 'b']));
5762
Assert::same("[0 => 'a', -2 => 'b', 1 => 'c']", $dumper->dump(['a', -2 => 'b', 1 => 'c']));
5863

59-
$dumper->wrapLength = 100;
60-
same("[
61-
[
62-
'a',
63-
'loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong',
64-
],
65-
]", $dumper->dump([['a', 'loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong']]));
66-
67-
Assert::same(
68-
"['a' => 1, 0 => [\"\\r\" => \"\\r\", 0 => 2], 1 => 3]",
69-
$dumper->dump(['a' => 1, ["\r" => "\r", 2], 3])
70-
);
7164

65+
// stdClass
7266
Assert::same(
7367
"(object) [\n\t'a' => 1,\n\t'b' => 2,\n]",
7468
$dumper->dump((object) ['a' => 1, 'b' => 2])
@@ -80,6 +74,7 @@ Assert::same(
8074
);
8175

8276

77+
// objects
8378
class Test
8479
{
8580
public $a = 1;
@@ -121,6 +116,23 @@ Assert::same(
121116
Assert::equal(new Test2, eval('return ' . $dumper->dump(new Test2) . ';'));
122117

123118

119+
Assert::exception(function () {
120+
$dumper = new Dumper;
121+
$dumper->dump(new class {
122+
});
123+
}, Nette\InvalidArgumentException::class, 'Cannot dump anonymous class.');
124+
125+
126+
127+
// closures
128+
Assert::exception(function () {
129+
$dumper = new Dumper;
130+
$dumper->dump(function () {});
131+
}, Nette\InvalidArgumentException::class, 'Cannot dump closure.');
132+
133+
134+
135+
// serializable
124136
class Test3 implements Serializable
125137
{
126138
private $a;
@@ -140,13 +152,9 @@ class Test3 implements Serializable
140152
Assert::same('unserialize(\'C:5:"Test3":0:{}\')', $dumper->dump(new Test3));
141153
Assert::equal(new Test3, eval('return ' . $dumper->dump(new Test3) . ';'));
142154

143-
Assert::exception(function () {
144-
$dumper = new Dumper;
145-
$dumper->dump(function () {});
146-
}, Nette\InvalidArgumentException::class, 'Cannot dump closure.');
147-
148155

149156

157+
// datetime
150158
class TestDateTime extends DateTime
151159
{
152160
}
@@ -167,25 +175,3 @@ same(
167175
])",
168176
$dumper->dump(new TestDateTime('2016-06-22 20:52:43.1234', new DateTimeZone('Europe/Prague')))
169177
);
170-
171-
Assert::exception(function () {
172-
$dumper = new Dumper;
173-
$dumper->dump(new class {
174-
});
175-
}, Nette\InvalidArgumentException::class, 'Cannot dump anonymous class.');
176-
177-
178-
Assert::exception(function () {
179-
$rec = [];
180-
$rec[] = &$rec;
181-
$dumper = new Dumper;
182-
$dumper->dump($rec);
183-
}, Nette\InvalidArgumentException::class, 'Nesting level too deep or recursive dependency.');
184-
185-
186-
Assert::exception(function () {
187-
$rec = new stdClass;
188-
$rec->x = &$rec;
189-
$dumper = new Dumper;
190-
$dumper->dump($rec);
191-
}, Nette\InvalidArgumentException::class, 'Nesting level too deep or recursive dependency.');

tests/PhpGenerator/expected/ClassType.from.expect

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -50,15 +50,13 @@ class Class2 extends Class1 implements Interface2
5050
* Func3
5151
* @return Class1
5252
*/
53-
private function &func3(
54-
array $a = [],
55-
Class2 $b = null,
56-
Unknown $c,
57-
\Xyz\Unknown $d,
58-
callable $e,
59-
$f = Abc\Unknown::ABC,
60-
$g
61-
) {
53+
private function &func3(array $a, Class2 $b, Unknown $c, \Xyz\Unknown $d, ?callable $e, $f)
54+
{
55+
}
56+
57+
58+
private function func4(array $a = [], Class2 $b = null, $c = Abc\Unknown::ABC)
59+
{
6260
}
6361

6462

@@ -79,7 +77,7 @@ class Class4
7977

8078
class Class5
8179
{
82-
public function func1(\A $a, ?\B $b, \C $c = null, \D $d = null, \E $e, ?int $i = 1, ?array $arr = [])
80+
public function func1(\A $a, ?\B $b, \C $c = null, \D $d = null, ?int $i = 1, ?array $arr = [])
8381
{
8482
}
8583

tests/PhpGenerator/fixtures/classes.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,12 @@ class Class2 extends Class1 implements Interface2
5959
* Func3
6060
* @return Class1
6161
*/
62-
private function &func3(array $a = [], Class2 $b = null, \Abc\Unknown $c, \Xyz\Unknown $d, callable $e, $f = Unknown::ABC, $g)
62+
private function &func3(array $a, Class2 $b, \Abc\Unknown $c, \Xyz\Unknown $d, ?callable $e, $f)
63+
{
64+
}
65+
66+
67+
private function func4(array $a = [], Class2 $b = null, $c = Unknown::ABC)
6368
{
6469
}
6570

@@ -84,7 +89,7 @@ class Class4
8489
/** */
8590
class Class5
8691
{
87-
public function func1(\A $a, ?\B $b, ?\C $c = null, \D $d = null, \E $e, ?int $i = 1, ?array $arr = [])
92+
public function func1(\A $a, ?\B $b, ?\C $c = null, \D $d = null, ?int $i = 1, ?array $arr = [])
8893
{
8994
}
9095

0 commit comments

Comments
 (0)