From 2edaa1cf7229d88f5fad90d47d17efa3886485af Mon Sep 17 00:00:00 2001 From: Akihito Koriyama Date: Sun, 7 Jun 2026 17:53:12 +0900 Subject: [PATCH] Improve branch coverage for uncovered paths --- tests/Fake/FromDir/TodoClass.php | 9 +++++ tests/Fake/FromDirInvalidCase/NoClass.php | 3 ++ tests/InsertedRowTest.php | 46 +++++++++++++++++++++++ tests/PagesTest.php | 28 ++++++++++++++ tests/QueriesTest.php | 14 ++++++- tests/ReturnTypeTest.php | 8 ++++ 6 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 tests/Fake/FromDir/TodoClass.php create mode 100644 tests/Fake/FromDirInvalidCase/NoClass.php create mode 100644 tests/InsertedRowTest.php create mode 100644 tests/PagesTest.php diff --git a/tests/Fake/FromDir/TodoClass.php b/tests/Fake/FromDir/TodoClass.php new file mode 100644 index 00000000..aa33228d --- /dev/null +++ b/tests/Fake/FromDir/TodoClass.php @@ -0,0 +1,9 @@ +createStub(ExtendedPdoInterface::class); + $pdo->method('lastInsertId')->willReturn($lastInsertId); + + $result = InsertedRow::fromContext(new PostQueryContext( + $this->createStub(PDOStatement::class), + $pdo, + ['label' => 'empty'], + )); + + $this->assertSame(['label' => 'empty'], $result->values); + $this->assertNull($result->id); + } + + /** + * @return array + */ + public static function emptyLastInsertIds(): array + { + return [ + 'false' => [false], + 'empty string' => [''], + 'zero string' => ['0'], + ]; + } +} diff --git a/tests/PagesTest.php b/tests/PagesTest.php new file mode 100644 index 00000000..51fa1c13 --- /dev/null +++ b/tests/PagesTest.php @@ -0,0 +1,28 @@ +createStub(AuraSqlPagerInterface::class); + $delegate->method('offsetGet')->willReturn(null); + + $pages = new Pages( + $delegate, + $this->createStub(ExtendedPdoInterface::class), + 'SELECT 1', + [], + ); + + $this->assertFalse(isset($pages[3])); + $this->assertNull($pages[3]); + } +} diff --git a/tests/QueriesTest.php b/tests/QueriesTest.php index ea11766d..84853d11 100644 --- a/tests/QueriesTest.php +++ b/tests/QueriesTest.php @@ -6,7 +6,9 @@ use PHPUnit\Framework\TestCase; use Ray\MediaQuery\FromDir\TodoAddInterface; +use Ray\MediaQuery\FromDir\TodoClass; use Ray\MediaQuery\FromDir\TodoItemInterface; +use ReflectionMethod; use function sort; @@ -14,7 +16,7 @@ class QueriesTest extends TestCase { public function testFromClasses(): void { - $classes = [TodoAddInterface::class, TodoItemInterface::class]; + $classes = [TodoAddInterface::class, TodoClass::class, TodoItemInterface::class]; $mediaQueries = Queries::fromClasses($classes); $this->assertSame($classes, $mediaQueries->classes); } @@ -26,6 +28,7 @@ public function testFromDir(): void sort($classes); $this->assertSame([ TodoAddInterface::class, + TodoClass::class, TodoItemInterface::class, ], $classes); } @@ -37,6 +40,7 @@ public function testFromDirCache(): void sort($classes); $this->assertSame([ TodoAddInterface::class, + TodoClass::class, TodoItemInterface::class, ], $classes); } @@ -46,4 +50,12 @@ public function testFromDirInvalidClass(): void $mediaQueries = Queries::fromDir(__DIR__ . '/Fake/FromDirInvalidCase'); $this->assertEmpty($mediaQueries->classes); } + + public function testTokenListsWithoutClassHaveNoClass(): void + { + $method = new ReflectionMethod(ClassesInDirectories::class, 'extractClassName'); + + $this->assertNull($method->invoke(null, [])); + $this->assertNull($method->invoke(null, [''])); + } } diff --git a/tests/ReturnTypeTest.php b/tests/ReturnTypeTest.php index d4cc85a7..e73ae0b1 100644 --- a/tests/ReturnTypeTest.php +++ b/tests/ReturnTypeTest.php @@ -5,6 +5,7 @@ namespace Ray\MediaQuery; use phpDocumentor\Reflection\DocBlockFactory; +use phpDocumentor\Reflection\PseudoTypes\Generic; use PHPUnit\Framework\TestCase; use Ray\MediaQuery\Entity\FakeEntity; use ReflectionMethod; @@ -97,4 +98,11 @@ public function testReturnArray(): void $this->assertSame(null, $entity); } + + public function testEmptyGenericTypeHasNoValueType(): void + { + $method = new ReflectionMethod($this->returnEntity, 'extractValueType'); + + $this->assertNull($method->invoke($this->returnEntity, new Generic(null, []))); + } }