RequireOnceItopFile('/setup/runtimeenv.class.inc.php'); } public function testDoCompileDoesNotThrowWhenUnselectedExtensionCodeIsMissing(): void { [$sEnvironment, $sExtensionsDirRelative] = $this->CreateFixtureContext('env-missing-code-'); $sInvalidExtensionXml = << Test extension without code 1.0.0 false XML; file_put_contents(APPROOT.$sExtensionsDirRelative.'/extension.xml', $sInvalidExtensionXml); $oRunTimeEnvironment = $this->CreateRunTimeEnvironment($sEnvironment); //early DOMFormatException to avoid any real compilation $this->expectException(DOMFormatException::class); $oRunTimeEnvironment->DoCompile([], [], []); } public function testDoCompileThrowsWhenSelectedExtensionCodeIsMissing(): void { [$sEnvironment, $sExtensionsDirRelative] = $this->CreateFixtureContext('env-missing-code-'); $sInvalidExtensionXml = << Test extension without code 1.0.0 false XML; file_put_contents(APPROOT.$sExtensionsDirRelative.'/extension.xml', $sInvalidExtensionXml); $oRunTimeEnvironment = $this->CreateRunTimeEnvironment($sEnvironment); $this->expectException(Exception::class); $this->expectExceptionMessage("Selected extension(s) cannot be installed: Missing extension code (Broken extension)"); $oRunTimeEnvironment->DoCompile([""], [], []); } public function testDoCompileThrowsWhenSelectedExtensionCodeAndLabelAreMissing(): void { [$sEnvironment, $sExtensionsDirRelative] = $this->CreateFixtureContext('env-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($sEnvironment); $this->expectException(Exception::class); $this->expectExceptionMessage("Selected extension(s) cannot be installed: Missing extension code ($sExtensionsDirAbsolute)"); $oRunTimeEnvironment->DoCompile([""], [], [], false); } private function CreateFixtureContext(string $sEnvPrefix): array { $sEnvironment = str_replace('.', '-', uniqid($sEnvPrefix, true)); $sExtensionsDirRelative = 'data/'.$sEnvironment.'-modules'; mkdir(APPROOT.$sExtensionsDirRelative, 0777, true); $this->aFileToClean[] = APPROOT.$sExtensionsDirRelative; return [$sEnvironment, $sExtensionsDirRelative]; } private function CreateRunTimeEnvironment(string $sEnvironment): RunTimeEnvironment { $oRunTimeEnvironment = new RunTimeEnvironment($sEnvironment, false); $this->aFileToClean[] = $oRunTimeEnvironment->GetBuildDir(); return $oRunTimeEnvironment; } }