Skip to content

Commit b61d70c

Browse files
committed
Refactored tests
1 parent e5be2ac commit b61d70c

16 files changed

+457
-437
lines changed
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
<?php
2+
3+
namespace Okapi\CodeTransformer\Tests\Functional;
4+
5+
use Okapi\CodeTransformer\Tests\ClassLoaderMockTrait;
6+
use Okapi\CodeTransformer\Tests\Stubs\ClassesToTransform\AddedTransformerClass;
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\RunTestsInSeparateProcesses;
11+
use PHPUnit\Framework\TestCase;
12+
13+
#[RunTestsInSeparateProcesses]
14+
class AddedTransformerTest extends TestCase
15+
{
16+
use ClassLoaderMockTrait;
17+
18+
public function testAddedTransformer(): void
19+
{
20+
Util::clearCache();
21+
ApplicationKernel::init();
22+
23+
$class = AddedTransformerClass::class;
24+
$this->assertWillBeTransformed($class);
25+
26+
$addedTransformerClass = new $class();
27+
28+
$this->assertSame(
29+
'Hello Code Transformer!',
30+
$addedTransformerClass->test(),
31+
);
32+
}
33+
34+
public function testCachedAddedTransformer(): void
35+
{
36+
AddedTransformerKernel::init();
37+
38+
$class = AddedTransformerClass::class;
39+
$this->assertWillBeTransformed($class);
40+
41+
$addedTransformerClass = new $class();
42+
$this->assertSame(
43+
'Hello from Code Transformer!',
44+
$addedTransformerClass->test(),
45+
);
46+
}
47+
}
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
<?php
2+
3+
namespace Okapi\CodeTransformer\Tests\Functional;
4+
5+
use Okapi\CodeTransformer\Tests\ClassLoaderMockTrait;
6+
use Okapi\CodeTransformer\Tests\Stubs\ClassesToTransform\ChangedClass;
7+
use Okapi\CodeTransformer\Tests\Stubs\Kernel\ApplicationKernel;
8+
use Okapi\CodeTransformer\Tests\Util;
9+
use Okapi\Filesystem\Filesystem;
10+
use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses;
11+
use PHPUnit\Framework\TestCase;
12+
use Throwable;
13+
14+
#[RunTestsInSeparateProcesses]
15+
class ChangedClassTest extends TestCase
16+
{
17+
use ClassLoaderMockTrait;
18+
19+
private static string $classFileContent;
20+
21+
public function testChangedClass(): void
22+
{
23+
Util::clearCache();
24+
ApplicationKernel::init();
25+
26+
$class = ChangedClass::class;
27+
$this->assertWillBeTransformed($class);
28+
29+
$changedClass = new $class();
30+
$this->assertSame(
31+
'Hello World from Code Transformer!',
32+
$changedClass->test(),
33+
);
34+
35+
// Change class
36+
$classFilePath = Util::CLASSES_TO_TRANSFORM_DIR . '/ChangedClass.php';
37+
$classFileContent = Filesystem::readFile($classFilePath);
38+
$tmpPath = Util::TMP_DIR . '/ChangedClass.php';
39+
Filesystem::writeFile($tmpPath, $classFileContent);
40+
41+
$changedFileContent = str_replace(
42+
'Hello World!',
43+
'Hello Changed World!',
44+
$classFileContent,
45+
);
46+
47+
sleep(1);
48+
Filesystem::writeFile($classFilePath, $changedFileContent);
49+
}
50+
51+
public function testCachedChangedClass(): void
52+
{
53+
$exception = null;
54+
try {
55+
ApplicationKernel::init();
56+
57+
$class = ChangedClass::class;
58+
$this->assertWillBeTransformed($class);
59+
60+
$classInstance = new $class();
61+
$this->assertSame(
62+
'Hello Changed World from Code Transformer!',
63+
$classInstance->test(),
64+
);
65+
} catch (Throwable $e) {
66+
$exception = $e;
67+
}
68+
69+
// Restore class
70+
$tmpPath = Util::TMP_DIR . '/ChangedClass.php';
71+
if (!file_exists($tmpPath)) {
72+
return;
73+
}
74+
75+
$tmpFileContent = Filesystem::readFile($tmpPath);
76+
$classFilePath = Util::CLASSES_TO_TRANSFORM_DIR . '/ChangedClass.php';
77+
78+
Filesystem::writeFile($classFilePath, $tmpFileContent);
79+
80+
if ($exception !== null) {
81+
/** @noinspection PhpUnhandledExceptionInspection */
82+
throw $exception;
83+
}
84+
}
85+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
<?php
2+
3+
namespace Okapi\CodeTransformer\Tests\Functional;
4+
5+
use Okapi\CodeTransformer\Tests\ClassLoaderMockTrait;
6+
use Okapi\CodeTransformer\Tests\Stubs\ClassesToTransform\DeleteCacheFileClass;
7+
use Okapi\CodeTransformer\Tests\Stubs\Kernel\ApplicationKernel;
8+
use Okapi\CodeTransformer\Tests\Util;
9+
use Okapi\Filesystem\Filesystem;
10+
use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses;
11+
use PHPUnit\Framework\TestCase;
12+
13+
#[RunTestsInSeparateProcesses]
14+
class DeleteCacheFileTest extends TestCase
15+
{
16+
use ClassLoaderMockTrait;
17+
18+
public function testDeleteCacheFileClass(): void
19+
{
20+
Util::clearCache();
21+
ApplicationKernel::init();
22+
23+
$class = DeleteCacheFileClass::class;
24+
$this->assertWillBeTransformed($class);
25+
26+
$deleteCacheFileClass = new $class();
27+
$this->assertSame(
28+
'Hello World!',
29+
$deleteCacheFileClass->test(),
30+
);
31+
}
32+
33+
public function testCachedDeleteCacheFileClass(): void
34+
{
35+
ApplicationKernel::init();
36+
37+
$cachedFilePath = Util::CACHED_CLASSES_TO_TRANSFORM_DIR . '/DeleteCacheFileClass.php';
38+
39+
$this->assertFileExists($cachedFilePath);
40+
Filesystem::rm($cachedFilePath);
41+
$this->assertFileDoesNotExist($cachedFilePath);
42+
43+
$class = DeleteCacheFileClass::class;
44+
$this->assertWillBeTransformed($class);
45+
46+
$deleteCacheFileClass = new $class();
47+
$this->assertSame('Hello World!', $deleteCacheFileClass->test());
48+
49+
$this->assertFileExists($cachedFilePath);
50+
}
51+
}

tests/Functional/KernelTest.php

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php
2+
3+
namespace Okapi\CodeTransformer\Tests\Functional;
4+
5+
use Okapi\CodeTransformer\Tests\Stubs\Kernel\ApplicationKernel;
6+
use Okapi\CodeTransformer\Tests\Util;
7+
use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses;
8+
use PHPUnit\Framework\TestCase;
9+
10+
#[RunTestsInSeparateProcesses]
11+
class KernelTest extends TestCase
12+
{
13+
public function testKernel(): void
14+
{
15+
Util::clearCache();
16+
17+
$this->assertFalse(ApplicationKernel::isInitialized());
18+
ApplicationKernel::init();
19+
$this->assertTrue(ApplicationKernel::isInitialized());
20+
21+
$this->assertFileDoesNotExist(Util::CACHE_STATES_FILE);
22+
}
23+
24+
public function testCachedKernel(): void
25+
{
26+
$this->assertFalse(ApplicationKernel::isInitialized());
27+
ApplicationKernel::init();
28+
$this->assertTrue(ApplicationKernel::isInitialized());
29+
30+
$this->assertFileExists(Util::CACHE_STATES_FILE);
31+
}
32+
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
<?php
2+
3+
namespace Okapi\CodeTransformer\Tests\Functional;
4+
5+
use Okapi\CodeTransformer\Tests\ClassLoaderMockTrait;
6+
use Okapi\CodeTransformer\Tests\Stubs\ClassesToTransform\MultipleTransformersClass;
7+
use Okapi\CodeTransformer\Tests\Stubs\Kernel\ApplicationKernel;
8+
use Okapi\CodeTransformer\Tests\Util;
9+
use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses;
10+
use PHPUnit\Framework\TestCase;
11+
12+
#[RunTestsInSeparateProcesses]
13+
class MultipleTransformersTest extends TestCase
14+
{
15+
use ClassLoaderMockTrait;
16+
17+
public function testMultipleTransformers(): void
18+
{
19+
Util::clearCache();
20+
ApplicationKernel::init();
21+
22+
$class = MultipleTransformersClass::class;
23+
$this->assertWillBeTransformed($class);
24+
25+
$multipleTransformersClass = new $class();
26+
27+
$this->assertSame(
28+
'Hello from Code Transformer!',
29+
$multipleTransformersClass->test(),
30+
);
31+
32+
$this->assertSame(
33+
"You can't get me!",
34+
$multipleTransformersClass->privateProperty,
35+
);
36+
}
37+
38+
public function testCachedMultipleTransformers(): void
39+
{
40+
ApplicationKernel::init();
41+
42+
$class = MultipleTransformersClass::class;
43+
$this->assertTransformerLoadedFromCache($class);
44+
45+
$multipleTransformersClass = new $class();
46+
47+
$this->assertSame(
48+
'Hello from Code Transformer!',
49+
$multipleTransformersClass->test(),
50+
);
51+
52+
$this->assertSame(
53+
"You can't get me!",
54+
$multipleTransformersClass->privateProperty,
55+
);
56+
}
57+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?php
2+
3+
namespace Okapi\CodeTransformer\Tests\Functional;
4+
5+
use Okapi\CodeTransformer\Tests\ClassLoaderMockTrait;
6+
use Okapi\CodeTransformer\Tests\Stubs\ClassesToTransform\NoChangesClass;
7+
use Okapi\CodeTransformer\Tests\Stubs\Kernel\ApplicationKernel;
8+
use Okapi\CodeTransformer\Tests\Util;
9+
use PHPUnit\Framework\Attributes\RunTestsInSeparateProcesses;
10+
use PHPUnit\Framework\TestCase;
11+
12+
#[RunTestsInSeparateProcesses]
13+
class NoChangesClassTest extends TestCase
14+
{
15+
use ClassLoaderMockTrait;
16+
17+
public function testNoChangesClass(): void
18+
{
19+
Util::clearCache();
20+
ApplicationKernel::init();
21+
22+
$class = NoChangesClass::class;
23+
$this->assertWillBeTransformed($class);
24+
25+
new $class();
26+
}
27+
28+
public function testCachedNoChangesClass(): void
29+
{
30+
ApplicationKernel::init();
31+
32+
$class = NoChangesClass::class;
33+
$this->assertTransformerNotApplied($class);
34+
35+
new $class();
36+
37+
$originalFilePath = Util::CLASSES_TO_TRANSFORM_DIR . '/NoChangesClass.php';
38+
$cachedFilePath = Util::CACHED_CLASSES_TO_TRANSFORM_DIR . '/NoChangesClass.php';
39+
$this->assertFileExists($originalFilePath);
40+
$this->assertFileDoesNotExist($cachedFilePath);
41+
}
42+
}

0 commit comments

Comments
 (0)