使用curses测试输出

时间:2015-03-08 02:44:32

标签: ruby rspec curses

我试图使用rspec为我的简单othello应用程序使用curses进行测试。我需要确保终端打印输出如下:

enter image description here

为了使输出更具交互性,我使用了curses。当我检查输出时,它给了我一个ANSI序列代码的组合(我猜):

[?1049h[1;23r(B[m[4l[?7h[?1h=[39;49m[?1h=[39;49m(B[m[H[2J[4;43H(B[0;1m[32m
┌───┬───┬───┬───┬───┬───┬───┬───┐[5;43H
│   │   │   │   │   │   │   │   │[6;43H
├───┼───┼───┼───┼───┼───┼───┼───┤[7;43H
│   │   │   │   │   │   │   │   │[8;43H
├───┼───┼───┼───┼───┼───┼───┼───┤[9;43H
│   │   │   │   │   │   │   │   │[10;43H
├───┼───┼───┼───┼───┼───┼───┼───┤[11;43H
│   │   │   │   │   │   │   │   │[12;43H
├───┼───┼───┼───┼───┼───┼───┼───┤[13;43H
│   │   │   │   │   │   │   │   │[14;43H
├───┼───┼───┼───┼───┼───┼───┼───┤[15;43H
│   │   │   │   │   │   │   │   │[16;43H
├───┼───┼───┼───┼───┼───┼───┼───┤[17;43H
│   │   │   │   │   │   │   │   │[18;43H
├───┼───┼───┼───┼───┼───┼───┼───┤[19;43H
│   │   │   │   │   │   │   │   │[20;43H
└───┴───┴───┴───┴───┴───┴───┴───┘[39m(B[m[20;43H[?[23;1H[?1049l[?1l>

如何测试结果是否如此?

1 个答案:

答案 0 :(得分:2)

您可以将curses应用程序的输出重定向到标准输出,因为这是initscr的默认值(如果应用程序不要求输入,则会有帮助)。如果将输出捕获到文件中,则可以进行所需的任何分析。

对于给出的简单示例,curses正在绘制一次屏幕,使用ANSI转义序列进行光标移动(以“H”结尾的部分),颜色(带有“m”的部分)以及其他几个。

我说简单 - 如果屏幕上有大的空白区域,那么诅咒会跳过那些,而没有转义序列的残留看起来就像实际屏幕一样。但是由于你的线条很接近,所以只需要根据需要用一些空格来编写文本就不那么昂贵了。

如果您仅限于这样的简单示例,那么您需要做的就是去除转义序列并比较文本。对于更通用的方法,您可以考虑使用winnstr创建一个屏幕转储实用程序(以便您的应用程序可以在屏幕显示时从屏幕上转储文本)。