如何在 Perl 中测试包含 ANSI 颜色代码的字符串是否等效?
我正在为一个使用 ANSI 颜色代码执行操作的 Perl 模块编写测试。我希望能够测试两个嵌入 ANSI 颜色代码的字符串,看看它们在打印时是否会产生相同的输出。这不是一个简单的字符串相等性测试,因为以不同的顺序放置多个代码仍然可以产生相同的结果。例如,“粗体”和“蓝色”的代码可以先与其中任何一个放在一起,以产生粗体蓝色。
那么,有没有简单的方法来测试两个具有 ANSI 颜色代码的字符串的输出是否相等?
I'm writing tests for a Perl module that does things with ANSI color codes. I would like to be able to test two strings with embedded ANSI color codes to see if they would produce the same output if printed. This is not a simple string equality test, because putting multiple codes in a different order can still yield the same result. For example, the codes for "bold" and "blue" can be put together with either one first to yield bold blue.
So, is there any easy way to test two strings with ANSI color codes for equivalence of output?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
最简单的方法是将每个字符串转换为它通过模拟设备产生的输出的表示形式。即生成一个
(字符、颜色、粗体)
元组列表(添加您想要跟踪的任何其他属性),每个元组对应一个将输出的字符。然后,您可以直接比较这些输出是否相等。这是一个让您开始的示例:
The easiest way is to convert each string into a representation of the output it would produce by simulating the device. I.e. produce a list of
(character, colour, boldness)
tuples (add any other attributes you want to track), one for each character that would be output. You can then compare these outputs directly for equality.Here's an example to start you off: