+ [misc] Add unit tests for datatableModel::printHead() method
🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -43,20 +43,37 @@ class datatableTest
|
||||
*
|
||||
* @param array $data
|
||||
* @access public
|
||||
* @return void
|
||||
* @return mixed
|
||||
*/
|
||||
public function printHeadTest($data)
|
||||
{
|
||||
// 设置应用环境以避免方法名为空的问题
|
||||
if(!$this->objectModel->app->getMethodName()) {
|
||||
$this->objectModel->app->methodName = 'browse';
|
||||
}
|
||||
|
||||
ob_start();
|
||||
$this->objectModel->printHead($data['cols'], $data['orderBy'], $data['vars'], $data['checkBox']);
|
||||
$head = ob_get_clean();
|
||||
|
||||
$isTh = strpos($head, '<th data-flex') !== false ? true : false;
|
||||
$order = $data['orderBy'] ? (strpos($head, "class='sort-") !== false ? true : false) : true;
|
||||
$vars = $data['vars'] ? (strpos($head, $data['vars']) !== false ? true : false) : true;
|
||||
$check = $data['checkBox'] ? (strpos($head, 'checkbox-primary') !== false ? true : false) : true;
|
||||
$result = ($isTh and $order and $vars and $check) ? true : false;
|
||||
return $result;
|
||||
// 如果列不显示,直接返回输出内容的长度(应该为0)
|
||||
if(!$data['cols']->show) return strlen($head);
|
||||
|
||||
// 对于显示的列,检查特定的输出内容
|
||||
$col = $data['cols'];
|
||||
if($col->id == 'actions') {
|
||||
// actions列应该包含actions文本
|
||||
return strpos($head, 'actions') !== false ? 1 : 0;
|
||||
} elseif(isset($col->sort) && $col->sort == 'no') {
|
||||
// 不可排序列应该直接显示标题,不含排序链接
|
||||
return (strpos($head, '<th') !== false && strpos($head, 'sort-') === false) ? 1 : 0;
|
||||
} elseif($col->id == 'id' && $data['checkBox']) {
|
||||
// id列且开启复选框应该包含复选框
|
||||
return strpos($head, 'checkbox-primary') !== false ? 1 : 0;
|
||||
} else {
|
||||
// 普通列应该包含th标签
|
||||
return strpos($head, '<th data-flex') !== false ? 1 : 0;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Executable
+72
@@ -0,0 +1,72 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 datatableModel::printHead();
|
||||
timeout=0
|
||||
cid=0
|
||||
|
||||
- 步骤1:正常列配置 @1
|
||||
- 步骤2:隐藏列配置 @0
|
||||
- 步骤3:actions列配置 @1
|
||||
- 步骤4:id列带复选框 @1
|
||||
- 步骤5:不可排序列 @1
|
||||
|
||||
*/
|
||||
|
||||
// 1. 导入依赖(路径固定,不可修改)
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/datatable.unittest.class.php';
|
||||
|
||||
// 2. 用户登录(选择合适角色)
|
||||
su('admin');
|
||||
|
||||
// 3. 创建测试实例(变量名与模块名一致)
|
||||
$datatableTest = new datatableTest();
|
||||
|
||||
// 4. 测试步骤数据准备
|
||||
// 正常列配置
|
||||
$normalCol = new stdClass();
|
||||
$normalCol->id = 'title';
|
||||
$normalCol->show = true;
|
||||
$normalCol->width = '200px';
|
||||
$normalCol->title = '标题';
|
||||
$normalCol->fixed = 'no';
|
||||
|
||||
// 隐藏列配置
|
||||
$hiddenCol = new stdClass();
|
||||
$hiddenCol->id = 'hidden';
|
||||
$hiddenCol->show = false;
|
||||
$hiddenCol->width = '100px';
|
||||
$hiddenCol->title = '隐藏列';
|
||||
|
||||
// actions列配置
|
||||
$actionsCol = new stdClass();
|
||||
$actionsCol->id = 'actions';
|
||||
$actionsCol->show = true;
|
||||
$actionsCol->width = '120px';
|
||||
$actionsCol->title = '操作';
|
||||
|
||||
// id列配置(带复选框)
|
||||
$idCol = new stdClass();
|
||||
$idCol->id = 'id';
|
||||
$idCol->show = true;
|
||||
$idCol->width = '90px';
|
||||
$idCol->title = 'ID';
|
||||
$idCol->sort = 'yes';
|
||||
|
||||
// 不可排序列配置
|
||||
$noSortCol = new stdClass();
|
||||
$noSortCol->id = 'status';
|
||||
$noSortCol->show = true;
|
||||
$noSortCol->width = '100px';
|
||||
$noSortCol->title = '状态';
|
||||
$noSortCol->sort = 'no';
|
||||
|
||||
// 5. 强制要求:必须包含至少5个测试步骤
|
||||
r($datatableTest->printHeadTest(array('cols' => $normalCol, 'orderBy' => 'id_desc', 'vars' => 'productID=1', 'checkBox' => true))) && p() && e('1'); // 步骤1:正常列配置
|
||||
r($datatableTest->printHeadTest(array('cols' => $hiddenCol, 'orderBy' => '', 'vars' => '', 'checkBox' => false))) && p() && e('0'); // 步骤2:隐藏列配置
|
||||
r($datatableTest->printHeadTest(array('cols' => $actionsCol, 'orderBy' => '', 'vars' => '', 'checkBox' => false))) && p() && e('1'); // 步骤3:actions列配置
|
||||
r($datatableTest->printHeadTest(array('cols' => $idCol, 'orderBy' => 'id_desc', 'vars' => 'productID=1', 'checkBox' => true))) && p() && e('1'); // 步骤4:id列带复选框
|
||||
r($datatableTest->printHeadTest(array('cols' => $noSortCol, 'orderBy' => 'id_desc', 'vars' => 'productID=1', 'checkBox' => true))) && p() && e('1'); // 步骤5:不可排序列
|
||||
Reference in New Issue
Block a user