[英]How to unit-test bidirectional text handling
我正在尝试为一些字符串格式代码编写单元测试。 在某些情况下,格式化输出可能包含双向文本,即从左到右和从右到左的混合。
在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
帮助我吗?
该字符串上的典型assertEquals
和返回相同String的方法(即一个新的String对象)对我来说很好,使用IntelliJ 14.0.3 Ultimate,UTF-8设置为实际文本文件。
什么也可以,你可以尝试,是获取你想要比较的字符串的字节(可能手动指定一个特定的编码),然后使用assertArrayEquals
比较返回的字节数组。 我不明白为什么至少使用手动设置编码获取String的字节不起作用。
如果您愿意,可以查看此页面以获取灵感: https : //docs.oracle.com/javase/tutorial/i18n/text/string.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.