我正在尝试为一些字符串格式代码编写单元测试。在某些情况下,格式化输出可能包含双向文本,即从左到右和从右到左的混合。
我已经根据经验验证了在 Android 设备或模拟器上运行时,对于 LTR 和 RTL 输入和输出的所有组合,输出看起来都是正确的。不过,我正在努力在单元测试中捕捉到这一点;我不确定如何在我的测试用例中正确指定预期的输出。
例如,我想断言返回的字符串将呈现如下:
-د.ك.123,456.78
也就是说,字形应该按照从左到右的顺序出现:
-
1
2
3
,
4
5
6
.
7
8
.
ك
.
د
(你不知道在 SO 编辑框中将其编辑成正确的序列有多难!)
我尝试在测试用例中使用标准字符串比较方法,如下所示:
assertEquals("-د.ك.123,456.78", formattedOutput);
但这失败了,因为测试代码中的预期输出字符串正在对其文本进行重新排序。事实上,根据我用来查看源代码的工具(Android Studio vs. Github-with-Chrome),它在源代码中的表现甚至有所不同,所以我不相信它正在测试正确的东西。
我还尝试逐步构建预期输出值,以避免在编辑器中造成混淆,尽管它会导致在引擎盖下构造相同的字符串文字:
assertEquals("-123,456.78" + SYMBOL, formattedOutput);
如何比较字形的视觉顺序,而不是逻辑顺序?Android会BidiFormatter
在这里帮助我吗?