mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
ENH Improve ManifestFileFinder so it can ignore test based on the testing library
This commit is contained in:
parent
2922370d81
commit
640a7e3eea
@ -32,7 +32,8 @@ class ManifestFileFinder extends FileFinder
|
|||||||
'include_themes' => false,
|
'include_themes' => false,
|
||||||
'ignore_tests' => true,
|
'ignore_tests' => true,
|
||||||
'min_depth' => 1,
|
'min_depth' => 1,
|
||||||
'ignore_dirs' => ['node_modules']
|
'ignore_dirs' => ['node_modules'],
|
||||||
|
'ignore_ci_library' => []
|
||||||
];
|
];
|
||||||
|
|
||||||
public function acceptDir($basename, $pathname, $depth)
|
public function acceptDir($basename, $pathname, $depth)
|
||||||
@ -73,6 +74,14 @@ class ManifestFileFinder extends FileFinder
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Skip if test dir inside vendor module with unexpected CI library
|
||||||
|
if ($depth > 3 && $basename === self::TESTS_DIR && $ignoreCILib = $this->getOption('ignore_ci_library')) {
|
||||||
|
$ciLib = $this->findModuleCILib($basename, $pathname, $depth);
|
||||||
|
if (in_array($ciLib, $ignoreCILib)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return parent::acceptDir($basename, $pathname, $depth);
|
return parent::acceptDir($basename, $pathname, $depth);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -251,4 +260,22 @@ class ManifestFileFinder extends FileFinder
|
|||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function findModuleCILib(string $basename, string $pathname, int $depth): string
|
||||||
|
{
|
||||||
|
if ($depth < 1) {
|
||||||
|
return Module::CI_PHPUNIT_UNKNOWN;
|
||||||
|
}
|
||||||
|
|
||||||
|
$newBasename = basename($pathname);
|
||||||
|
$newPathname = dirname($pathname);
|
||||||
|
$newDepth = $depth - 1;
|
||||||
|
|
||||||
|
if ($this->isDirectoryModule($newBasename, $newPathname, $newDepth)) {
|
||||||
|
$module = new Module($newPathname, $this->upLevels($newPathname, $newDepth));
|
||||||
|
return $module->getCILibrary();
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->findModuleCILib($newBasename, $newPathname, $newDepth);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,6 @@ namespace SilverStripe\Core\Manifest;
|
|||||||
use Composer\Semver\Semver;
|
use Composer\Semver\Semver;
|
||||||
use Exception;
|
use Exception;
|
||||||
use InvalidArgumentException;
|
use InvalidArgumentException;
|
||||||
use RuntimeException;
|
|
||||||
use Serializable;
|
use Serializable;
|
||||||
use SilverStripe\Core\Path;
|
use SilverStripe\Core\Path;
|
||||||
use SilverStripe\Dev\Deprecation;
|
use SilverStripe\Dev\Deprecation;
|
||||||
@ -301,8 +300,9 @@ class Module implements Serializable
|
|||||||
*/
|
*/
|
||||||
public function getCILibrary(): string
|
public function getCILibrary(): string
|
||||||
{
|
{
|
||||||
|
// We don't have any composer data at all
|
||||||
if (empty($this->composerData)) {
|
if (empty($this->composerData)) {
|
||||||
throw new RuntimeException('No composer data at all');
|
return self::CI_PHPUNIT_UNKNOWN;
|
||||||
}
|
}
|
||||||
|
|
||||||
// We don't have any dev dependencies
|
// We don't have any dev dependencies
|
||||||
|
@ -4,6 +4,7 @@ namespace SilverStripe\Core\Tests\Manifest;
|
|||||||
|
|
||||||
use SilverStripe\Core\Manifest\ManifestFileFinder;
|
use SilverStripe\Core\Manifest\ManifestFileFinder;
|
||||||
use SilverStripe\Dev\SapphireTest;
|
use SilverStripe\Dev\SapphireTest;
|
||||||
|
use SilverStripe\Core\Manifest\Module;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests for the {@link ManifestFileFinder} class.
|
* Tests for the {@link ManifestFileFinder} class.
|
||||||
@ -55,6 +56,8 @@ class ManifestFileFinderTest extends SapphireTest
|
|||||||
[
|
[
|
||||||
'module/module.txt',
|
'module/module.txt',
|
||||||
'vendor/myvendor/thismodule/module.txt',
|
'vendor/myvendor/thismodule/module.txt',
|
||||||
|
'vendor/myvendor/phpunit5module/code/logic.txt',
|
||||||
|
'vendor/myvendor/phpunit9module/code/logic.txt',
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -75,6 +78,56 @@ class ManifestFileFinderTest extends SapphireTest
|
|||||||
'vendor/myvendor/thismodule/module.txt',
|
'vendor/myvendor/thismodule/module.txt',
|
||||||
'vendor/myvendor/thismodule/tests/tests.txt',
|
'vendor/myvendor/thismodule/tests/tests.txt',
|
||||||
'vendor/myvendor/thismodule/code/tests/tests2.txt',
|
'vendor/myvendor/thismodule/code/tests/tests2.txt',
|
||||||
|
'vendor/myvendor/phpunit5module/code/logic.txt',
|
||||||
|
'vendor/myvendor/phpunit5module/tests/phpunit5tests.txt',
|
||||||
|
'vendor/myvendor/phpunit9module/code/logic.txt',
|
||||||
|
'vendor/myvendor/phpunit9module/tests/phpunit9tests.txt',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testIgnorePHPUnit5Tests()
|
||||||
|
{
|
||||||
|
$finder = new ManifestFileFinder();
|
||||||
|
$finder->setOption('name_regex', '/\.txt$/');
|
||||||
|
$finder->setOption('ignore_tests', false);
|
||||||
|
$finder->setOption('ignore_ci_library', [Module::CI_PHPUNIT_FIVE]);
|
||||||
|
|
||||||
|
$this->assertFinderFinds(
|
||||||
|
$finder,
|
||||||
|
null,
|
||||||
|
[
|
||||||
|
'module/module.txt',
|
||||||
|
'module/tests/tests.txt',
|
||||||
|
'module/code/tests/tests2.txt',
|
||||||
|
'vendor/myvendor/thismodule/module.txt',
|
||||||
|
'vendor/myvendor/thismodule/tests/tests.txt',
|
||||||
|
'vendor/myvendor/thismodule/code/tests/tests2.txt',
|
||||||
|
'vendor/myvendor/phpunit5module/code/logic.txt',
|
||||||
|
'vendor/myvendor/phpunit9module/code/logic.txt',
|
||||||
|
'vendor/myvendor/phpunit9module/tests/phpunit9tests.txt',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testIgnoreNonePHPUnit9Tests()
|
||||||
|
{
|
||||||
|
$finder = new ManifestFileFinder();
|
||||||
|
$finder->setOption('name_regex', '/\.txt$/');
|
||||||
|
$finder->setOption('ignore_tests', false);
|
||||||
|
$finder->setOption('ignore_ci_library', [Module::CI_PHPUNIT_FIVE, Module::CI_PHPUNIT_UNKNOWN]);
|
||||||
|
|
||||||
|
$this->assertFinderFinds(
|
||||||
|
$finder,
|
||||||
|
null,
|
||||||
|
[
|
||||||
|
'module/module.txt',
|
||||||
|
'module/tests/tests.txt',
|
||||||
|
'module/code/tests/tests2.txt',
|
||||||
|
'vendor/myvendor/thismodule/module.txt',
|
||||||
|
'vendor/myvendor/phpunit5module/code/logic.txt',
|
||||||
|
'vendor/myvendor/phpunit9module/code/logic.txt',
|
||||||
|
'vendor/myvendor/phpunit9module/tests/phpunit9tests.txt',
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -92,6 +145,8 @@ class ManifestFileFinderTest extends SapphireTest
|
|||||||
'module/module.txt',
|
'module/module.txt',
|
||||||
'themes/themes.txt',
|
'themes/themes.txt',
|
||||||
'vendor/myvendor/thismodule/module.txt',
|
'vendor/myvendor/thismodule/module.txt',
|
||||||
|
'vendor/myvendor/phpunit5module/code/logic.txt',
|
||||||
|
'vendor/myvendor/phpunit9module/code/logic.txt',
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1 @@
|
|||||||
|
<?php
|
@ -0,0 +1 @@
|
|||||||
|
This file should always be discovered.
|
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"type": "silverstripe-vendor-module",
|
||||||
|
"require-dev": {
|
||||||
|
"sminnee/phpunit": "^5.7"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1 @@
|
|||||||
|
This file should not be discovered when running PHPUnit 9 tests
|
@ -0,0 +1 @@
|
|||||||
|
<?php
|
@ -0,0 +1 @@
|
|||||||
|
This file should always be discovered.
|
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"type": "silverstripe-vendor-module",
|
||||||
|
"require-dev": {
|
||||||
|
"phpunit/phpunit": "^9"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1 @@
|
|||||||
|
This file should not be discovered when running PHPUnit 9 tests
|
Loading…
Reference in New Issue
Block a user