文字列書式設定コードの単体テストを作成しようとしています。フォーマット化された出力には、場合によっては双方向のテキスト、つまり左から右と右から左が混在するテキストが含まれる可能性があります。
Android デバイスまたはエミュレーターで実行した場合、LTR と RTL の入力と出力のすべての組み合わせに対して、出力が正しく見えることを経験的に確認しました。ただし、単体テストでこれをキャプチャするのに苦労しています。私のテストケースで、期待される出力を正しく指定する方法がわかりません。
たとえば、返された文字列が次のようにレンダリングされることをアサートしたいと思います。
-د.ك.123,456.78
つまり、グリフは次の順序で左から右に表示されます。
-
1
2
3
,
4
5
6
.
7
8
.
ك
.
د
(SO 編集ボックスでそれを正しいシーケンスに編集することさえどれほど大変だったか、あなたにはわかりません!)
次のように、テストケースで標準の文字列比較方法を使用してみました。
assertEquals("-د.ك.123,456.78", formattedOutput);
しかし、テスト コードの期待される出力文字列のテキストが並べ替えられているため、これは失敗します。実際、ソースを表示するために使用するツール (Android Studio と Github-with-Chrome) に応じて、ソースでの表示も異なるため、正しいことをテストしているとは確信が持てません。
また、エディターでの混乱を避けるために、期待される出力値を段階的に構築しようとしましたが、内部で同じ文字列リテラルが構築されます。
assertEquals("-123,456.78" + SYMBOL, formattedOutput);
論理的な順序ではなく、グリフの視覚的な順序を比較するにはどうすればよいですか? ここでAndroid はBidiFormatter役に立ちますか?