RequireOnceItopFile('/setup/runtimeenv.class.inc.php'); } protected function tearDown(): void { if (($this->sFixtureRootDir !== null) && is_dir($this->sFixtureRootDir)) { self::RecurseRmdir($this->sFixtureRootDir); } if (($this->sBuildDirToCleanup !== null) && is_dir($this->sBuildDirToCleanup)) { self::RecurseRmdir($this->sBuildDirToCleanup); } parent::tearDown(); } public function testDoCompileThrowsWhenExtensionCodeIsMissing(): void { [$sToken, $sSourceDirRelative, $sExtensionsDirRelative] = $this->CreateFixtureContext('runtimeenv-missing-code-'); $sInvalidExtensionXml = << Test extension without code 1.0.0 false XML; file_put_contents(APPROOT.$sExtensionsDirRelative.'/extension.xml', $sInvalidExtensionXml); $oRunTimeEnvironment = $this->CreateRunTimeEnvironment($sToken); $this->expectException(Exception::class); $this->expectExceptionMessage('Extension "Broken extension" cannot be installed: Missing extension code'); $oRunTimeEnvironment->DoCompile([], [], $sSourceDirRelative, $sExtensionsDirRelative, false); } public function testDoCompileThrowsWhenExtensionCodeAndLabelAreMissing(): void { [$sToken, $sSourceDirRelative, $sExtensionsDirRelative] = $this->CreateFixtureContext('runtimeenv-missing-label-'); $sInvalidExtensionXml = << Test extension without code and label 1.0.0 false XML; $sExtensionsDirAbsolute = APPROOT.$sExtensionsDirRelative; file_put_contents($sExtensionsDirAbsolute.'/extension.xml', $sInvalidExtensionXml); $oRunTimeEnvironment = $this->CreateRunTimeEnvironment($sToken); $this->expectException(Exception::class); $this->expectExceptionMessage(sprintf('Extension "%s" cannot be installed: Missing extension code', $sExtensionsDirAbsolute)); $oRunTimeEnvironment->DoCompile([], [], $sSourceDirRelative, $sExtensionsDirRelative, false); } private function CreateFixtureContext(string $sTokenPrefix): array { $sToken = str_replace('.', '-', uniqid($sTokenPrefix, true)); $this->sFixtureRootDir = APPROOT.'data/'.$sToken; $sSourceDirRelative = 'data/'.$sToken.'/source'; $sExtensionsDirRelative = 'data/'.$sToken.'/extensions'; mkdir(APPROOT.$sSourceDirRelative, 0777, true); mkdir(APPROOT.$sExtensionsDirRelative, 0777, true); return [$sToken, $sSourceDirRelative, $sExtensionsDirRelative]; } private function CreateRunTimeEnvironment(string $sToken): RunTimeEnvironment { $oRunTimeEnvironment = new RunTimeEnvironment('test-'.$sToken, false); $this->sBuildDirToCleanup = $oRunTimeEnvironment->GetBuildDir(); return $oRunTimeEnvironment; } }