mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-11-12 04:07:34 +00:00
4 个文件全部在 `<module>/test/`,源码目录仍零 `_test.go`。
共 21 条判据,只调导出接口,输入 → 可观察输出。
## internal/promptsec —— NewRegistry/Declare/Render/Snapshot/Names
TestDeclareThenRender 声明两段,按 Order 输出且含正文
TestDeclareRejectsMismatchedOwner 段名前缀与 Owner 不符必须报错
TestDeclareIsIdempotent 同段名覆盖,不产生两份
TestEmptyContentRemovesSection 空正文 = 撤销声明
TestRemoveOwnerOnlyDropsThatOwner 撤销一个 owner 不影响其他
TestSnapshotReturnsAllSections 快照反映当前声明
## internal/toolroute —— Dispatch
TestDispatchRoutesEachPrefix 15 种工具前缀 → 对应族处理器
TestDispatchGetPluginToolsExtractsArg plugin_name 参数透传
TestDispatchUnknownIsNotSwallowed 未知工具 handled=false(插件工具不能消失)
TestDispatchNilHandlers nil handlers 不 panic
用 recordingHandlers 记录哪个族被调用,不断言内部 switch 结构。
## internal/pluginview —— 事件 → Snapshot
TestFreshViewIsEmpty 新视图为空
TestCmdRunEventAppearsInSnapshot cmd_run → 命令历史
TestTerminalCreateThenOutput terminal_create + 输出 → 终端状态
TestUnknownToolIsIgnored 未知工具不造记录
**判据写错过一次**:`OnTerminalOutput` 的 payload 键是 `terminal_id`
不是 `id`,第一版按 `id` 写 ⇒ 输出没进 Snapshot。按真实输入契约修正。
## internal/meta —— 版本元信息
TestFullVersionContainsKernelAndVersion
TestSourceURLLooksLikeHTTPS
TestLicenseMetadataNotEmpty
TestSDKCompatibleVersionIsSemverLike
## 变异验证(改回旧实现必须红)
promptsec Declare 直接 return nil → ★ Render 缺正文
toolroute 未知工具 handled=true → ★ 未知工具被吞掉
pluginview cmd_run 不记录 → ★ cmd_run 未进命令历史
meta FullVersion 丢版本 → ★ 不含 "1.4.0"
第一版 promptsec 变异改的是条件中的一段 token、没改变行为(空变异),
重做后确认判据有效。
## 验证
go build ./... PASS
go vet ./... PASS
gofmt -l 干净
python3 .github/scripts/check-ci-gates.py PASS
go test ./... -count=1 24 个测试包 / 100 包无测试 / 0 FAIL
4 个新包 -race 全绿
源码目录 _test.go 0
39 lines
1.1 KiB
Go
39 lines
1.1 KiB
Go
package test
|
||
|
||
// internal/meta 的黑盒判据:FullVersion 的输出 + 版本常量的对外契约。
|
||
|
||
import (
|
||
"strings"
|
||
"testing"
|
||
|
||
"github.com/JianFeeeee/HologramAgent/internal/meta"
|
||
)
|
||
|
||
func TestFullVersionContainsKernelAndVersion(t *testing.T) {
|
||
got := meta.FullVersion()
|
||
for _, want := range []string{meta.KernelName, meta.Version, meta.Commit} {
|
||
if !strings.Contains(got, want) {
|
||
t.Fatalf("★ FullVersion()=%q 不含 %q", got, want)
|
||
}
|
||
}
|
||
}
|
||
|
||
func TestSourceURLLooksLikeHTTPS(t *testing.T) {
|
||
if !strings.HasPrefix(meta.SourceURL, "https://") {
|
||
t.Fatalf("★ SourceURL 不是 https:%q", meta.SourceURL)
|
||
}
|
||
}
|
||
|
||
func TestLicenseMetadataNotEmpty(t *testing.T) {
|
||
if meta.License == "" || !strings.HasPrefix(meta.LicenseURL, "https://") {
|
||
t.Fatalf("★ 许可元信息缺失:license=%q url=%q", meta.License, meta.LicenseURL)
|
||
}
|
||
}
|
||
|
||
func TestSDKCompatibleVersionIsSemverLike(t *testing.T) {
|
||
parts := strings.Split(meta.SDKCompatibleVersion, ".")
|
||
if len(parts) != 3 {
|
||
t.Fatalf("★ SDKCompatibleVersion=%q 不是三段版本号", meta.SDKCompatibleVersion)
|
||
}
|
||
}
|