From 51be6dee9aa9a8597743f4a08cd3cbbd360d0ff4 Mon Sep 17 00:00:00 2001 From: liugang Date: Sun, 9 Nov 2025 02:32:44 +0800 Subject: [PATCH] + [misc] Add unit tests for extensionZen::getHookFile() method MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- module/extension/test/lib/zen.class.php | 15 +++++ module/extension/test/zen/gethookfile.php | 77 +++++++++++++++++++++++ 2 files changed, 92 insertions(+) create mode 100755 module/extension/test/zen/gethookfile.php diff --git a/module/extension/test/lib/zen.class.php b/module/extension/test/lib/zen.class.php index 5fd6414a05..d11992299d 100644 --- a/module/extension/test/lib/zen.class.php +++ b/module/extension/test/lib/zen.class.php @@ -166,4 +166,19 @@ class extensionZenTest extends baseTest if(dao::isError()) return dao::getError(); return $result; } + + /** + * Test getHookFile method. + * + * @param string $extension 插件代号 + * @param string $hook 钩子类型 + * @access public + * @return string|false + */ + public function getHookFileTest(string $extension, string $hook) + { + $result = $this->invokeArgs('getHookFile', [$extension, $hook]); + if(dao::isError()) return dao::getError(); + return $result; + } } diff --git a/module/extension/test/zen/gethookfile.php b/module/extension/test/zen/gethookfile.php new file mode 100755 index 0000000000..6fa0ef1b79 --- /dev/null +++ b/module/extension/test/zen/gethookfile.php @@ -0,0 +1,77 @@ +#!/usr/bin/env php +rawModule = 'extension'; +$app->rawMethod = 'browse'; + +$extensionTest = new extensionZenTest(); + +// 获取测试路径 +$extensionModel = $tester->loadModel('extension'); +$pkgRoot = $extensionModel->pkgRoot; + +// 步骤1: 测试preinstall钩子文件存在的情况 +$ext1 = 'test_hook_preinstall'; +$hookDir1 = $pkgRoot . $ext1 . DS . 'hook' . DS; +if(!is_dir($hookDir1)) mkdir($hookDir1, 0777, true); +$preinstallFile = $hookDir1 . 'preinstall.php'; +file_put_contents($preinstallFile, 'getHookFileTest($ext1, 'preinstall'); +r($result1 !== false && strpos($result1, 'preinstall.php') !== false) && p() && e('1'); +if(file_exists($preinstallFile)) unlink($preinstallFile); +if(is_dir($hookDir1)) rmdir($hookDir1); +if(is_dir($pkgRoot . $ext1)) rmdir($pkgRoot . $ext1); + +// 步骤2: 测试postinstall钩子文件存在的情况 +$ext2 = 'test_hook_postinstall'; +$hookDir2 = $pkgRoot . $ext2 . DS . 'hook' . DS; +if(!is_dir($hookDir2)) mkdir($hookDir2, 0777, true); +$postinstallFile = $hookDir2 . 'postinstall.php'; +file_put_contents($postinstallFile, 'getHookFileTest($ext2, 'postinstall'); +r($result2 !== false && strpos($result2, 'postinstall.php') !== false) && p() && e('1'); +if(file_exists($postinstallFile)) unlink($postinstallFile); +if(is_dir($hookDir2)) rmdir($hookDir2); +if(is_dir($pkgRoot . $ext2)) rmdir($pkgRoot . $ext2); + +// 步骤3: 测试钩子文件不存在的情况 +$ext3 = 'test_hook_notexist'; +$hookDir3 = $pkgRoot . $ext3 . DS . 'hook' . DS; +if(!is_dir($hookDir3)) mkdir($hookDir3, 0777, true); +$result3 = $extensionTest->getHookFileTest($ext3, 'preuninstall'); +r($result3) && p() && e('0'); +if(is_dir($hookDir3)) rmdir($hookDir3); +if(is_dir($pkgRoot . $ext3)) rmdir($pkgRoot . $ext3); + +// 步骤4: 测试插件目录不存在的情况 +$ext4 = 'test_hook_nodir'; +$result4 = $extensionTest->getHookFileTest($ext4, 'postuninstall'); +r($result4) && p() && e('0'); + +// 步骤5: 测试hook目录不存在但插件目录存在的情况 +$ext5 = 'test_hook_nohookdir'; +$extDir5 = $pkgRoot . $ext5 . DS; +if(!is_dir($extDir5)) mkdir($extDir5, 0777, true); +$result5 = $extensionTest->getHookFileTest($ext5, 'preinstall'); +r($result5) && p() && e('0'); +if(is_dir($extDir5)) rmdir($extDir5); \ No newline at end of file