+ [misc] Add unit tests for jenkinsZen::buildTree() method

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
liugang
2025-11-12 08:25:48 +08:00
co-authored by Claude
parent 69ba8c9396
commit 951eb9af0b
2 changed files with 96 additions and 0 deletions
+48
View File
@@ -0,0 +1,48 @@
<?php
declare(strict_types = 1);
class jenkinsZenTest
{
/**
* Test buildTree method.
*
* @param array $tasks
* @access public
* @return mixed
*/
public function buildTreeTest($tasks = array())
{
global $app;
/* 加载 control 和 zen 类 */
if(!class_exists('jenkins'))
{
require_once $app->getModulePath('', 'jenkins') . 'control.php';
}
if(!class_exists('jenkinsZen'))
{
require_once $app->getModulePath('', 'jenkins') . 'zen.php';
}
/* 使用反射创建 jenkinsZen 实例,跳过构造函数 */
$reflection = new ReflectionClass('jenkinsZen');
$zenInstance = $reflection->newInstanceWithoutConstructor();
/* 初始化必要的属性 */
$zenInstance->app = $app;
$zenInstance->config = $app->config;
$zenInstance->lang = $app->lang;
$zenInstance->dao = $app->loadClass('dao');
/* 通过反射调用 buildTree 方法 */
$method = $reflection->getMethod('buildTree');
$method->setAccessible(true);
/* 调用 zen 方法 */
$result = $method->invoke($zenInstance, $tasks);
if(dao::isError()) return dao::getError();
return $result;
}
}
+48
View File
@@ -0,0 +1,48 @@
#!/usr/bin/env php
<?php
/**
title=测试 jenkinsZen::buildTree();
timeout=0
cid=0
- 步骤1: 测试空数组 @0
- 步骤2: 测试单个任务
- 第0条的id属性 @job1
- 第0条的text属性 @test-job
- 步骤3: 测试多个任务
- 第0条的id属性 @job1
- 第1条的id属性 @job2
- 第2条的id属性 @job3
- 步骤4: 测试文件夹结构
- 第0条的text属性 @folder1
- 第0条的type属性 @folder
- 步骤5: 测试嵌套结构-顶层类型第0条的type属性 @folder
- 步骤6: 测试嵌套结构-顶层文本第0条的text属性 @folder1
- 步骤7: 测试URL编码
- 第0条的text属性 @test job
- 第1条的text属性 @hello+world
- 步骤8: 测试中文名称
- 第0条的id属性 @测试任务
- 第1条的id属性 @开发任务
- 步骤9: 测试空文件夹被忽略 @0
*/
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/lib/zen.class.php';
su('admin');
$jenkinsTest = new jenkinsZenTest();
r($jenkinsTest->buildTreeTest(array())) && p() && e('0'); // 步骤1: 测试空数组
r($jenkinsTest->buildTreeTest(array('job1' => 'test-job'))) && p('0:id;0:text') && e('job1,test-job'); // 步骤2: 测试单个任务
r($jenkinsTest->buildTreeTest(array('job1' => 'task1', 'job2' => 'task2', 'job3' => 'task3'))) && p('0:id;1:id;2:id') && e('job1,job2,job3'); // 步骤3: 测试多个任务
r($jenkinsTest->buildTreeTest(array('folder1' => array('sub1' => 'task1', 'sub2' => 'task2')))) && p('0:text;0:type') && e('folder1,folder'); // 步骤4: 测试文件夹结构
r($jenkinsTest->buildTreeTest(array('folder1' => array('folder2' => array('sub1' => 'task1'))))) && p('0:type') && e('folder'); // 步骤5: 测试嵌套结构-顶层类型
r($jenkinsTest->buildTreeTest(array('folder1' => array('folder2' => array('sub1' => 'task1'))))) && p('0:text') && e('folder1'); // 步骤6: 测试嵌套结构-顶层文本
r($jenkinsTest->buildTreeTest(array('job1' => 'test%20job', 'job2' => 'hello%2Bworld'))) && p('0:text;1:text') && e('test job,hello+world'); // 步骤7: 测试URL编码
r($jenkinsTest->buildTreeTest(array('测试任务' => 'job1', '开发任务' => 'job2'))) && p('0:id;1:id') && e('测试任务,开发任务'); // 步骤8: 测试中文名称
r($jenkinsTest->buildTreeTest(array('empty_folder' => array()))) && p('0') && e('0'); // 步骤9: 测试空文件夹被忽略