Skip to content

Commit 82e6cc1

Browse files
committed
added tests
1 parent 97f9e54 commit 82e6cc1

File tree

4 files changed

+63
-5
lines changed

4 files changed

+63
-5
lines changed

tests/PhpGenerator/ClassType.interface.phpt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ $interface
2020
->addExtend('ITwo')
2121
->addComment('Description of interface');
2222

23+
Assert::same(['IOne', 'ITwo'], $interface->getExtends());
24+
2325
$interface->addMethod('getForm');
2426

2527
Assert::matchFile(__DIR__ . '/ClassType.interface.expect', (string) $interface);

tests/PhpGenerator/ClassType.phpt

Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,32 @@ require __DIR__ . '/../bootstrap.php';
1515

1616

1717
$class = new ClassType('Example');
18+
19+
Assert::false($class->isFinal());
20+
Assert::false($class->isAbstract());
21+
Assert::same([], $class->getExtends());
22+
Assert::same([], $class->getTraits());
23+
1824
$class
1925
->setAbstract(TRUE)
2026
->setFinal(TRUE)
2127
->setExtends('ParentClass')
2228
->addImplement('IExample')
2329
->addImplement('IOne')
24-
->addTrait('ObjectTrait')
30+
->setTraits(['ObjectTrait'])
2531
->addTrait('AnotherTrait', ['sayHello as protected'])
2632
->addComment("Description of class.\nThis is example\n")
2733
->addComment('@property-read Nette\Forms\Form $form')
2834
->setConstants(['ROLE' => 'admin'])
2935
->addConstant('ACTIVE', FALSE);
3036

37+
Assert::true($class->isFinal());
38+
Assert::true($class->isAbstract());
39+
Assert::same('ParentClass', $class->getExtends());
40+
Assert::same(['ObjectTrait', 'AnotherTrait'], $class->getTraits());
41+
Assert::count(2, $class->getConstants());
42+
Assert::type(Nette\PhpGenerator\Constant::class, $class->getConstants()['ROLE']);
43+
3144
$class->addConstant('FORCE_ARRAY', new PhpLiteral('Nette\Utils\Json::FORCE_ARRAY'))
3245
->setVisibility('private')
3346
->addComment('Commented');
@@ -43,6 +56,8 @@ $p = $class->addProperty('sections', ['first' => TRUE])
4356
->setStatic(TRUE);
4457

4558
Assert::same($p, $class->getProperty('sections'));
59+
Assert::true($p->isStatic());
60+
Assert::null($p->getVisibility());
4661

4762
$m = $class->addMethod('getHandle')
4863
->addComment('Returns file handle.')
@@ -51,14 +66,27 @@ $m = $class->addMethod('getHandle')
5166
->setBody('return $this->?;', ['handle']);
5267

5368
Assert::same($m, $class->getMethod('getHandle'));
54-
55-
$class->addMethod('getSections')
69+
Assert::true($m->isFinal());
70+
Assert::false($m->isStatic());
71+
Assert::false($m->isAbstract());
72+
Assert::false($m->getReturnReference());
73+
Assert::same('public', $m->getVisibility());
74+
Assert::same('return $this->handle;', $m->getBody());
75+
76+
$m = $class->addMethod('getSections')
5677
->setStatic(TRUE)
5778
->setVisibility('protected')
5879
->setReturnReference(TRUE)
5980
->addBody('$mode = ?;', [123])
60-
->addBody('return self::$sections;')
61-
->addParameter('mode', new PhpLiteral('self::ORDER'));
81+
->addBody('return self::$sections;');
82+
$m->addParameter('mode', new PhpLiteral('self::ORDER'));
83+
84+
Assert::false($m->isFinal());
85+
Assert::true($m->isStatic());
86+
Assert::true($m->getReturnReference());
87+
Assert::false($m->getReturnNullable());
88+
Assert::null($m->getReturnType());
89+
Assert::same('protected', $m->getVisibility());
6290

6391
$method = $class->addMethod('show')
6492
->setAbstract(TRUE);
@@ -87,3 +115,9 @@ $parameters = $method->getParameters();
87115
Assert::count(2, $parameters);
88116
$method->setParameters(array_values($parameters));
89117
Assert::same($parameters, $method->getParameters());
118+
119+
120+
Assert::exception(function () {
121+
$class = new ClassType;
122+
$class->addMethod('method')->setVisibility('unknown');
123+
}, Nette\InvalidArgumentException::class, 'Argument must be public|protected|private.');

tests/PhpGenerator/Closure.phpt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,24 @@ Assert::match(
2626
}', (string) $function);
2727

2828

29+
$uses = $function->getUses();
30+
Assert::count(2, $uses);
31+
Assert::type(Nette\PhpGenerator\Parameter::class, $uses[0]);
32+
Assert::type(Nette\PhpGenerator\Parameter::class, $uses[1]);
33+
34+
$uses = $function->setUses([$uses[0]]);
35+
36+
Assert::match(
37+
'function &($a, $b) use ($this) {
38+
return $a + $b;
39+
}', (string) $function);
40+
41+
Assert::exception(function () {
42+
$function = new Closure;
43+
$function->setUses([123]);
44+
}, TypeError::class);
45+
46+
2947
$closure = function (stdClass $a, $b = NULL) {};
3048
$function = Closure::from($closure);
3149
Assert::match(

tests/PhpGenerator/PhpNamespace.phpt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ Assert::same('\A', $namespace->unresolveName('A'));
3737
Assert::same('A', $namespace->unresolveName('foo\A'));
3838

3939
$namespace->addUse('Bar\C');
40+
Assert::same(['C' => 'Bar\\C'], $namespace->getUses());
4041

4142
Assert::same('\Bar', $namespace->unresolveName('Bar'));
4243
Assert::same('C', $namespace->unresolveName('\bar\C'));
@@ -54,6 +55,9 @@ Assert::same($namespace, $classA->getNamespace());
5455
$interfaceB = $namespace->addInterface('B');
5556
Assert::same($namespace, $interfaceB->getNamespace());
5657

58+
Assert::count(2, $namespace->getClasses());
59+
Assert::type(Nette\PhpGenerator\ClassType::class, $namespace->getClasses()['A']);
60+
5761
Assert::exception(function () use ($namespace) {
5862
$traitC = $namespace->addTrait('C');
5963
Assert::same($namespace, $traitC->getNamespace());

0 commit comments

Comments
 (0)