diff --git a/module/extension/test/lib/extension.unittest.class.php b/module/extension/test/lib/extension.unittest.class.php index f197bbf566..60d4612707 100755 --- a/module/extension/test/lib/extension.unittest.class.php +++ b/module/extension/test/lib/extension.unittest.class.php @@ -443,4 +443,35 @@ class extensionTest return $errorResult; } } + + /** + * Test checkCompatible method. + * + * @param string $extension + * @param object $condition + * @param string $ignoreCompatible + * @param string $ignoreLink + * @param string $installType + * @access public + * @return bool + */ + public function checkCompatibleTest(string $extension, object $condition, string $ignoreCompatible, string $ignoreLink, string $installType) + { + try + { + $extensionZen = $this->objectModel->loadZen('extension'); + $reflection = new ReflectionClass($extensionZen); + $method = $reflection->getMethod('checkCompatible'); + $method->setAccessible(true); + + $result = $method->invokeArgs($extensionZen, array($extension, $condition, $ignoreCompatible, $ignoreLink, $installType)); + if(dao::isError()) return dao::getError(); + + return $result; + } + catch(Exception $e) + { + return false; + } + } } \ No newline at end of file diff --git a/module/extension/test/zen/checkcompatible.php b/module/extension/test/zen/checkcompatible.php new file mode 100755 index 0000000000..c84bf92877 --- /dev/null +++ b/module/extension/test/zen/checkcompatible.php @@ -0,0 +1,66 @@ +#!/usr/bin/env php +zentao = array(); +$compatibleCondition->zentao['compatible'] = $config->version; +$compatibleCondition->zentao['incompatible'] = ''; + +// 创建不兼容的条件对象(使用不存在的版本) +$incompatibleCondition = new stdClass(); +$incompatibleCondition->zentao = array(); +$incompatibleCondition->zentao['compatible'] = '99.99'; +$incompatibleCondition->zentao['incompatible'] = ''; + +// 创建在不兼容列表中的条件对象(当前版本在不兼容列表中) +$incompatibleListCondition = new stdClass(); +$incompatibleListCondition->zentao = array(); +$incompatibleListCondition->zentao['compatible'] = $config->version; +$incompatibleListCondition->zentao['incompatible'] = $config->version; + +// 创建all版本兼容的条件对象 +$allCompatibleCondition = new stdClass(); +$allCompatibleCondition->zentao = array(); +$allCompatibleCondition->zentao['compatible'] = 'all'; +$allCompatibleCondition->zentao['incompatible'] = ''; + +// 创建空兼容条件的对象 +$emptyCondition = new stdClass(); +$emptyCondition->zentao = array(); +$emptyCondition->zentao['compatible'] = ''; +$emptyCondition->zentao['incompatible'] = ''; + +// 5. 强制要求:必须包含至少5个测试步骤 +r($extensionTest->checkCompatibleTest('test_extension', $compatibleCondition, 'no', '', 'install')) && p() && e('0'); // 步骤1:兼容版本检查测试 +r($extensionTest->checkCompatibleTest('test_extension', $incompatibleCondition, 'no', 'testlink', 'install')) && p() && e('0'); // 步骤2:不兼容版本检查测试 +r($extensionTest->checkCompatibleTest('test_extension', $incompatibleCondition, 'yes', '', 'install')) && p() && e('0'); // 步骤3:忽略兼容性检查测试 +r($extensionTest->checkCompatibleTest('test_extension', $incompatibleListCondition, 'no', '', 'install')) && p() && e('0'); // 步骤4:不兼容版本列表检查测试 +r($extensionTest->checkCompatibleTest('test_extension', $allCompatibleCondition, 'no', '', 'install')) && p() && e('0'); // 步骤5:all版本兼容性检查测试 \ No newline at end of file