基于模拟宿主的单元测试
在wasm32-wasip2 上,Rust SDK 调用的是 IDE;在本机上,它调用的是 SDK 自带的模拟宿主。因此 cargo test 不需要 IDE 就能测试插件逻辑:
MockHost::install() 为当前测试安装一个模拟宿主,它:
- 在你限制能力时像 IDE 一样执行检查:
MockHost::install().with_capabilities(&["editor.read"])会让其他所有受限调用返回Error::Denied; - 维护带版本号的编辑器文档:
type_in_editor会让插件的下一次编辑过期,方便测试Error::Stale的处理; - 可以放入项目文件(
set_project_root、add_file、add_dir)、设置(set_setting)、界面语言(set_locale)、VCS 状态、符号等; - 记录插件做过的事:
notifications()、status_items()、storage()、subscriptions()、tasks()、fetches()、logs()、diagnostics()、打开的位置、终端、运行目标; - 可以预设应答:选择器和输入框用
answer_next_prompt,HTTP 响应用on_fetch,程序输出用on_process。
cargo doc(src/mock.rs)。官方插件 都有原生测试可以参考。
校验插件包
check 按 从磁盘安装插件… 完全相同的规则校验文件夹或 .oiplugin:清单、所有贡献、SVG 净化、翻译目录以及组件。对组件,它检查组件只导入插件 API 和 WASI、导入的每个函数在当前 IDE 中都存在且签名一致,并且导出了 plugin world。随后打印代码大小和 API 版本、分类、激活事件、贡献,以及每个能力和它的风险等级,最后输出 ok。
openidea-plugin build 每次构建后都会运行 check。用其他工具链(componentize-py、jco componentize、TinyGo)构建的包也请用它校验。
在 IDE 中试用
用openidea-plugin link 链接文件夹,之后每次 openidea-plugin build 后在 设置 › 插件 的插件详情中点击 从磁盘重新加载(或运行 重新加载插件)。见 快速开始。
设置 › 插件 会显示每个插件的状态、失败原因(如果失败了),以及调用统计:近期调用延迟(p95)、崩溃次数、超时的编辑器结果数,以及空闲回收次数。
日志
host::log(level, message)写入 IDE 日志,并标上插件 id。eprintln!的输出同样会写进日志,panic 的信息会随崩溃一起显示。- 只有以
RUST_LOG=info,ide_plugin=trace启动 IDE 时才会写入 debug 和 trace 级别的日志。 - 用 帮助 › 在访达中显示日志(macOS)、在资源管理器中显示日志(Windows)或 在文件管理器中显示日志(Linux)打开日志目录。
host::output_append,API 1.4)或通知。
常见问题
测试宿主(贡献者)
在本仓库中修改 SDK、WIT 文件或某个插件后,需要重新构建已提交的组件,并运行宿主的集成测试:crates/ide-host/tests/plugins.rs 会加载官方插件和 crates/ide-plugin/tests/fixtures/ 中 fixture 的已提交组件。更多内容见 插件宿主。