Skip to content
Snippets Groups Projects
Commit 31c6eef9 authored by David Prévot's avatar David Prévot
Browse files

New upstream version 3.0.2

parents 71cab835 ee88b0cd
No related branches found
No related tags found
No related merge requests found
Pipeline #786327 failed
Showing
with 169 additions and 39 deletions
...@@ -7,7 +7,7 @@ on: ...@@ -7,7 +7,7 @@ on:
name: "CI" name: "CI"
env: env:
COMPOSER_ROOT_VERSION: "3.0-dev" COMPOSER_ROOT_VERSION: "3.0.x-dev"
permissions: permissions:
contents: read contents: read
...@@ -67,6 +67,7 @@ jobs: ...@@ -67,6 +67,7 @@ jobs:
- "8.2" - "8.2"
- "8.3" - "8.3"
- "8.4" - "8.4"
- "8.5"
steps: steps:
- name: Checkout - name: Checkout
...@@ -76,18 +77,24 @@ jobs: ...@@ -76,18 +77,24 @@ jobs:
uses: shivammathur/setup-php@v2 uses: shivammathur/setup-php@v2
with: with:
php-version: ${{ matrix.php-version }} php-version: ${{ matrix.php-version }}
coverage: pcov coverage: xdebug
- name: Install dependencies with Composer - name: Install dependencies with Composer
run: php ./tools/composer update --no-ansi --no-interaction --no-progress run: php ./tools/composer update --no-ansi --no-interaction --no-progress
- name: Run tests with PHPUnit - name: Run tests with PHPUnit
run: php vendor/bin/phpunit --coverage-clover=coverage.xml run: php vendor/bin/phpunit --log-junit junit.xml --coverage-clover=coverage.xml
- name: Send code coverage report to Codecov.io - name: Upload test results to Codecov.io
env: if: ${{ !cancelled() }}
CODECOV_TOKEN: "${{ secrets.CODECOV_TOKEN }}" uses: codecov/test-results-action@v1
run: "bash <(curl -s https://codecov.io/bash) || true" with:
token: ${{ secrets.CODECOV_TOKEN }}
- name: Upload code coverage data to Codecov.io
uses: codecov/codecov-action@v4
with:
token: ${{ secrets.CODECOV_TOKEN }}
mutation-tests: mutation-tests:
name: Mutation Tests name: Mutation Tests
...@@ -106,7 +113,7 @@ jobs: ...@@ -106,7 +113,7 @@ jobs:
uses: shivammathur/setup-php@v2 uses: shivammathur/setup-php@v2
with: with:
php-version: 8.3 php-version: 8.3
coverage: pcov coverage: xdebug
- name: Install dependencies with Composer - name: Install dependencies with Composer
run: php ./tools/composer update --no-ansi --no-interaction --no-progress run: php ./tools/composer update --no-ansi --no-interaction --no-progress
......
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<phive xmlns="https://phar.io/phive"> <phive xmlns="https://phar.io/phive">
<phar name="php-cs-fixer" version="^3.0" installed="3.57.1" location="./tools/php-cs-fixer" copy="true"/> <phar name="php-cs-fixer" version="^3.65" installed="3.65.0" location="./tools/php-cs-fixer" copy="true"/>
<phar name="infection" version="^0.28" installed="0.28.1" location="./tools/infection" copy="true"/> <phar name="infection" version="^0.29" installed="0.29.9" location="./tools/infection" copy="true"/>
<phar name="composer" version="^2.0.3" installed="2.7.6" location="./tools/composer" copy="true"/> <phar name="composer" version="^2.8" installed="2.8.4" location="./tools/composer" copy="true"/>
<phar name="phpstan" version="^1.11.1" installed="1.11.1" location="./tools/phpstan" copy="true"/> <phar name="phpstan" version="^2.0" installed="2.0.3" location="./tools/phpstan" copy="true"/>
</phive> </phive>
...@@ -99,7 +99,7 @@ $config->setFinder($finder) ...@@ -99,7 +99,7 @@ $config->setFinder($finder)
'explicit_string_variable' => true, 'explicit_string_variable' => true,
'fopen_flag_order' => true, 'fopen_flag_order' => true,
'full_opening_tag' => true, 'full_opening_tag' => true,
'fully_qualified_strict_types' => true, 'fully_qualified_strict_types' => ['import_symbols' => true],
'function_declaration' => true, 'function_declaration' => true,
'function_to_constant' => true, 'function_to_constant' => true,
'get_class_to_class_keyword' => true, 'get_class_to_class_keyword' => true,
...@@ -135,7 +135,7 @@ $config->setFinder($finder) ...@@ -135,7 +135,7 @@ $config->setFinder($finder)
'modernize_types_casting' => true, 'modernize_types_casting' => true,
'multiline_comment_opening_closing' => true, 'multiline_comment_opening_closing' => true,
'multiline_whitespace_before_semicolons' => true, 'multiline_whitespace_before_semicolons' => true,
'native_constant_invocation' => false, 'native_constant_invocation' => true,
'native_function_casing' => false, 'native_function_casing' => false,
'native_function_invocation' => [ 'native_function_invocation' => [
'include' => [ 'include' => [
...@@ -158,7 +158,23 @@ $config->setFinder($finder) ...@@ -158,7 +158,23 @@ $config->setFinder($finder)
'no_empty_comment' => true, 'no_empty_comment' => true,
'no_empty_phpdoc' => true, 'no_empty_phpdoc' => true,
'no_empty_statement' => true, 'no_empty_statement' => true,
'no_extra_blank_lines' => true, 'no_extra_blank_lines' => [
'tokens' => [
'attribute',
'break',
'case',
'continue',
'curly_brace_block',
'default',
'extra',
'parenthesis_brace_block',
'return',
'square_brace_block',
'switch',
'throw',
'use',
],
],
'no_homoglyph_names' => true, 'no_homoglyph_names' => true,
'no_leading_import_slash' => true, 'no_leading_import_slash' => true,
'no_leading_namespace_whitespace' => true, 'no_leading_namespace_whitespace' => true,
...@@ -197,6 +213,7 @@ $config->setFinder($finder) ...@@ -197,6 +213,7 @@ $config->setFinder($finder)
'no_whitespace_in_blank_line' => true, 'no_whitespace_in_blank_line' => true,
'non_printable_character' => true, 'non_printable_character' => true,
'normalize_index_brace' => true, 'normalize_index_brace' => true,
'nullable_type_declaration_for_default_null_value' => true,
'object_operator_without_whitespace' => true, 'object_operator_without_whitespace' => true,
'octal_notation' => true, 'octal_notation' => true,
'operator_linebreak' => [ 'operator_linebreak' => [
...@@ -340,6 +357,8 @@ $config->setFinder($finder) ...@@ -340,6 +357,8 @@ $config->setFinder($finder)
'whitespace_after_comma_in_array' => true, 'whitespace_after_comma_in_array' => true,
]); ]);
$config->setCacheFile(__DIR__ . '/.php-cs-fixer.cache/' . sha1(@trim((string) @shell_exec('git rev-parse --abbrev-ref HEAD')))); $config->setCacheFile(__DIR__ . '/.php-cs-fixer.cache/' . json_decode((string) @file_get_contents('composer.json'), true)["extra"]["branch-alias"]["dev-main"] ?? 'unknown');
$config->setParallelConfig(\PhpCsFixer\Runner\Parallel\ParallelConfigFactory::detect());
return $config; return $config;
...@@ -2,6 +2,12 @@ ...@@ -2,6 +2,12 @@
All notable changes are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles. All notable changes are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles.
## [3.0.2] - 2024-12-12
### Fixed
* [#8](https://github.com/sebastianbergmann/code-unit/issues/8): `Mapper::stringToCodeUnits()` does not consider "inheritance" between traits
## [3.0.1] - 2024-07-03 ## [3.0.1] - 2024-07-03
### Changed ### Changed
...@@ -78,6 +84,7 @@ All notable changes are documented in this file using the [Keep a CHANGELOG](htt ...@@ -78,6 +84,7 @@ All notable changes are documented in this file using the [Keep a CHANGELOG](htt
* Initial release * Initial release
[3.0.2]: https://github.com/sebastianbergmann/code-unit/compare/3.0.1...3.0.2
[3.0.1]: https://github.com/sebastianbergmann/code-unit/compare/3.0.0...3.0.1 [3.0.1]: https://github.com/sebastianbergmann/code-unit/compare/3.0.0...3.0.1
[3.0.0]: https://github.com/sebastianbergmann/code-unit/compare/2.0...3.0.0 [3.0.0]: https://github.com/sebastianbergmann/code-unit/compare/2.0...3.0.0
[2.0.0]: https://github.com/sebastianbergmann/code-unit/compare/1.0.8...2.0.0 [2.0.0]: https://github.com/sebastianbergmann/code-unit/compare/1.0.8...2.0.0
......
[![Latest Stable Version](https://poser.pugx.org/sebastian/code-unit/v/stable.png)](https://packagist.org/packages/sebastian/code-unit) [![Latest Stable Version](https://poser.pugx.org/sebastian/code-unit/v)](https://packagist.org/packages/sebastian/code-unit)
[![CI Status](https://github.com/sebastianbergmann/code-unit/workflows/CI/badge.svg)](https://github.com/sebastianbergmann/code-unit/actions) [![CI Status](https://github.com/sebastianbergmann/code-unit/workflows/CI/badge.svg)](https://github.com/sebastianbergmann/code-unit/actions)
[![codecov](https://codecov.io/gh/sebastianbergmann/code-unit/branch/main/graph/badge.svg)](https://codecov.io/gh/sebastianbergmann/code-unit) [![codecov](https://codecov.io/gh/sebastianbergmann/code-unit/branch/main/graph/badge.svg)](https://codecov.io/gh/sebastianbergmann/code-unit)
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
"php": ">=8.2" "php": ">=8.2"
}, },
"require-dev": { "require-dev": {
"phpunit/phpunit": "^11.0" "phpunit/phpunit": "^11.5"
}, },
"config": { "config": {
"platform": { "platform": {
......
parameters: parameters:
level: 9 level: 10
paths: paths:
- src - src
- tests/unit
ignoreErrors:
# Ignore errors caused by defensive programming
- '#Call to method .*::is.* will always evaluate to true.#'
- '#Call to method .*::is.* will always evaluate to false.#'
...@@ -3,19 +3,22 @@ ...@@ -3,19 +3,22 @@
xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd" xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd"
cacheDirectory=".phpunit.cache" cacheDirectory=".phpunit.cache"
executionOrder="depends,defects" executionOrder="depends,defects"
shortenArraysForExportThreshold="10"
requireCoverageMetadata="true" requireCoverageMetadata="true"
beStrictAboutCoverageMetadata="true" beStrictAboutCoverageMetadata="true"
beStrictAboutOutputDuringTests="true" beStrictAboutOutputDuringTests="true"
displayDetailsOnPhpunitDeprecations="true"
failOnPhpunitDeprecation="true"
failOnRisky="true" failOnRisky="true"
failOnWarning="true" failOnWarning="true"
colors="true"> colors="true">
<testsuites> <testsuites>
<testsuite name="default"> <testsuite name="unit">
<directory>tests/unit</directory> <directory>tests/unit</directory>
</testsuite> </testsuite>
</testsuites> </testsuites>
<source> <source ignoreIndirectDeprecations="true" restrictNotices="true" restrictWarnings="true">
<include> <include>
<directory>src</directory> <directory>src</directory>
</include> </include>
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
*/ */
namespace SebastianBergmann\CodeUnit; namespace SebastianBergmann\CodeUnit;
use function assert;
use function count; use function count;
use function file; use function file;
use function file_exists; use function file_exists;
...@@ -98,13 +99,16 @@ abstract readonly class CodeUnit ...@@ -98,13 +99,16 @@ abstract readonly class CodeUnit
{ {
self::ensureFileExistsAndIsReadable($path); self::ensureFileExistsAndIsReadable($path);
$lines = file($path);
assert($lines !== false);
return new FileUnit( return new FileUnit(
$path, $path,
$path, $path,
range( range(
1, 1,
// @phpstan-ignore argument.type count($lines),
count(file($path)),
), ),
); );
} }
......
...@@ -83,19 +83,12 @@ final class Mapper ...@@ -83,19 +83,12 @@ final class Mapper
} }
} else { } else {
if ($this->isUserDefinedClass($unit)) { if ($this->isUserDefinedClass($unit)) {
$units = [CodeUnit::forClass($unit)]; return CodeUnitCollection::fromList(
...array_merge(
foreach ((new ReflectionClass($unit))->getTraits() as $trait) { [CodeUnit::forClass($unit)],
if (!$trait->isUserDefined()) { $this->traits(new ReflectionClass($unit)),
// @codeCoverageIgnoreStart ),
continue; );
// @codeCoverageIgnoreEnd
}
$units[] = CodeUnit::forTrait($trait->getName());
}
return CodeUnitCollection::fromList(...$units);
} }
if ($this->isUserDefinedInterface($unit)) { if ($this->isUserDefinedInterface($unit)) {
...@@ -182,4 +175,28 @@ final class Mapper ...@@ -182,4 +175,28 @@ final class Mapper
return (new ReflectionMethod($className, $methodName))->isUserDefined(); return (new ReflectionMethod($className, $methodName))->isUserDefined();
} }
/**
* @param ReflectionClass<object> $class
*
* @return list<TraitUnit>
*/
private function traits(ReflectionClass $class): array
{
$result = [];
foreach ($class->getTraits() as $trait) {
if (!$trait->isUserDefined()) {
// @codeCoverageIgnoreStart
continue;
// @codeCoverageIgnoreEnd
}
$result[] = CodeUnit::forTrait($trait->getName());
$result = array_merge($result, $this->traits($trait));
}
return $result;
}
} }
<?php declare(strict_types=1);
/*
* This file is part of sebastian/code-unit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace SebastianBergmann\CodeUnit\Fixture;
final class ClassUsingTraitUsingTrait
{
use TraitTwo;
public function three(): void
{
}
}
<?php declare(strict_types=1);
/*
* This file is part of sebastian/code-unit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace SebastianBergmann\CodeUnit\Fixture;
trait TraitOne
{
public function one(): void
{
}
}
<?php declare(strict_types=1);
/*
* This file is part of sebastian/code-unit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace SebastianBergmann\CodeUnit\Fixture;
trait TraitTwo
{
use TraitOne;
public function two(): void
{
}
}
...@@ -11,7 +11,7 @@ namespace SebastianBergmann\CodeUnit\Fixture; ...@@ -11,7 +11,7 @@ namespace SebastianBergmann\CodeUnit\Fixture;
final class Getopt final class Getopt
{ {
public static function getopt(array $args, string $short_options, array $long_options = null): array public static function getopt(array $args, string $short_options, ?array $long_options = null): array
{ {
return []; return [];
} }
......
...@@ -13,6 +13,7 @@ use function range; ...@@ -13,6 +13,7 @@ use function range;
use function realpath; use function realpath;
use Exception; use Exception;
use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\Small;
use PHPUnit\Framework\Attributes\TestDox; use PHPUnit\Framework\Attributes\TestDox;
use PHPUnit\Framework\Attributes\UsesClass; use PHPUnit\Framework\Attributes\UsesClass;
use PHPUnit\Framework\TestCase; use PHPUnit\Framework\TestCase;
...@@ -26,6 +27,7 @@ use SebastianBergmann\CodeUnit\Fixture\FixtureTrait; ...@@ -26,6 +27,7 @@ use SebastianBergmann\CodeUnit\Fixture\FixtureTrait;
#[UsesClass(CodeUnitCollectionIterator::class)] #[UsesClass(CodeUnitCollectionIterator::class)]
#[UsesClass(Mapper::class)] #[UsesClass(Mapper::class)]
#[TestDox('ClassMethodUnit')] #[TestDox('ClassMethodUnit')]
#[Small]
final class ClassMethodUnitTest extends TestCase final class ClassMethodUnitTest extends TestCase
{ {
public function testCanBeCreatedFromNameOfUserDefinedClassAndMethodName(): void public function testCanBeCreatedFromNameOfUserDefinedClassAndMethodName(): void
......
...@@ -13,6 +13,7 @@ use function range; ...@@ -13,6 +13,7 @@ use function range;
use function realpath; use function realpath;
use Exception; use Exception;
use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\Small;
use PHPUnit\Framework\Attributes\TestDox; use PHPUnit\Framework\Attributes\TestDox;
use PHPUnit\Framework\Attributes\UsesClass; use PHPUnit\Framework\Attributes\UsesClass;
use PHPUnit\Framework\TestCase; use PHPUnit\Framework\TestCase;
...@@ -26,6 +27,7 @@ use SebastianBergmann\CodeUnit\Fixture\FixtureTrait; ...@@ -26,6 +27,7 @@ use SebastianBergmann\CodeUnit\Fixture\FixtureTrait;
#[UsesClass(CodeUnitCollectionIterator::class)] #[UsesClass(CodeUnitCollectionIterator::class)]
#[UsesClass(Mapper::class)] #[UsesClass(Mapper::class)]
#[TestDox('ClassUnit')] #[TestDox('ClassUnit')]
#[Small]
final class ClassUnitTest extends TestCase final class ClassUnitTest extends TestCase
{ {
public function testCanBeCreatedFromNameOfUserDefinedClass(): void public function testCanBeCreatedFromNameOfUserDefinedClass(): void
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
namespace SebastianBergmann\CodeUnit; namespace SebastianBergmann\CodeUnit;
use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\Small;
use PHPUnit\Framework\Attributes\TestDox; use PHPUnit\Framework\Attributes\TestDox;
use PHPUnit\Framework\Attributes\UsesClass; use PHPUnit\Framework\Attributes\UsesClass;
use PHPUnit\Framework\TestCase; use PHPUnit\Framework\TestCase;
...@@ -21,6 +22,7 @@ use SebastianBergmann\CodeUnit\Fixture\FixtureInterface; ...@@ -21,6 +22,7 @@ use SebastianBergmann\CodeUnit\Fixture\FixtureInterface;
#[UsesClass(CodeUnit::class)] #[UsesClass(CodeUnit::class)]
#[UsesClass(Mapper::class)] #[UsesClass(Mapper::class)]
#[TestDox('CodeUnitCollection')] #[TestDox('CodeUnitCollection')]
#[Small]
final class CodeUnitCollectionTest extends TestCase final class CodeUnitCollectionTest extends TestCase
{ {
private InterfaceUnit $interface; private InterfaceUnit $interface;
......
...@@ -20,6 +20,7 @@ use function tempnam; ...@@ -20,6 +20,7 @@ use function tempnam;
use function touch; use function touch;
use function unlink; use function unlink;
use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\Small;
use PHPUnit\Framework\Attributes\TestDox; use PHPUnit\Framework\Attributes\TestDox;
use PHPUnit\Framework\Attributes\UsesClass; use PHPUnit\Framework\Attributes\UsesClass;
use PHPUnit\Framework\TestCase; use PHPUnit\Framework\TestCase;
...@@ -30,6 +31,7 @@ use PHPUnit\Framework\TestCase; ...@@ -30,6 +31,7 @@ use PHPUnit\Framework\TestCase;
#[UsesClass(CodeUnitCollectionIterator::class)] #[UsesClass(CodeUnitCollectionIterator::class)]
#[UsesClass(Mapper::class)] #[UsesClass(Mapper::class)]
#[TestDox('FileUnit')] #[TestDox('FileUnit')]
#[Small]
final class FileUnitTest extends TestCase final class FileUnitTest extends TestCase
{ {
private false|string $temporaryFile = false; private false|string $temporaryFile = false;
...@@ -60,7 +62,7 @@ final class FileUnitTest extends TestCase ...@@ -60,7 +62,7 @@ final class FileUnitTest extends TestCase
$this->assertSame($file, $unit->name()); $this->assertSame($file, $unit->name());
$this->assertSame($file, $unit->sourceFileName()); $this->assertSame($file, $unit->sourceFileName());
$this->assertSame(range(1, 88), $unit->sourceLines()); $this->assertSame(range(1, 90), $unit->sourceLines());
} }
public function testCannotBeCreatedForNonExistentFile(): void public function testCannotBeCreatedForNonExistentFile(): void
...@@ -74,7 +76,7 @@ final class FileUnitTest extends TestCase ...@@ -74,7 +76,7 @@ final class FileUnitTest extends TestCase
{ {
$file = $this->temporaryFile = tempnam(sys_get_temp_dir(), 'fileunit'); $file = $this->temporaryFile = tempnam(sys_get_temp_dir(), 'fileunit');
assert($file !== false && $file !== ''); assert($file !== false);
$this->assertTrue(touch($file)); $this->assertTrue(touch($file));
$this->assertTrue(chmod($file, 0o000)); $this->assertTrue(chmod($file, 0o000));
......
...@@ -12,6 +12,7 @@ namespace SebastianBergmann\CodeUnit; ...@@ -12,6 +12,7 @@ namespace SebastianBergmann\CodeUnit;
use function range; use function range;
use function realpath; use function realpath;
use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\Small;
use PHPUnit\Framework\Attributes\TestDox; use PHPUnit\Framework\Attributes\TestDox;
use PHPUnit\Framework\Attributes\UsesClass; use PHPUnit\Framework\Attributes\UsesClass;
use PHPUnit\Framework\TestCase; use PHPUnit\Framework\TestCase;
...@@ -22,6 +23,7 @@ use PHPUnit\Framework\TestCase; ...@@ -22,6 +23,7 @@ use PHPUnit\Framework\TestCase;
#[UsesClass(CodeUnitCollectionIterator::class)] #[UsesClass(CodeUnitCollectionIterator::class)]
#[UsesClass(Mapper::class)] #[UsesClass(Mapper::class)]
#[TestDox('FunctionUnit')] #[TestDox('FunctionUnit')]
#[Small]
final class FunctionUnitTest extends TestCase final class FunctionUnitTest extends TestCase
{ {
public function testCanBeCreatedFromNameOfUserFunction(): void public function testCanBeCreatedFromNameOfUserFunction(): void
......
...@@ -12,6 +12,7 @@ namespace SebastianBergmann\CodeUnit; ...@@ -12,6 +12,7 @@ namespace SebastianBergmann\CodeUnit;
use function realpath; use function realpath;
use Iterator; use Iterator;
use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\Small;
use PHPUnit\Framework\Attributes\TestDox; use PHPUnit\Framework\Attributes\TestDox;
use PHPUnit\Framework\Attributes\UsesClass; use PHPUnit\Framework\Attributes\UsesClass;
use PHPUnit\Framework\TestCase; use PHPUnit\Framework\TestCase;
...@@ -25,6 +26,7 @@ use SebastianBergmann\CodeUnit\Fixture\FixtureTrait; ...@@ -25,6 +26,7 @@ use SebastianBergmann\CodeUnit\Fixture\FixtureTrait;
#[UsesClass(CodeUnitCollectionIterator::class)] #[UsesClass(CodeUnitCollectionIterator::class)]
#[UsesClass(Mapper::class)] #[UsesClass(Mapper::class)]
#[TestDox('InterfaceMethodUnit')] #[TestDox('InterfaceMethodUnit')]
#[Small]
final class InterfaceMethodUnitTest extends TestCase final class InterfaceMethodUnitTest extends TestCase
{ {
public function testCanBeCreatedFromNameOfUserDefinedInterfaceAndMethodName(): void public function testCanBeCreatedFromNameOfUserDefinedInterfaceAndMethodName(): void
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment