Skip to content

Commit 37c8d29

Browse files
committed
Add access, name, static and staticvar tests
1 parent c24f07e commit 37c8d29

4 files changed

Lines changed: 266 additions & 0 deletions

File tree

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace TypeLang\PhpDoc\Tests\DocBlock\Tag;
6+
7+
use PHPUnit\Framework\Attributes\Test;
8+
use TypeLang\PhpDoc\DocBlock\Combinator\AccessCombinator;
9+
use TypeLang\PhpDoc\DocBlock\Combinator\DescriptionCombinator;
10+
use TypeLang\PhpDoc\DocBlock\Tag\AccessTag\AccessTag;
11+
use TypeLang\PhpDoc\DocBlock\Tag\AccessTag\AccessTagDefinition;
12+
use TypeLang\PhpDoc\DocBlock\Tag\AccessTag\Visibility;
13+
use TypeLang\PhpDoc\DocBlock\Tag\InvalidTag;
14+
use TypeLang\PhpDoc\DocBlockParser;
15+
use TypeLang\PhpDoc\TagFactory;
16+
use TypeLang\PhpDoc\Tests\TestCase;
17+
18+
final class AccessTagTest extends TestCase
19+
{
20+
#[Test]
21+
public function parsesVisibilityAndDescription(): void
22+
{
23+
$tag = self::factory()->create('access', 'protected Internal API.');
24+
25+
self::assertInstanceOf(AccessTag::class, $tag);
26+
self::assertSame(Visibility::Protected, $tag->access);
27+
self::assertSame('Internal API.', (string) $tag->description);
28+
self::assertSame('@access protected Internal API.', (string) $tag);
29+
}
30+
31+
#[Test]
32+
public function parsesVisibilityOnly(): void
33+
{
34+
$tag = self::factory()->create('access', 'private');
35+
36+
self::assertInstanceOf(AccessTag::class, $tag);
37+
self::assertSame(Visibility::Private, $tag->access);
38+
self::assertNull($tag->description);
39+
self::assertSame('@access private', (string) $tag);
40+
}
41+
42+
#[Test]
43+
public function rejectsUnknownVisibility(): void
44+
{
45+
$tag = self::factory()->create('access', 'package');
46+
47+
self::assertInstanceOf(InvalidTag::class, $tag);
48+
}
49+
50+
#[Test]
51+
public function resolvesThroughTheRealParser(): void
52+
{
53+
$block = new DocBlockParser()->parse('/** @access public */');
54+
55+
self::assertInstanceOf(AccessTag::class, $block->tags[0]);
56+
self::assertSame(Visibility::Public, $block->tags[0]->access);
57+
}
58+
59+
private static function factory(): TagFactory
60+
{
61+
return new TagFactory(
62+
definitions: [
63+
AccessTagDefinition::NAME => new AccessTagDefinition(),
64+
],
65+
combinators: [
66+
AccessCombinator::NAME => new AccessCombinator(),
67+
DescriptionCombinator::NAME => new DescriptionCombinator(self::createDescriptionParser()),
68+
],
69+
);
70+
}
71+
}
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace TypeLang\PhpDoc\Tests\DocBlock\Tag;
6+
7+
use PHPUnit\Framework\Attributes\Test;
8+
use TypeLang\PhpDoc\DocBlock\Combinator\DescriptionCombinator;
9+
use TypeLang\PhpDoc\DocBlock\Combinator\NameCombinator;
10+
use TypeLang\PhpDoc\DocBlock\Tag\InvalidTag;
11+
use TypeLang\PhpDoc\DocBlock\Tag\NameTag\NameTag;
12+
use TypeLang\PhpDoc\DocBlock\Tag\NameTag\NameTagDefinition;
13+
use TypeLang\PhpDoc\DocBlockParser;
14+
use TypeLang\PhpDoc\TagFactory;
15+
use TypeLang\PhpDoc\Tests\TestCase;
16+
17+
final class NameTagTest extends TestCase
18+
{
19+
#[Test]
20+
public function parsesAliasAndDescription(): void
21+
{
22+
$tag = self::factory()->create('name', 'globalConfig The shared configuration.');
23+
24+
self::assertInstanceOf(NameTag::class, $tag);
25+
self::assertSame('globalConfig', $tag->alias);
26+
self::assertSame('The shared configuration.', (string) $tag->description);
27+
self::assertSame('@name globalConfig The shared configuration.', (string) $tag);
28+
}
29+
30+
#[Test]
31+
public function parsesAliasOnly(): void
32+
{
33+
$tag = self::factory()->create('name', 'homepage');
34+
35+
self::assertInstanceOf(NameTag::class, $tag);
36+
self::assertSame('homepage', $tag->alias);
37+
self::assertNull($tag->description);
38+
self::assertSame('@name homepage', (string) $tag);
39+
}
40+
41+
#[Test]
42+
public function rejectsMissingAlias(): void
43+
{
44+
$tag = self::factory()->create('name', '');
45+
46+
self::assertInstanceOf(InvalidTag::class, $tag);
47+
}
48+
49+
#[Test]
50+
public function resolvesThroughTheRealParser(): void
51+
{
52+
$block = new DocBlockParser()->parse('/** @name homepage */');
53+
54+
self::assertInstanceOf(NameTag::class, $block->tags[0]);
55+
self::assertSame('homepage', $block->tags[0]->alias);
56+
}
57+
58+
private static function factory(): TagFactory
59+
{
60+
return new TagFactory(
61+
definitions: [
62+
NameTagDefinition::NAME => new NameTagDefinition(),
63+
],
64+
combinators: [
65+
NameCombinator::NAME => new NameCombinator(),
66+
DescriptionCombinator::NAME => new DescriptionCombinator(self::createDescriptionParser()),
67+
],
68+
);
69+
}
70+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace TypeLang\PhpDoc\Tests\DocBlock\Tag;
6+
7+
use PHPUnit\Framework\Attributes\Test;
8+
use TypeLang\PhpDoc\DocBlock\Combinator\DescriptionCombinator;
9+
use TypeLang\PhpDoc\DocBlock\Tag\StaticTag\StaticTag;
10+
use TypeLang\PhpDoc\DocBlock\Tag\StaticTag\StaticTagDefinition;
11+
use TypeLang\PhpDoc\DocBlockParser;
12+
use TypeLang\PhpDoc\TagFactory;
13+
use TypeLang\PhpDoc\Tests\TestCase;
14+
15+
final class StaticTagTest extends TestCase
16+
{
17+
#[Test]
18+
public function parsesDescription(): void
19+
{
20+
$tag = self::factory()->create('static', 'Kept for backward compatibility.');
21+
22+
self::assertInstanceOf(StaticTag::class, $tag);
23+
self::assertSame('Kept for backward compatibility.', (string) $tag->description);
24+
self::assertSame('@static Kept for backward compatibility.', (string) $tag);
25+
}
26+
27+
#[Test]
28+
public function parsesWithoutDescription(): void
29+
{
30+
$tag = self::factory()->create('static', '');
31+
32+
self::assertInstanceOf(StaticTag::class, $tag);
33+
self::assertNull($tag->description);
34+
self::assertSame('@static', (string) $tag);
35+
}
36+
37+
#[Test]
38+
public function resolvesThroughTheRealParser(): void
39+
{
40+
$block = new DocBlockParser()->parse('/** @static */');
41+
42+
self::assertInstanceOf(StaticTag::class, $block->tags[0]);
43+
}
44+
45+
private static function factory(): TagFactory
46+
{
47+
return new TagFactory(
48+
definitions: [
49+
StaticTagDefinition::NAME => new StaticTagDefinition(),
50+
],
51+
combinators: [
52+
DescriptionCombinator::NAME => new DescriptionCombinator(self::createDescriptionParser()),
53+
],
54+
);
55+
}
56+
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace TypeLang\PhpDoc\Tests\DocBlock\Tag;
6+
7+
use PHPUnit\Framework\Attributes\Test;
8+
use TypeLang\Parser\TypeParser;
9+
use TypeLang\PhpDoc\DocBlock\Combinator\DescriptionCombinator;
10+
use TypeLang\PhpDoc\DocBlock\Combinator\TypeCombinator;
11+
use TypeLang\PhpDoc\DocBlock\Combinator\VariableCombinator;
12+
use TypeLang\PhpDoc\DocBlock\Tag\StaticVarTag\StaticVarTag;
13+
use TypeLang\PhpDoc\DocBlock\Tag\StaticVarTag\StaticVarTagDefinition;
14+
use TypeLang\PhpDoc\DocBlockParser;
15+
use TypeLang\PhpDoc\TagFactory;
16+
use TypeLang\PhpDoc\Tests\TestCase;
17+
use TypeLang\Type\NamedTypeNode;
18+
19+
final class StaticVarTagTest extends TestCase
20+
{
21+
#[Test]
22+
public function parsesTypeVariableAndDescription(): void
23+
{
24+
$tag = self::factory()->create('staticvar', 'int $counter The call count.');
25+
26+
self::assertInstanceOf(StaticVarTag::class, $tag);
27+
self::assertInstanceOf(NamedTypeNode::class, $tag->type);
28+
self::assertSame('int', (string) $tag->type->name);
29+
self::assertSame('counter', $tag->variable);
30+
self::assertSame('The call count.', (string) $tag->description);
31+
self::assertSame('@staticvar int $counter The call count.', (string) $tag);
32+
}
33+
34+
#[Test]
35+
public function parsesTypeOnly(): void
36+
{
37+
$tag = self::factory()->create('staticvar', 'string');
38+
39+
self::assertInstanceOf(StaticVarTag::class, $tag);
40+
self::assertInstanceOf(NamedTypeNode::class, $tag->type);
41+
self::assertSame('string', (string) $tag->type->name);
42+
self::assertNull($tag->variable);
43+
self::assertNull($tag->description);
44+
self::assertSame('@staticvar string', (string) $tag);
45+
}
46+
47+
#[Test]
48+
public function resolvesThroughTheRealParser(): void
49+
{
50+
$block = new DocBlockParser()->parse('/** @staticvar int $cache */');
51+
52+
self::assertInstanceOf(StaticVarTag::class, $block->tags[0]);
53+
self::assertSame('cache', $block->tags[0]->variable);
54+
}
55+
56+
private static function factory(): TagFactory
57+
{
58+
return new TagFactory(
59+
definitions: [
60+
StaticVarTagDefinition::NAME => new StaticVarTagDefinition(),
61+
],
62+
combinators: [
63+
TypeCombinator::NAME => new TypeCombinator(new TypeParser()),
64+
VariableCombinator::NAME => new VariableCombinator(),
65+
DescriptionCombinator::NAME => new DescriptionCombinator(self::createDescriptionParser()),
66+
],
67+
);
68+
}
69+
}

0 commit comments

Comments
 (0)