Skip to content

Commit cc6510e

Browse files
committed
Refactored tests
1 parent 03ae131 commit cc6510e

19 files changed

+223
-97
lines changed

tests/ClassLoaderMockTrait.php

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22

33
namespace Okapi\CodeTransformer\Tests;
44

5-
use Okapi\CodeTransformer\Service\ClassLoader\ClassLoader;
6-
use Okapi\CodeTransformer\Service\Cache\CachePaths;
7-
use Okapi\CodeTransformer\Service\DI;
8-
use Okapi\CodeTransformer\Service\StreamFilter;
9-
use Okapi\CodeTransformer\Service\StreamFilter\FilterInjector;
5+
use Okapi\CodeTransformer\Core\AutoloadInterceptor\ClassLoader;
6+
use Okapi\CodeTransformer\Core\Cache\CachePaths;
7+
use Okapi\CodeTransformer\Core\DI;
8+
use Okapi\CodeTransformer\Core\StreamFilter;
9+
use Okapi\CodeTransformer\Core\StreamFilter\FilterInjector;
1010
use Okapi\Path\Path;
1111
use PHPUnit\Framework\Assert;
1212
use ReflectionProperty;
@@ -30,7 +30,7 @@ private function findOriginalClassMock(string $class): string
3030
$this->findClassLoader();
3131
}
3232

33-
$original = new ReflectionProperty(ClassLoader::class, 'original');
33+
$original = new ReflectionProperty(ClassLoader::class, 'originalClassLoader');
3434
$original = $original->getValue($this->classLoader);
3535
return $original->findFile($class);
3636
}
@@ -59,7 +59,7 @@ public function assertWillBeTransformed(string $className): void
5959
Assert::assertEquals(
6060
$transformPath,
6161
$filePathMock,
62-
$className . ' will not be transformed',
62+
"$className will not be transformed",
6363
);
6464
}
6565

tests/Functional/DirectKernelTest.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@
33
namespace Okapi\CodeTransformer\Tests\Functional;
44

55
use Okapi\CodeTransformer\CodeTransformerKernel;
6-
use Okapi\CodeTransformer\Exception\Kernel\DirectKernelInitializationException;
7-
use Okapi\CodeTransformer\Tests\Util;
6+
use Okapi\CodeTransformer\Core\Exception\Kernel\DirectKernelInitializationException;
87
use PHPUnit\Framework\TestCase;
98

109
class DirectKernelTest extends TestCase

tests/Functional/InvalidTransformerClassTest.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,10 @@
22

33
namespace Okapi\CodeTransformer\Tests\Functional;
44

5-
use Okapi\CodeTransformer\Exception\Transformer\InvalidTransformerClassException;
6-
use Okapi\CodeTransformer\Exception\Transformer\TransformerNotFoundException;
5+
use Okapi\CodeTransformer\Core\Exception\Transformer\InvalidTransformerClassException;
6+
use Okapi\CodeTransformer\Core\Exception\Transformer\TransformerNotFoundException;
77
use Okapi\CodeTransformer\Tests\Stubs\Kernel\TransformerDoesNotExistKernel;
88
use Okapi\CodeTransformer\Tests\Stubs\Kernel\TransformerDoesNotExtendTransformerKernel;
9-
use Okapi\CodeTransformer\Tests\Util;
109
use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses;
1110
use PHPUnit\Framework\TestCase;
1211

tests/Functional/Workflow/ApplicationTest.php renamed to tests/Functional/Workflow/A_ApplicationTest.php

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
namespace Okapi\CodeTransformer\Tests\Functional\Workflow;
44

5-
use Okapi\CodeTransformer\Exception\Transformer\SyntaxError;
6-
use Okapi\CodeTransformer\Service\CacheStateManager;
7-
use Okapi\CodeTransformer\Service\DI;
5+
use Okapi\CodeTransformer\Core\Cache\CacheStateManager;
6+
use Okapi\CodeTransformer\Core\DI;
7+
use Okapi\CodeTransformer\Core\Exception\Transformer\SyntaxError;
88
use Okapi\CodeTransformer\Tests\ClassLoaderMockTrait;
99
use Okapi\CodeTransformer\Tests\Stubs\ClassesToTransform;
1010
use Okapi\CodeTransformer\Tests\Stubs\Kernel\ApplicationKernel;
@@ -15,7 +15,7 @@
1515
use PHPUnit\Framework\TestCase;
1616

1717
#[RunClassInSeparateProcess]
18-
class ApplicationTest extends TestCase
18+
class A_ApplicationTest extends TestCase
1919
{
2020
use ClassLoaderMockTrait;
2121

@@ -44,7 +44,7 @@ public function testStringClass(): void
4444
$stringClass = new $class();
4545
$this->assertSame('Hello from Code Transformer!', $stringClass->test());
4646

47-
$file = __DIR__ . '/../../Stubs/ClassesToTransform/StringClass.php';
47+
$file = __DIR__ . '/../../Stubs/ClassesToTransform/StringClass.php';
4848
$content = Filesystem::readFile($file);
4949

5050
$this->assertEquals($content, StringTransformer::$originalSourceCode);
@@ -78,9 +78,26 @@ public function testChangedClass(): void
7878
$class = ClassesToTransform\ChangedClass::class;
7979
$this->assertWillBeTransformed($class);
8080

81-
/** @noinspection PhpUnusedLocalVariableInspection */
8281
$changedClass = new $class();
83-
$this->assertSame('Hello from Code Transformer!', $changedClass->test());
82+
$this->assertSame(
83+
'Hello World from Code Transformer!',
84+
$changedClass->test(),
85+
);
86+
}
87+
88+
/**
89+
* Cached test in {@see CachedApplicationTest::testChangedTransformer()}
90+
*/
91+
public function testChangedTransformer(): void
92+
{
93+
$class = ClassesToTransform\ChangedTransformer::class;
94+
$this->assertWillBeTransformed($class);
95+
96+
$changedTransformer = new $class();
97+
$this->assertSame(
98+
'Hello World from Code Transformer!',
99+
$changedTransformer->test(),
100+
);
84101
}
85102

86103
/**
@@ -104,6 +121,7 @@ public function testMultipleTransformers(): void
104121
$this->assertWillBeTransformed($class);
105122

106123
$multipleTransformersClass = new $class();
124+
107125
$this->assertSame('Hello from Code Transformer!', $multipleTransformersClass->test());
108126
$this->assertSame("You can't get me!", $multipleTransformersClass->privateProperty);
109127
}
@@ -133,15 +151,5 @@ public function testDestructor(): void
133151
$key = 'CODE_TRANSFORMER_APP_DIR\tests\Stubs\ClassesToTransform\StringClass.php';
134152
$key = str_replace('\\', DIRECTORY_SEPARATOR, $key);
135153
$this->assertArrayHasKey($key, $file);
136-
137-
$cachedFilePath = 'CODE_TRANSFORMER_APP_DIR\tests\cache\transformed\tests\Stubs\ClassesToTransform\StringClass.php';
138-
$cachedFilePath = str_replace('\\', DIRECTORY_SEPARATOR, $cachedFilePath);
139-
$this->assertArrayHasKey('cachedFilePath', $file[$key]);
140-
$this->assertEquals($cachedFilePath, $file[$key]['cachedFilePath']);
141-
$this->assertArrayHasKey('transformedTime', $file[$key]);
142-
$this->assertIsInt($file[$key]['transformedTime']);
143-
$this->assertArrayHasKey('transformerFilePaths', $file[$key]);
144-
$this->assertIsArray($file[$key]['transformerFilePaths']);
145-
$this->assertGreaterThan(0, count($file[$key]['transformerFilePaths']));
146154
}
147155
}

tests/Functional/Workflow/CachedApplicationTest.php renamed to tests/Functional/Workflow/B_CachedApplicationTest.php

Lines changed: 73 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -4,24 +4,70 @@
44

55
use Okapi\CodeTransformer\Tests\ClassLoaderMockTrait;
66
use Okapi\CodeTransformer\Tests\Stubs\ClassesToTransform;
7-
use Okapi\CodeTransformer\Tests\Stubs\Kernel\CachedKernel;
7+
use Okapi\CodeTransformer\Tests\Stubs\Kernel\ApplicationKernel;
88
use Okapi\CodeTransformer\Tests\Util;
99
use Okapi\Filesystem\Filesystem;
10+
use PHPUnit\Framework\Attributes\RunClassInSeparateProcess;
1011
use PHPUnit\Framework\TestCase;
11-
use Throwable;
1212

1313
/**
1414
* This test has to be run after ApplicationTest.
1515
*/
16-
class CachedApplicationTest extends TestCase
16+
#[RunClassInSeparateProcess]
17+
class B_CachedApplicationTest extends TestCase
1718
{
1819
use ClassLoaderMockTrait;
1920

21+
private static string $classFileContent;
22+
private static string $transformerFileContent;
23+
24+
public static function setUpBeforeClass(): void
25+
{
26+
// Change files
27+
28+
$classFilePath = __DIR__ . '/../../Stubs/ClassesToTransform/ChangedClass.php';
29+
self::$classFileContent = Filesystem::readFile($classFilePath);
30+
31+
$changedFileContent = str_replace(
32+
'Hello World!',
33+
'Hello Changed World!',
34+
self::$classFileContent,
35+
);
36+
37+
usleep(500 * 1000);
38+
Filesystem::writeFile($classFilePath, $changedFileContent);
39+
40+
41+
42+
$transformerFilePath = __DIR__ . '/../../Stubs/Transformer/ChangedTransformerTransformer.php';
43+
self::$transformerFileContent = Filesystem::readFile($transformerFilePath);
44+
45+
$changedFileContent = str_replace(
46+
'Hello World from Code Transformer!',
47+
'Hello Changed World from Code Transformer!',
48+
self::$transformerFileContent,
49+
);
50+
51+
usleep(500 * 1000);
52+
Filesystem::writeFile($transformerFilePath, $changedFileContent);
53+
}
54+
55+
public static function tearDownAfterClass(): void
56+
{
57+
// Restore files
58+
59+
$classFilePath = __DIR__ . '/../../Stubs/ClassesToTransform/ChangedClass.php';
60+
Filesystem::writeFile($classFilePath, self::$classFileContent);
61+
62+
$transformerFilePath = __DIR__ . '/../../Stubs/Transformer/ChangedTransformerTransformer.php';
63+
Filesystem::writeFile($transformerFilePath, self::$transformerFileContent);
64+
}
65+
2066
public function testKernel(): void
2167
{
22-
$this->assertFalse(CachedKernel::isInitialized());
23-
CachedKernel::init();
24-
$this->assertTrue(CachedKernel::isInitialized());
68+
$this->assertFalse(ApplicationKernel::isInitialized());
69+
ApplicationKernel::init();
70+
$this->assertTrue(ApplicationKernel::isInitialized());
2571

2672
$this->assertFileExists(Util::CACHE_STATES_FILE);
2773
}
@@ -61,7 +107,7 @@ public function testNoChangesClass(): void
61107
$stringClass = new $class();
62108

63109
$originalFilePath = __DIR__ . '/../../Stubs/ClassesToTransform/NoChangesClass.php';
64-
$cachedFilePath = Util::CACHE_DIR . '/transformed/tests/Stubs/ClassesToTransform/NoChangesClass.php';
110+
$cachedFilePath = Util::CACHE_DIR . '/transformed/tests/Stubs/ClassesToTransform/NoChangesClass.php';
65111
$this->assertFileExists($originalFilePath);
66112
$this->assertFileDoesNotExist($cachedFilePath);
67113
}
@@ -71,35 +117,29 @@ public function testNoChangesClass(): void
71117
*/
72118
public function testChangedClass(): void
73119
{
74-
$originalFilePath = __DIR__ . '/../../Stubs/ClassesToTransform/ChangedClass.php';
75-
76-
$originalFileContent = Filesystem::readFile($originalFilePath);
77-
78-
$exception = null;
79-
try {
80-
$changedFileContent = str_replace(
81-
'Hello World!',
82-
'Hello Changed World!',
83-
$originalFileContent,
84-
);
85-
86-
Filesystem::writeFile($originalFilePath, $changedFileContent);
87-
88-
$class = ClassesToTransform\ChangedClass::class;
89-
$this->assertWillBeTransformed($class);
120+
$class = ClassesToTransform\ChangedClass::class;
121+
$this->assertWillBeTransformed($class);
90122

91-
$changedClass = new $class();
92-
$this->assertSame('Hello Changed World from Code Transformer!', $changedClass->test());
93-
} catch (Throwable $e) {
94-
$exception = $e;
95-
}
123+
$changedClass = new $class();
124+
$this->assertSame(
125+
'Hello Changed World from Code Transformer!',
126+
$changedClass->test(),
127+
);
128+
}
96129

97-
Filesystem::writeFile($originalFilePath, $originalFileContent);
130+
/**
131+
* Cached by {@see ApplicationTest::testChangedTransformer()}
132+
*/
133+
public function testChangedTransformer(): void
134+
{
135+
$class = ClassesToTransform\ChangedTransformer::class;
136+
$this->assertWillBeTransformed($class);
98137

99-
if ($exception !== null) {
100-
/** @noinspection PhpUnhandledExceptionInspection */
101-
throw $exception;
102-
}
138+
$classInstance = new $class;
139+
$this->assertSame(
140+
'Hello Changed World from Code Transformer!',
141+
$classInstance->test(),
142+
);
103143
}
104144

105145
/**
@@ -134,23 +174,4 @@ public function testMultipleTransformers(): void
134174
$this->assertSame('Hello from Code Transformer!', $multipleTransformersClass->test());
135175
$this->assertSame("You can't get me!", $multipleTransformersClass->privateProperty);
136176
}
137-
138-
/**
139-
* Cached by {@see ApplicationTest::testAddedTransformer()}
140-
*/
141-
public function testAddedTransformer(): void
142-
{
143-
$class = ClassesToTransform\AddedTransformerClass::class;
144-
$this->assertWillBeTransformed($class);
145-
146-
$addedTransformerClass = new $class();
147-
$this->assertSame('Hello from Code Transformer!', $addedTransformerClass->test());
148-
}
149-
150-
public function testClearCache(): void
151-
{
152-
Util::clearCache();
153-
154-
$this->expectNotToPerformAssertions();
155-
}
156177
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
<?php
2+
3+
namespace Okapi\CodeTransformer\Tests\Functional\Workflow;
4+
5+
use Okapi\CodeTransformer\Tests\ClassLoaderMockTrait;
6+
use Okapi\CodeTransformer\Tests\Stubs\ClassesToTransform;
7+
use Okapi\CodeTransformer\Tests\Stubs\Kernel\AddedTransformerKernel;
8+
use Okapi\CodeTransformer\Tests\Stubs\Kernel\ApplicationKernel;
9+
use Okapi\CodeTransformer\Tests\Util;
10+
use PHPUnit\Framework\Attributes\RunClassInSeparateProcess;
11+
use PHPUnit\Framework\TestCase;
12+
13+
/**
14+
* This test has to be run after CachedApplicationTest.
15+
*/
16+
#[RunClassInSeparateProcess]
17+
class C_AddedTransformerTest extends TestCase
18+
{
19+
use ClassLoaderMockTrait;
20+
21+
public static function tearDownAfterClass(): void
22+
{
23+
Util::clearCache();
24+
}
25+
26+
public function testKernel(): void
27+
{
28+
$this->assertFalse(AddedTransformerKernel::isInitialized());
29+
ApplicationKernel::init();
30+
$this->assertTrue(ApplicationKernel::isInitialized());
31+
32+
$this->assertFileExists(Util::CACHE_STATES_FILE);
33+
}
34+
35+
/**
36+
* Cached by {@see ApplicationTest::testAddedTransformer()}
37+
*/
38+
public function testAddedTransformer(): void
39+
{
40+
$class = ClassesToTransform\AddedTransformerClass::class;
41+
$this->assertWillBeTransformed($class);
42+
43+
$addedTransformerClass = new $class();
44+
$this->assertSame('Hello from Code Transformer!', $addedTransformerClass->test());
45+
}
46+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?php
2+
3+
namespace Okapi\CodeTransformer\Tests\Stubs\ClassesToTransform;
4+
5+
class ChangedTransformer
6+
{
7+
public function test(): string
8+
{
9+
return 'Hello World!';
10+
}
11+
}

tests/Stubs/Kernel/CachedKernel.php renamed to tests/Stubs/Kernel/AddedTransformerKernel.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
use Okapi\CodeTransformer\Tests\Stubs\Transformer\AddedTransformer2;
66

7-
class CachedKernel extends ApplicationKernel
7+
class AddedTransformerKernel extends ApplicationKernel
88
{
99
protected array $addedTransformers = [
1010
AddedTransformer2::class,

tests/Stubs/Kernel/ApplicationKernel.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44

55
use Okapi\CodeTransformer\CodeTransformerKernel;
66
use Okapi\CodeTransformer\Tests\Stubs\Transformer\AddedTransformer1;
7-
use Okapi\CodeTransformer\Tests\Stubs\Transformer\ChangedTransformer;
7+
use Okapi\CodeTransformer\Tests\Stubs\Transformer\ChangedClassTransformer;
8+
use Okapi\CodeTransformer\Tests\Stubs\Transformer\ChangedTransformerTransformer;
89
use Okapi\CodeTransformer\Tests\Stubs\Transformer\DeleteCacheFileTransformer;
910
use Okapi\CodeTransformer\Tests\Stubs\Transformer\NoChangesTransformer;
1011
use Okapi\CodeTransformer\Tests\Stubs\Transformer\StringTransformer;
@@ -20,7 +21,8 @@ class ApplicationKernel extends CodeTransformerKernel
2021
StringTransformer::class,
2122
NoChangesTransformer::class,
2223
SyntaxErrorTransformer::class,
23-
ChangedTransformer::class,
24+
ChangedClassTransformer::class,
25+
ChangedTransformerTransformer::class,
2426
DeleteCacheFileTransformer::class,
2527
UnPrivateTransformer::class,
2628
AddedTransformer1::class,

0 commit comments

Comments
 (0)