From 751a532124a1d46de61922e653533b8b3a69607b Mon Sep 17 00:00:00 2001 From: danilopolani Date: Fri, 1 Apr 2022 14:34:43 +0200 Subject: [PATCH] start ConfigLoader tests --- bin/pest | 7 +++--- src/ConfigLoader.php | 49 ++++++++++++++++++++----------------- tests/Unit/ConfigLoader.php | 19 ++++++++++++++ 3 files changed, 49 insertions(+), 26 deletions(-) create mode 100644 tests/Unit/ConfigLoader.php diff --git a/bin/pest b/bin/pest index 439a6dec..d6829c9a 100755 --- a/bin/pest +++ b/bin/pest @@ -29,9 +29,10 @@ use Symfony\Component\Console\Output\OutputInterface; $rootPath = dirname($autoloadPath, 2); $argv = new ArgvInput(); - $phpunitConfig = new ConfigLoader($rootPath); - - $testSuite = TestSuite::getInstance($rootPath, $argv->getParameterOption('--test-directory', $phpunitConfig->getTestsDirectory())); + $testSuite = TestSuite::getInstance( + $rootPath, + $argv->getParameterOption('--test-directory', (new ConfigLoader($rootPath))->getTestsDirectory()) + ); $isDecorated = $argv->getParameterOption('--colors', 'always') !== 'never'; $output = new ConsoleOutput(ConsoleOutput::VERBOSITY_NORMAL, $isDecorated); diff --git a/src/ConfigLoader.php b/src/ConfigLoader.php index 49a005a1..b3af2c0d 100644 --- a/src/ConfigLoader.php +++ b/src/ConfigLoader.php @@ -13,14 +13,17 @@ use Throwable; */ final class ConfigLoader { - private ?SimpleXMLElement $config = null; - /** * Default path if config loading went wrong. * * @var string */ - private const DEFAULT_TESTS_PATH = 'tests'; + public const DEFAULT_TESTS_PATH = 'tests'; + + /** + * XML tree of the PHPUnit configuration file. + */ + private ?SimpleXMLElement $config = null; /** * Creates a new instance of the config loader. @@ -62,6 +65,26 @@ final class ConfigLoader return is_dir($basePath) ? $basePath : self::DEFAULT_TESTS_PATH; } + /** + * Get the configuration file path. + */ + public function getConfigurationFilePath(): string|false + { + $candidates = [ + $this->rootPath . '/phpunit.xml', + $this->rootPath . '/phpunit.dist.xml', + $this->rootPath . '/phpunit.xml.dist', + ]; + + foreach ($candidates as $candidate) { + if (is_file($candidate)) { + return realpath($candidate); + } + } + + return false; + } + /** * Load the configuration file. */ @@ -87,24 +110,4 @@ final class ConfigLoader // Restore the correct error reporting error_reporting($oldReportingLevel); } - - /** - * Get the configuration file path. - */ - private function getConfigurationFilePath(): string|false - { - $candidates = [ - $this->rootPath . '/phpunit.xml', - $this->rootPath . '/phpunit.dist.xml', - $this->rootPath . '/phpunit.xml.dist', - ]; - - foreach ($candidates as $candidate) { - if (is_file($candidate)) { - return realpath($candidate); - } - } - - return false; - } } diff --git a/tests/Unit/ConfigLoader.php b/tests/Unit/ConfigLoader.php new file mode 100644 index 00000000..cae011ba --- /dev/null +++ b/tests/Unit/ConfigLoader.php @@ -0,0 +1,19 @@ +toBeNull(); + expect($instance->getConfigurationFilePath())->toBeFalse(); + expect($instance->getTestsDirectory())->toBe(ConfigLoader::DEFAULT_TESTS_PATH); +}); + +it('fallbacks to default path if phpunit is not a valid XML')->skip(); +it('fallbacks to default path if failing to read phpunit content')->skip(); +it('fallbacks to default path if there is no test suites directory')->skip(); +it('fallbacks to default path if test suite directory has no value')->skip(); +it('fallbacks to default path if test suite directory does not exist')->skip(); +it('returns the parent folder of first test suite directory')->skip();