*/ declare(strict_types = 1); use PHPUnit\Framework\TestCase; // Require autoloader as per MDImporter's provideEnv.php require_once __DIR__ . '/../../../provideEnv.php'; /** * Test to ensure that all concordance lists in this repository implement the MDImporterConcordanceListInterface interface. */ final class InterfaceImplementationTest extends TestCase { /** @var string[] */ private array $_lists = []; /** * Quasi-constructor connects to DB. * * @return void */ protected function setUp():void { if (($listFiles = scandir(__DIR__ . '/../src')) === false) { throw new Exception("Failed to read /src directory"); } foreach ($listFiles as $file) { if (pathinfo($file, PATHINFO_EXTENSION) === 'php') { $this->_lists[] = pathinfo($file, PATHINFO_FILENAME); } } } /** * Test all concordance lists for their implementation of MDImporterConcordanceListInterface. * * @return void */ public function testListInterfaceIsImplemented():void { foreach ($this->_lists as $list) { if (!file_exists(__DIR__ . '/../src/' . $list . '.php')) { throw new Exception("List file does not exist" . $list); } require_once __DIR__ . '/../src/' . $list . '.php'; $interfaces = class_implements(new $list); self::assertArrayHasKey('MDImporterConcordanceListInterface', $interfaces); } } /** * Ensure all tests throw the MDImporterMissingConcordance exception, if * a new value is encountered. * * @return void */ public function testMDImporterMissingConcordanceIsThrownForNewValues():void { foreach ($this->_lists as $list) { $this->expectException(MDImporterMissingConcordance::class); (new $list)::getConcordanceTarget("ThisInputShouldNotExist"); } } }