新增 mcfold/events.py:EventLog(环形缓冲 + seq + 游标)
- 不做回调式推送:LLM 是回合制的,回调会让事件在两次观察之间静默丢失
- drain(limit) 只取本轮、剩余留待下次(不丢)
- 细分层(block_changed❌y:z)独立可查,不污染粗粒度流
- render_events() 输出紧凑文本行,省 token
session 接线:block_change / multi_block_change / chat / damage /
entity spawn·move·destroy / held_item_slot,并加 chat()/command() 发送
修的真 bug:
- dropped 恒 0:deque(maxlen=) 丢元素无声 ⇒ 改手动计数(事件丢了必须说)
- 事件键 to_state_id 与渲染器的 to 不一致 ⇒ 显示 None,改为解出方块名;
from 区分「未加载/界外」而非裸 None
- run_tests.sh 只数 ✓ 不数 ★ ⇒ 判据少报(98 修正为 110)
实测:/setblock 后事件正确报 grass_block→stone→air,与状态层一致
判据:110 项全通过;4 项变异全部被抓
55 lines
2.2 KiB
Bash
Executable File
55 lines
2.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
# 统一测试入口。
|
||
#
|
||
# ./run_tests.sh 纯 Python 单元测试(秒级)
|
||
# ./run_tests.sh --with-render 额外跑渲染联测(需 Java + Xvfb,约 6 分钟)
|
||
#
|
||
# 渲染联测需要:
|
||
# MCFOLD_RENDER_CLASSPATH 含 client-named.jar 与 McfoldRenderServer.class
|
||
# MCFOLD_NATIVES_DIR lwjgl natives(**.so 必须平铺**,不能带包路径)
|
||
# DISPLAY 指向可用的 X(Xvfb 即可)
|
||
# (加载器联测另需 .mcfold/fabric/ 与已编译的 LoaderBoot.class)
|
||
# 缺任一项会**跳过而非失败**(不误报)。
|
||
cd "$(dirname "$0")"
|
||
WITH_RENDER=0
|
||
[ "${1:-}" = "--with-render" ] && WITH_RENDER=1
|
||
|
||
# 需要 JVM/Xvfb 的套件(默认不跑,跑一次约数分钟)
|
||
SLOW="test_render_bridge.py test_loader_render.py"
|
||
|
||
total=0; fail=0
|
||
for t in tests/test_*.py; do
|
||
name=$(basename "$t")
|
||
if [ $WITH_RENDER -eq 0 ] && [[ " $SLOW " == *" $name "* ]]; then
|
||
printf ' %-24s ⊘ 跳过(用 --with-render 启用)\n' "$name"
|
||
continue
|
||
fi
|
||
out=$(python3 "$t" 2>&1)
|
||
if echo "$out" | grep -qE "全部通过|通过$"; then
|
||
# ★ 计数必须包含 ★ 判据:我特意用 ★ 标出「这条守住了一个真 bug 的回归」,
|
||
# 它们同样是**通过**的判据。只数 ✓ 会让总数少报(曾 16 条只报 7 条)
|
||
# —— 报告少报也是撒谎。
|
||
n=$(echo "$out" | grep -cE "^ (✓|★)")
|
||
skipped=$(echo "$out" | grep -c "^ - 跳过")
|
||
total=$((total+n))
|
||
# ★ 全跳过的套件不算绿:它对环境一无所知,报绿等于把"没测"说成"测过了"
|
||
if [ "$n" -eq 0 ] && [ "$skipped" -gt 0 ]; then
|
||
printf ' %-24s ⊘ 全部跳过(%d 项;环境未就绪)\n' "$name" "$skipped"
|
||
elif [ "$skipped" -gt 0 ]; then
|
||
printf ' %-24s ✓ %2d 项(%d 项跳过)\n' "$name" "$n" "$skipped"
|
||
else
|
||
printf ' %-24s ✓ %2d 项\n' "$name" "$n"
|
||
fi
|
||
else
|
||
fail=$((fail+1))
|
||
printf ' %-24s ✗ 失败\n' "$name"
|
||
echo "$out" | tail -6 | sed 's/^/ /'
|
||
fi
|
||
done
|
||
echo
|
||
if [ $fail -eq 0 ]; then
|
||
echo "全部通过:$total 项,0 失败"
|
||
else
|
||
echo "失败 $fail 个套件(共 $total 项通过)"; exit 1
|
||
fi
|