diff --git a/module/extension/test/lib/extension.unittest.class.php b/module/extension/test/lib/extension.unittest.class.php old mode 100644 new mode 100755 index f04d4f1959..141eb65dc4 --- a/module/extension/test/lib/extension.unittest.class.php +++ b/module/extension/test/lib/extension.unittest.class.php @@ -96,4 +96,25 @@ class extensionTest return $result; } + + /** + * Test getHookFile method. + * + * @param string $extension + * @param string $hook + * @access public + * @return string|false + */ + public function getHookFileTest(string $extension, string $hook) + { + $extensionZen = $this->objectModel->loadZen('extension'); + $reflection = new ReflectionClass($extensionZen); + $method = $reflection->getMethod('getHookFile'); + $method->setAccessible(true); + + $result = $method->invokeArgs($extensionZen, array($extension, $hook)); + if(dao::isError()) return dao::getError(); + + return $result; + } } \ No newline at end of file diff --git a/module/extension/test/zen/gethookfile.php b/module/extension/test/zen/gethookfile.php new file mode 100755 index 0000000000..bb71572111 --- /dev/null +++ b/module/extension/test/zen/gethookfile.php @@ -0,0 +1,57 @@ +#!/usr/bin/env php +rawModule = 'extension'; +$app->rawMethod = 'browse'; + +// 初始化extension模型和zen实例 +$extensionModel = $tester->loadModel('extension'); +$zen = initReference('extension'); +$func = $zen->getMethod('getHookFile'); + +// 创建zen实例并设置extension属性 +$zenInstance = $zen->newInstance(); +$zenInstance->extension = $extensionModel; + +// 创建测试环境所需的目录和文件 +$testPkgRoot = $extensionModel->pkgRoot; + +// 创建测试所需的目录结构 +$testExtension = 'testextension'; +$testHookDir = $testPkgRoot . $testExtension . '/hook/'; +if(!is_dir($testHookDir)) mkdir($testHookDir, 0777, true); + +// 创建测试钩子文件 +$preinstallFile = $testHookDir . 'preinstall.php'; +file_put_contents($preinstallFile, 'invokeArgs($zenInstance, array($testExtension, 'preinstall'))) && p() && e('/repo/zentaopms/extension/pkg/testextension/hook/preinstall.php'); // 步骤1:存在的插件和钩子文件 +r($func->invokeArgs($zenInstance, array($testExtension, 'nonexistent'))) && p() && e('0'); // 步骤2:存在的插件但不存在的钩子文件 +r($func->invokeArgs($zenInstance, array('nonexistent', 'preinstall'))) && p() && e('0'); // 步骤3:不存在的插件 +r($func->invokeArgs($zenInstance, array('', 'preinstall'))) && p() && e('0'); // 步骤4:空字符串参数测试 +r($func->invokeArgs($zenInstance, array('test/ext', '../preinstall'))) && p() && e('0'); // 步骤5:特殊字符参数测试 + +// 6. 清理测试环境 +if(file_exists($preinstallFile)) unlink($preinstallFile); +if(is_dir($testHookDir)) rmdir($testHookDir); +if(is_dir(dirname($testHookDir))) rmdir(dirname($testHookDir)); \ No newline at end of file