試験方針

単体試験

ドライバ(C++,doctest)

実行: cmake --preset msvc-x64 && cmake --build --preset msvc-x64 && ctest --preset msvc-x64

フィーダ(Rust)

実行: cargo test --workspace(feeder/ 内)

Agent 向け JSON・終了コード・GUI/CLI 共通制御の結合試験: scripts/integration/agent_cli.ps1.既定では debug CLI を常駐起動し,独立した CLI プロセスから JSON を取得・解析して全デバイス状態,変更,エラー,終了,期限を検証する.SteamVR は不要. -Cli <exe> で試験対象を指定でき,-Gui <exe> を追加すると同じ試験を GUI に対して行う (対話デスクトップが必要).CI は release CLI 版を実行する.

ゴールデンデータの更新: VRDUMMY_UPDATE_FIXTURES=1 cargo test -p vrdummy-protocol

初版のゴールデンデータは仕様書から独立に書いた使い捨ての Python スクリプトで生成し, Rust と C++ の双方がそれに一致することを確認した.以後の更新は Rust 側で行う.

統合試験

SteamVR 非依存の結合試験は 2 箇所にある.

SteamVR 実機での E2E(手動,CI 外)

scripts/integration/steamvr_e2e.ps1 が登録・起動・フィーダ常駐・E2E 実行・後始末を行う.

シナリオ 内容
S1 デバイス列挙,クラス,左右の役割
S2 全デバイスの静的な位置とヨー
S3 HMD の連続移動(単調増加と到達)
S4 ボタン,トリガ,グリップ,スティックが SteamVR Input のアクションに到達
S5 IPD 変更が眼の変換に反映
S6 トラッカーの追跡喪失と復帰
S7 制御パイプ経由の連続コマンド(移動,回転,プリセット)
S8 シャペロンが較正済み,standing 原点 = raw 原点,プレイエリア 3 m × 3 m,ユニバース ID
S9 VRChat 向け既定バインディング: E2E アプリが VRChat の app key を名乗り VRChat のアクションマニフェストを読み込み,move / rotate / jump / interact / grab / menu / trigger_axis にフィーダの入力が到達(VRChat がインストールされている場合のみ)

加えてスクリプトが vrdummy_probe chaperone による初回確定,vrdummy-cli scenario による シナリオファイル再生,フィーダ切断時の追跡喪失,SteamVR 再起動後のシャペロン設定の保持を 確認する.手順は scripts/integration/README.md を参照.

登録管理の実プロセス試験(Windows)

SteamVR とビルド済みドライバが存在する環境で実行する.

.\scripts\integration\driver_registration.ps1
# GUI の Register / Unregister ボタンも Windows UI Automation で操作する
.\scripts\integration\driver_registration.ps1 -Gui .\feeder\target\debug\vrdummy-gui.exe

OpenVR の VR_PATHREG_OVERRIDE で登録ファイルを .tmp 内に隔離し,実際の vrpathreg で登録・解除・冪等性・他ドライバ保持を確認する. 既存の登録ファイルは変更せず,SteamVR も起動しない.GUI 指定時は対話デスクトップが必要.

PC 操作の試験

.\scripts\integration\desktop_controls.ps1
.\scripts\integration\desktop_controls.ps1 -Gui .\feeder\target\debug\vrdummy-gui.exe
# 対話デスクトップ上で GUI を前面にし,対象ウィンドウ限定のキー入力を確認
.\scripts\integration\gui_desktop.ps1
# SteamVR + ダミー HMD が既に起動している場合のみ,位置を復元する実ウィンドウ試験
.\scripts\integration\headset_window.ps1

独立した名前付きパイプと .tmp 内の保存設定を使い,GUI / CLI の状態・操作権の競合拒否・ 明示解除・500 ms の期限切れ・全身移動・FK/IK・Undo・ウィンドウ照会の JSON を確認する. desktop_controls.ps1 は SteamVR / VRChat の起動や実ウィンドウの移動は行わない. gui_desktop.ps1 はテスト GUI の前面化・最小化を行い,W / Esc とフォーカス喪失時の解除を確認する. headset_window.ps1 は実ウィンドウを動かし,保存・再起動時の適用・削除を確認して元の位置に戻す. GUI 版には対話デスクトップが必要. Rust のテストでは IK の到達限界・縮退条件,解除対象入力,Undo,GUI の Esc と 非描画フレーム中のフォーカス喪失も検証する.

SteamVR E2E の S10 は control frame によるスティック・ジャンプ・trigger・grip 入力が OpenVR のアクションに届き,更新停止後に中立へ戻ることを検証する.S9 と同様, VRChat 本体でのワールド操作を検証したことにはならない.

VRChat 本体の手動確認では,テストワールドで次を確認する:

  1. GUI の Walk をキャプチャし,WASD で移動,マウスで視点,Q/E で旋回,Space でジャンプできる.
  2. 左右クリックの使用・掴みが期待どおり動き,Esc / Alt-Tab 後に入力が残らない.
  3. 3D 表示の手・足ドラッグと IK / FK を使い,アバターの追従と設定した寸法を確認する.
  4. SteamVR 起動後の Headset Window 移動と,保存後の再生成時の位置適用を確認する.

CI(GitHub Actions,windows-latest)