SuperAPI AI 工具集

test-mobile-editing

测试与质量

查看项目

更新于 11-03 23:38

技能介绍

概述 该技能用于测试 Opensteer 移动模块中的远程文本输入(remote-text-input)功能。测试工作需从代码检出根目录运行 shell 命令,缩写路径如 tests/native/journey.tsx 相对于 apps/mobile/modules/remote-text-input,以 apps/ 开头的路径相对于检出根目录。文档要求使用 docs/testing.md 中预留的虚拟机/设备工作流,不应在主机上运行 GUI 旅程。

JS 检查与类型检查 可单独运行以下检查:page.interaction.test.tsx、native-view.interaction.test.tsx、phone-display.interaction.test.tsx、workspace-browser.interaction.test.tsx 等 Vitest 测试,以及 @opensteer/mobile 的 typecheck。Display 组件旅程使用真实的共享 DisplayStreams、reducer 和剪贴板端口,原生解码/输入边界为模拟,证据写入 OPENSTEER_MOBILE_EDITING_EVIDENCE_DIR(默认 /tmp/opensteer-mobile-editing)。文档强调这些是脚本化交互检查,并非原生键盘轨迹或原生像素证据。

原生旅程 tests/native/journey.tsx 是构建后的自定义 Expo 客户端的独立 Metro 入口,挂载生产页面键盘(协商版与基线版)和手机控件,使用真实原生模块、reducer、显示会话和系统剪贴板端口。其显示生产者为本地协议 fixture,不验证真实 Host、浏览器运行时、手机生产者或解码器。serve-journey.ts 将 Metro 的 18767 端口代理到 18766,并在 OPENSTEER_NATIVE_JOURNEY_EVIDENCE_DIR(默认系统临时目录)下记录事件。两个服务器仅应在授权的设备任务中运行,通过带 coordinator URL 编码的 com.opensteer.mobile://expo-development-client/?url= 打开,完成后停止。

iOS 与 Android 提交后运行 guest harness:pnpm test:vm -- --mobile bash -c 'cd ../mobile; bash modules/remote-text-input/tests/native/run-ios.sh'。iOS harness 管理并删除其模拟器,导出 XCTest、JSONL 和 PNG 证据;其硬件驱动与真实美式软键盘、自动更正、预测、日韩及表情键盘录制分开。Android instrumentation 驱动 InputConnection,不记录 Gboard 重组或滑动删除,这些需要带来源的真实键盘输入、共享 Android 锁并重放到共享 reducer。不得将脚本化 setMarkedText/InputConnection 操作标记为原生键盘录制。原生 GUI 工作通过 pnpm test:vm 运行,结束后停止自有模拟器、adb 服务器并释放 Android 锁。iOS 和 Android 的 expo export 仅检查 Metro。

Android 录制与控制 Android 测试 APK 包含 NativeKeyboardRecorderActivity,将生产代理呈现给实际安装的输入法,并把有序数据包写入应用私有 files/<case>.jsonl,不注入 InputConnection 调用。需从生成的 Android 项目以 :remote-text-input:assembleDebugAndroidTest 构建,获取 Android 锁、安装测试 APK,并用 --es case <case-name> 启动 com.opensteer.remotetextinput.NativeKeyboardRecorderActivity。每条轨迹需附带真实键盘/版本、设备构建、交互步骤和截图,才能作为重放 fixture。

NativeKeyboardControlActivity 是测试 APK 中独立的普通 EditText,无自定义 InputConnection 或确认门控,记录值和组合区间到 files/<case>.jsonl。默认使用代理的键盘标志,标准 Boolean intent extra 可省略 NO_PERSONALIZED_LEARNING 以进行对照比较。更改 case 或标志前需强制停止测试包,因为 Android 可能向现有根 Activity 投递新 intent 而不重建。

RemoteEditingJourneyTest.kt 在完整自定义 Expo 客户端中针对本地协议 fixture 运行,测试原生组合结束投递中排队 a、旋转上下文后插入 b 并验证目标恰为 ab,基线用例使用真实 RN InputConnection.performEditorAction 监听器验证 Return 保持焦点并接受后续输入。构建命令为 apps/mobile/android/gradlew -p apps/mobile/android -I "$PWD/apps/mobile/modules/remote-text-input/tests/native/app-journey.gradle" :app:assembleDebug :app:assembleDebugAndroidTest。在 coordinator 和 Metro 运行后,通过 adb shell am instrument 调用测试。需先完成 dev-client onboarding,并在 Android 模拟器锁下运行一个有界设备组,结束后停止应用、模拟器、adb 和 fixture 服务器。

限制 文档明确该技能不验证日韩软输入法、真实 Host、浏览器运行时、Gboard 重组或滑动删除等场景;可用性、收费、平台等信息暂未提供。