Files
ycode/scripts/specialized-block-regression.tsx

90 lines
3.2 KiB
TypeScript

import assert from 'node:assert/strict'
import { renderToStaticMarkup } from 'react-dom/server'
import {
PlanCreateBlock,
PlanUpdateBlock,
TaskBlock,
ThinkingBlock
} from '../src/renderer/src/workbuddy/conversation/SpecializedBlocks'
const reasoning = renderToStaticMarkup(<ThinkingBlock text="Reasoning body" isFinished isLastContent />)
assert.match(reasoning, /Reasoning body/)
assert.match(reasoning, /思考中/)
assert.doesNotMatch(reasoning, /<span[^>]*>[+-]<\/span>/)
const plan = renderToStaticMarkup(
<PlanCreateBlock
data={{
id: 'plan-1', name: 'Release plan', status: 'building',
explorationStatus: { phase: 'exploring', toolName: 'search' },
todolist: [
{ id: 'done', content: 'Complete step', status: 'completed' },
{ id: 'active', content: 'Active step', status: 'in_progress' },
{ id: 'failed', content: 'Failed step', status: 'failed' },
{ id: 'pending', content: 'Pending step', status: 'pending' },
{ id: 'hidden', content: 'Hidden step', status: 'pending' }
]
}}
status="success"
maxDisplayTasks={4}
onViewPlan={() => undefined}
onDownloadPlan={() => undefined}
onBuildPlan={() => undefined}
/>
)
assert.match(plan, /plan\.md/)
assert.match(plan, /aria-label="Download plan"[^>]*><svg/)
assert.match(plan, /Complete step/)
assert.match(plan, /Active step/)
assert.match(plan, /Failed step/)
assert.match(plan, /Pending step/)
assert.match(plan, /cb-plan-task-wait-icon/)
assert.match(plan, /\+ 1 更多/)
assert.match(plan, /查看计划/)
assert.match(plan, />执行</)
assert.doesNotMatch(plan, />(?:OK|&gt;|x|-)</)
const activePlan = renderToStaticMarkup(
<PlanCreateBlock
data={{ id: 'plan-active', name: 'Search plan', explorationStatus: { phase: 'exploring', toolName: 'search' } }}
status="running"
/>
)
assert.match(activePlan, /使用 search 探索中\.\.\./)
const failedPlan = renderToStaticMarkup(
<PlanCreateBlock data={{ id: 'plan-failed', name: 'Broken plan' }} status="error" />
)
assert.match(failedPlan, /aria-label="Failed"/)
const cancelledPlan = renderToStaticMarkup(
<PlanCreateBlock data={{ id: 'plan-cancelled', name: 'Cancelled plan' }} status="cancelled" />
)
assert.match(cancelledPlan, /aria-label="Cancelled"/)
const update = renderToStaticMarkup(
<PlanUpdateBlock data={{ name: 'Release plan', status: 'building' }} status="running" />
)
assert.match(update, /Release plan confirmed/)
assert.match(update, /cb-plan-update-spinner/)
const task = renderToStaticMarkup(
<TaskBlock
data={{
description: 'Run checks', subagentName: 'builder', finalResult: 'Stopped output',
toolInfo: [{ name: 'execute_command', needApprove: true, toolCallId: 'inner-tool' }]
}}
status="cancelled"
/>
)
assert.match(task, /任务 builder 子代理: Run checks/)
assert.match(task, /任务执行已取消!/)
assert.match(task, /aria-expanded="true" aria-label="Collapse task"/)
assert.match(task, /execute_command/)
assert.match(task, /Stopped output/)
const pendingTask = renderToStaticMarkup(<TaskBlock status="pending" />)
assert.match(pendingTask, /正在创建任务/)
console.log('Specialized block icon and label SSR regression checks passed')