問題
現状、ibus-akaza(IBus インプットメソッド)には適切な E2E(End-to-End)テストがありません。
現在のテスト状況
ユニットテスト
- ✅ libakaza: 豊富なユニットテストと統合テスト
- ✅ libakaza/graph_resolver: Viterbi アルゴリズムのテスト
- ✅ ibus-akaza/context.rs: keyval_to_char などの小規模テスト
- ❌ ibus-akaza: 全体的な入力フローのテストなし
E2E テストの欠如
テストできていないこと:
- 実際のキー入力から変換までの統合フロー
- IBus との連携動作
- GUI アプリケーションとの相互作用
- 複数アプリケーション間での動作
- 文節操作(Shift+左右キー)の動作
- 候補選択と確定の動作
- クラッシュリカバリ
E2E テストの重要性
1. IME 特有の複雑性
IME は以下のような複雑な相互作用を持ちます:
- ホストアプリケーション(ブラウザ、エディタなど)
- IBus デーモン
- GTK/Qt などの GUI フレームワーク
- X11/Wayland ディスプレイサーバー
これらの統合動作は単体テストでは検証できません。
2. ユーザーエクスペリエンスの保証
IME のバグは以下のような深刻な影響があります:
3. リグレッション防止
現在のクラッシュ修正シリーズ(PR #348-351)のような変更が、実際の使用環境で正しく動作することを保証できません。
提案される改善策
1. 自動化された E2E テストフレームワークの導入
オプション A: atspi (Assistive Technology Service Provider Interface)
# Python + pyatspi の例
import pyatspi
def test_basic_hiragana_input():
# アプリケーションを起動
app = launch_test_app()
text_field = app.find_text_field()
# IME を有効化
text_field.focus()
# キー入力をシミュレート
send_keys("watashi")
assert get_preedit_text() == "わたし"
# スペースで変換
send_key("space")
candidates = get_candidates()
assert "私" in candidates
# Enter で確定
send_key("return")
assert text_field.text == "私"
メリット:
- Linux アクセシビリティ標準
- IBus と統合しやすい
- GUI 自動化が可能
デメリット:
- セットアップが複雑
- CI での実行にディスプレイが必要
オプション B: Headless X11 + xdotool
# GitHub Actions での実行例
- name: E2E Test
run: |
# 仮想ディスプレイを起動
Xvfb :99 -screen 0 1024x768x24 &
export DISPLAY=:99
# IBus デーモンを起動
ibus-daemon -drx
# テストアプリケーションを起動
gedit &
# xdotool でキー入力をシミュレート
xdotool key ctrl+space # IME 有効化
xdotool type "watashi"
xdotool key space # 変換
xdotool key Return # 確定
# 結果を検証
xdotool getactivewindow getwindowname | grep "私"
メリット:
デメリット:
オプション C: カスタムテストハーネス
// ibus-akaza 専用のテストハーネス
#[test]
fn test_conversion_flow() {
let mut engine = create_test_engine();
// キー入力シミュレート
engine.process_key_event('w' as u32, 0, 0);
engine.process_key_event('a' as u32, 0, 0);
// ...
// Preedit テキストを確認
assert_eq!(engine.get_preedit(), "わ");
// 変換
engine.process_key_event(IBus_KEY_space, 0, 0);
// 候補を確認
let candidates = engine.get_candidates();
assert!(candidates.contains(&"私"));
}
メリット:
- Rust ネイティブ
- 高速で安定
- CI で簡単に実行
デメリット:
- 実際の IBus 環境とは異なる
- GUI レイヤーのテストはできない
2. 段階的な導入計画
Phase 1: 基本的な変換フローのテスト
Phase 2: 高度な機能のテスト
Phase 3: エラーハンドリングのテスト
Phase 4: パフォーマンステスト
3. CI/CD への統合
# .github/workflows/e2e-test.yml
name: E2E Tests
on: [push, pull_request]
jobs:
e2e:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y ibus ibus-gtk4 xvfb xdotool
- name: Build ibus-akaza
run: cargo build --release
- name: Run E2E tests
run: |
Xvfb :99 &
export DISPLAY=:99
./scripts/run-e2e-tests.sh
期待される効果
-
品質向上
-
開発速度向上
-
ドキュメント効果
- テストコードが使用例となる
- 期待される動作が明確に
関連
優先度
High - IME の品質保証に直結する重要な課題
ラベル
- enhancement
- testing
- infrastructure
- high-priority
問題
現状、ibus-akaza(IBus インプットメソッド)には適切な E2E(End-to-End)テストがありません。
現在のテスト状況
ユニットテスト
E2E テストの欠如
テストできていないこと:
E2E テストの重要性
1. IME 特有の複雑性
IME は以下のような複雑な相互作用を持ちます:
これらの統合動作は単体テストでは検証できません。
2. ユーザーエクスペリエンスの保証
IME のバグは以下のような深刻な影響があります:
3. リグレッション防止
現在のクラッシュ修正シリーズ(PR #348-351)のような変更が、実際の使用環境で正しく動作することを保証できません。
提案される改善策
1. 自動化された E2E テストフレームワークの導入
オプション A: atspi (Assistive Technology Service Provider Interface)
メリット:
デメリット:
オプション B: Headless X11 + xdotool
メリット:
デメリット:
オプション C: カスタムテストハーネス
メリット:
デメリット:
2. 段階的な導入計画
Phase 1: 基本的な変換フローのテスト
Phase 2: 高度な機能のテスト
Phase 3: エラーハンドリングのテスト
Phase 4: パフォーマンステスト
3. CI/CD への統合
期待される効果
品質向上
開発速度向上
ドキュメント効果
関連
優先度
High - IME の品質保証に直結する重要な課題
ラベル