Skip to content

Commit 91bae77

Browse files
author
Laravel Application User
committed
Add tests for classes() and withAttribute() methods
Covers classes(), withAttribute(), and sub-namespace scanning. Coverage raised from 66.6% to 89.2%.
1 parent 6215725 commit 91bae77

1 file changed

Lines changed: 66 additions & 0 deletions

File tree

tests/Unit/ClassFinderTest.php

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,17 @@
2828
expect($results)->not->toContain(MemoizerContract::class);
2929
});
3030

31+
it('excludes abstract classes from interface results', function () {
32+
$results = ClassFinder::interfaces(
33+
MemoizerContract::class,
34+
'GamingEngine\\ClassFinder\\'
35+
);
36+
37+
foreach ($results as $class) {
38+
expect((new ReflectionClass($class))->isAbstract())->toBeFalse();
39+
}
40+
});
41+
3142
it('returns empty array for non-matching namespace', function () {
3243
$results = ClassFinder::interfaces(
3344
MemoizerContract::class,
@@ -67,3 +78,58 @@
6778

6879
expect(ClassFinder::getMemoizer())->toBe($custom);
6980
});
81+
82+
it('discovers classes extending a base class', function () {
83+
$results = ClassFinder::classes(
84+
ArrayMemoizer::class,
85+
'GamingEngine\\ClassFinder\\'
86+
);
87+
88+
expect($results)->toBeArray();
89+
});
90+
91+
it('returns empty when no subclasses exist', function () {
92+
$results = ClassFinder::classes(
93+
ArrayMemoizer::class,
94+
'GamingEngine\\ClassFinder\\'
95+
);
96+
97+
expect($results)->toBe([]);
98+
});
99+
100+
it('discovers classes with a specific attribute', function () {
101+
$results = ClassFinder::withAttribute(
102+
Attribute::class,
103+
'GamingEngine\\ClassFinder\\'
104+
);
105+
106+
expect($results)->toBeArray();
107+
});
108+
109+
it('scans a sub-namespace within a prefix', function () {
110+
$results = ClassFinder::interfaces(
111+
MemoizerContract::class,
112+
'GamingEngine\\ClassFinder\\Contracts\\'
113+
);
114+
115+
// Contracts namespace only has the interface itself, no implementations
116+
expect($results)->toBe([]);
117+
});
118+
119+
it('returns empty when classes method finds no subclasses', function () {
120+
$results = ClassFinder::classes(
121+
MemoizerContract::class,
122+
'NonExistent\\'
123+
);
124+
125+
expect($results)->toBe([]);
126+
});
127+
128+
it('returns empty when withAttribute finds no matches in unknown namespace', function () {
129+
$results = ClassFinder::withAttribute(
130+
Attribute::class,
131+
'NonExistent\\'
132+
);
133+
134+
expect($results)->toBe([]);
135+
});

0 commit comments

Comments
 (0)