入力系テストの実装

入力操作全般のテストを書きました。重複もありますが、今のところ 336 ケースです。

AquaSKK は一応マルチプラットフォーム対応を念頭に実装しているので、キー入出力やユーザーインタフェースと、ピュア な C++ 変換エンジンは独立しています。キー入出力や UI は OS によって API が大きく異なる部分なので、変換エンジンとのインタフェースだけ規定して、実装には自由度を持たせているわけです*1。そこで入力系のテストでも「ダミー」のキー入出力を実装し、キー入力と出力結果をコードで確認できるようにしました。

また、'a' を入力とか、'Ctrl-J' を入力、なんてのをいちいち C++ のコードで書くのは非効率的だし阿呆らしいので、入力データと結果データのペアからなる各行をファイルに外出しして、ループで処理しています。AquaSKKMac OS X 専用として実装していたら、こういったテストを書くことも難しかったと思います。実際、以前は Apple Script による簡単なテストでお茶を濁していました。今のところ候補ウィンドウ等の UI の状態までは確認できないので 100% のテストとは言えませんが、コードへの信頼感は飛躍的に向上しています。

副作用として、コードの変更に俄然積極的になり、変換エンジンのコアな部分を「また」書き直してしまいました。もう何度目の書き直しかわかりませんが、今回の修正でコードの住み心地ががらりと良くなり、ようやく自信を持って AquaSKK 4.0 と言えるコードになったと思います。今になって振り返ってみると、入力状態へのアクセスを過度に制限したことから無理なコードになっていたのかなぁという気がしますが、紆余曲折を経て、ほど良いところに落ち着いたようです。

今週末に RC としてリリースしたら、今度こそ本当に不具合の修正だけに専念し、9 月中にリリースするつもりです。

*1:とは言っても、Leopard のキー入出力 API から受けた影響が変換エンジンとのインタフェースに色濃く反映されているので、そう簡単には対応できないと思っています。