<?php
namespace think {class Config {public static $type='mysql';public static function get($key){return $key==='database.type'?self::$type:null;}}class Exception extends \Exception {}}
namespace app\model {class SyllabusEvaluate {public static $written=[];public function insert($params){self::$written=$params;return 1;}}class Staff {public function read($uuid){return ['uuid'=>$uuid];}}class SyllabusEvaluateExt {}}
namespace {
function guid(){return '12345678-1234-4321-8765-123456789ABC';}
require $argv[1];$logic=new \app\p\logic\SyllabusEvaluate();$checks=[];$actors=['','CDXSYE_FIXTURE',str_repeat('A',32),str_repeat('A',33),'12345678-1234-4321-8765-123456789ABC',str_repeat('中',32),str_repeat('中',33),str_repeat('中文',16).'A'];
foreach(['mysql','app\\cores\\database\\Dm','\\app\\cores\\database\\Dm']as $type){\think\Config::$type=$type;foreach($actors as $i=>$actor){$params=['staff_uuid'=>'87654321-4321-4321-8765-ABCDEF123456','test_content'=>"数据库兼容测试'\n全文",'test_time'=>'2001-02-03','achievement'=>'优秀12.5','demo'=>null,'create_by'=>'禁止采用的客户端作者','uuid'=>'客户端UUID将被覆盖'];$originalParams=$params;$originalActor=$actor;$before=date('Y-m-d H:i:s');$result=$logic->add($params,$actor);$written=\app\model\SyllabusEvaluate::$written;$expected=$params;$expected['uuid']=guid();$expected['create_time']=$written['create_time']??null;$expected['create_by']=$type==='mysql'?$actor:mb_substr($actor,0,32,'UTF-8');$prefix=$type.'_'.$i;
$checks[$prefix.'_real_add_result']=$result===['code'=>0,'message'=>'添加成功'];$checks[$prefix.'_all_written_fields_exact']=$written===$expected;$checks[$prefix.'_auth_actor_unchanged']=$actor===$originalActor;$checks[$prefix.'_caller_params_unchanged']=$params===$originalParams;$checks[$prefix.'_generated_uuid36_preserved']=strlen($written['uuid']??'')===36&&($written['uuid']??'')===guid();$checks[$prefix.'_generated_time_window']=is_string($written['create_time']??null)&&$written['create_time']>=$before&&$written['create_time']<=date('Y-m-d H:i:s');}}
$fail=array_keys(array_filter($checks,static function($v){return !$v;}));echo json_encode(['total'=>count($checks),'failed_count'=>count($fail),'failed'=>$fail],JSON_UNESCAPED_UNICODE),"\n";exit($fail?1:0);
}
