Skip to content

Commit f457315

Browse files
committed
improved tests
1 parent e910c89 commit f457315

File tree

3 files changed

+141
-72
lines changed

3 files changed

+141
-72
lines changed
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
use Nette\PhpGenerator\PhpNamespace;
6+
use Tester\Assert;
7+
8+
require __DIR__ . '/../bootstrap.php';
9+
10+
11+
// global namespace
12+
$namespace = new PhpNamespace('');
13+
14+
Assert::same('', $namespace->getName());
15+
Assert::same('A', $namespace->simplifyName('A'));
16+
Assert::same('foo\A', $namespace->simplifyName('foo\A'));
17+
18+
$namespace->addUse('Bar\C');
19+
20+
Assert::same('Bar', $namespace->simplifyName('Bar'));
21+
Assert::same('C', $namespace->simplifyName('bar\C'));
22+
Assert::same('C\D', $namespace->simplifyName('Bar\C\D'));
23+
24+
foreach (['String', 'string', 'int', 'float', 'bool', 'array', 'callable', 'self', 'parent', ''] as $type) {
25+
Assert::same($type, $namespace->simplifyName($type));
26+
}
27+
28+
29+
// namespace
30+
$namespace = new PhpNamespace('Foo');
31+
32+
Assert::same('Foo', $namespace->getName());
33+
Assert::same('\A', $namespace->simplifyName('\A'));
34+
Assert::same('\A', $namespace->simplifyName('A'));
35+
Assert::same('A', $namespace->simplifyName('foo\A'));
36+
37+
Assert::same('A', $namespace->simplifyType('foo\A'));
38+
Assert::same('null|A', $namespace->simplifyType('null|foo\A'));
39+
Assert::same('?A', $namespace->simplifyType('?foo\A'));
40+
Assert::same('A&\Countable', $namespace->simplifyType('foo\A&Countable'));
41+
Assert::same('', $namespace->simplifyType(''));
42+
43+
$namespace->addUse('Foo');
44+
Assert::same('B', $namespace->simplifyName('Foo\B'));
45+
46+
$namespace->addUse('Bar\C');
47+
Assert::same(['C' => 'Bar\C', 'Foo' => 'Foo'], $namespace->getUses());
48+
Assert::same('C', $namespace->simplifyName('Foo\C'));
49+
50+
Assert::same('\Bar', $namespace->simplifyName('Bar'));
51+
Assert::same('C', $namespace->simplifyName('\bar\C'));
52+
Assert::same('C', $namespace->simplifyName('bar\C'));
53+
Assert::same('C\D', $namespace->simplifyName('Bar\C\D'));
54+
Assert::same('A<C, C\D>', $namespace->simplifyType('foo\A<\bar\C, Bar\C\D>'));
55+
Assert::same('žluťoučký', $namespace->simplifyType('foo\žluťoučký'));
56+
57+
58+
// duplicity
59+
$namespace = new PhpNamespace('Foo');
60+
$namespace->addUse('Bar\C');
61+
62+
Assert::exception(function () use ($namespace) {
63+
$namespace->addTrait('C');
64+
}, Nette\InvalidStateException::class, "Alias 'C' used already for 'Bar\\C', cannot use for 'Foo\\C'.");
65+
66+
$namespace->addClass('B');
67+
Assert::exception(function () use ($namespace) {
68+
$namespace->addUse('Lorem\B', 'B');
69+
}, Nette\InvalidStateException::class, "Alias 'B' used already for 'Foo\\B', cannot use for 'Lorem\\B'.");
70+
71+
Assert::same(['C' => 'Bar\\C', 'B' => 'Foo\\B'], $namespace->getUses());
72+
73+
74+
// alias generation
75+
$namespace = new PhpNamespace('');
76+
$namespace->addUse('C');
77+
Assert::same('C', $namespace->simplifyName('C'));
78+
$namespace->addUse('Bar\C');
79+
Assert::same('BarC', $namespace->simplifyName('Bar\C'));
80+
81+
$namespace = new PhpNamespace('');
82+
$namespace->addUse('Bar\C');
83+
Assert::exception(function () use ($namespace) {
84+
$namespace->addUse('C');
85+
}, Nette\InvalidStateException::class, "Alias 'C' used already for 'Bar\\C', cannot use for 'C'.");
86+
87+
$namespace = new PhpNamespace('');
88+
$namespace->addUse('A');
89+
Assert::same('A', $namespace->simplifyName('A'));
90+
$namespace->addUse('Bar\A');
91+
Assert::same('BarA', $namespace->simplifyName('Bar\A'));
92+
93+
$namespace = new PhpNamespace('Foo');
94+
$namespace->addUse('C');
95+
Assert::same('C', $namespace->simplifyName('C'));
96+
$namespace->addUse('Bar\C');
97+
Assert::same('BarC', $namespace->simplifyName('Bar\C'));
98+
Assert::same('C', $namespace->simplifyName('Foo\C'));
99+
Assert::exception(function () use ($namespace) {
100+
$namespace->addUse('Foo\C');
101+
}, Nette\InvalidStateException::class, "Alias 'C' used already for 'C', cannot use for 'Foo\\C'.");
102+
103+
$namespace = new PhpNamespace('Foo');
104+
$namespace->addUse('Bar\C');
105+
$namespace->addUse('C');
106+
Assert::same('C1', $namespace->simplifyName('C'));

tests/PhpGenerator/PhpNamespace.phpt

Lines changed: 0 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
<?php
22

3-
/**
4-
* Test: Nette\PhpGenerator for files.
5-
*/
6-
73
declare(strict_types=1);
84

95
use Nette\PhpGenerator\PhpNamespace;
@@ -13,54 +9,10 @@ require __DIR__ . '/../bootstrap.php';
139

1410

1511
$namespace = new PhpNamespace('');
16-
1712
Assert::same('', $namespace->getName());
18-
Assert::same('A', $namespace->simplifyName('A'));
19-
Assert::same('foo\A', $namespace->simplifyName('foo\A'));
20-
21-
$namespace->addUse('Bar\C');
22-
23-
Assert::same('Bar', $namespace->simplifyName('Bar'));
24-
Assert::same('C', $namespace->simplifyName('bar\C'));
25-
Assert::same('C\D', $namespace->simplifyName('Bar\C\D'));
26-
27-
foreach (['String', 'string', 'int', 'float', 'bool', 'array', 'callable', 'self', 'parent', ''] as $type) {
28-
Assert::same($type, $namespace->simplifyName($type));
29-
}
30-
3113

3214
$namespace = new PhpNamespace('Foo');
33-
3415
Assert::same('Foo', $namespace->getName());
35-
Assert::same('\A', $namespace->simplifyName('\A'));
36-
Assert::same('\A', $namespace->simplifyName('A'));
37-
Assert::same('\A\\', $namespace->simplifyName('A\\'));
38-
Assert::same('A', $namespace->simplifyName('foo\A'));
39-
Assert::same('A\\', $namespace->simplifyName('foo\A\\'));
40-
41-
Assert::same('A', $namespace->simplifyType('foo\A'));
42-
Assert::same('null|A', $namespace->simplifyType('null|foo\A'));
43-
Assert::same('?A', $namespace->simplifyType('?foo\A'));
44-
Assert::same('A&\Countable', $namespace->simplifyType('foo\A&Countable'));
45-
Assert::same('', $namespace->simplifyType(''));
46-
47-
$namespace->addUse('Foo');
48-
Assert::same('B', $namespace->simplifyName('Foo\B'));
49-
50-
$namespace->addUse('Bar\C');
51-
Assert::same(['C' => 'Bar\C', 'Foo' => 'Foo'], $namespace->getUses());
52-
53-
Assert::same('\Bar', $namespace->simplifyName('Bar'));
54-
Assert::same('C', $namespace->simplifyName('\bar\C'));
55-
Assert::same('C', $namespace->simplifyName('bar\C'));
56-
Assert::same('C\D', $namespace->simplifyName('Bar\C\D'));
57-
Assert::same('A<C, C\D>', $namespace->simplifyType('foo\A<\bar\C, Bar\C\D>'));
58-
Assert::same('žluťoučký', $namespace->simplifyType('foo\žluťoučký'));
59-
60-
foreach (['String', 'string', 'int', 'float', 'bool', 'array', 'callable', 'self', 'parent', ''] as $type) {
61-
Assert::same($type, $namespace->simplifyName($type));
62-
}
63-
6416

6517
$classA = $namespace->addClass('A');
6618
Assert::same($namespace, $classA->getNamespace());
@@ -70,27 +22,3 @@ Assert::same($namespace, $interfaceB->getNamespace());
7022

7123
Assert::count(2, $namespace->getClasses());
7224
Assert::type(Nette\PhpGenerator\ClassType::class, $namespace->getClasses()['A']);
73-
74-
Assert::exception(function () use ($namespace) {
75-
$traitC = $namespace->addTrait('C');
76-
Assert::same($namespace, $traitC->getNamespace());
77-
}, Nette\InvalidStateException::class, "Alias 'C' used already for 'Bar\\C', cannot use for 'Foo\\C'.");
78-
79-
$classA
80-
->addImplement('Foo\A')
81-
->addImplement('Bar\C')
82-
->addTrait('Bar\D')
83-
->addAttribute('Foo\A');
84-
85-
$method = $classA->addMethod('test');
86-
$method->addAttribute('Foo\A');
87-
$method->setReturnType('static|Foo\A');
88-
89-
$method->addParameter('a')->setType('Bar\C')->addAttribute('Bar\D');
90-
$method->addParameter('b')->setType('self');
91-
$method->addParameter('c')->setType('parent');
92-
$method->addParameter('d')->setType('array');
93-
$method->addParameter('e')->setType('?callable');
94-
$method->addParameter('f')->setType('Bar\C|string');
95-
96-
sameFile(__DIR__ . '/expected/PhpNamespace.expect', (string) $namespace);
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
use Nette\PhpGenerator\PhpNamespace;
6+
7+
require __DIR__ . '/../bootstrap.php';
8+
9+
10+
$namespace = new PhpNamespace('Foo');
11+
12+
$namespace->addUse('Foo');
13+
$namespace->addUse('Bar\C');
14+
15+
$classA = $namespace->addClass('A');
16+
$interfaceB = $namespace->addInterface('B');
17+
18+
$classA
19+
->addImplement('Foo\A')
20+
->addImplement('Bar\C')
21+
->addTrait('Bar\D')
22+
->addAttribute('Foo\A');
23+
24+
$method = $classA->addMethod('test');
25+
$method->addAttribute('Foo\A');
26+
$method->setReturnType('static|Foo\A');
27+
28+
$method->addParameter('a')->setType('Bar\C')->addAttribute('Bar\D');
29+
$method->addParameter('b')->setType('self');
30+
$method->addParameter('c')->setType('parent');
31+
$method->addParameter('d')->setType('array');
32+
$method->addParameter('e')->setType('?callable');
33+
$method->addParameter('f')->setType('Bar\C|string');
34+
35+
sameFile(__DIR__ . '/expected/PhpNamespace.expect', (string) $namespace);

0 commit comments

Comments
 (0)