2016-02-01 2 views
2

Я начал добавлять некоторые цвета и другие функции (сброс строк и т. Д.) К моему приложению и хотел бы иметь некоторые модульные тесты, описывающие поведение.Как я могу интегрировать/интегрировать тест поведения кода ANSI программы?

Я знаю, что могу утверждать, что вывод содержит соответствующие коды \e[..., но это хрупкое. Во-первых, он потерпит неудачу, если он будет заменен на \033 или иным образом реорганизован тривиальным, но не идентичным образом.

Более подробно, однако, проверка последовательности символов на самом деле не делает то, что я хочу. Я хочу утверждать или проверять, что поведение не изменилось (или даже вообще не работает в конкретной среде).

Есть ли разумный способ проверить результат escape-последовательности ANSI? Например, можно ли я программно проверить содержимое терминала/tty?

+0

Возможный дубликат [тест JUnit для System.out.println()] (http://stackoverflow.com/ вопросы/1119385/junit-test-for-system-out-println) – Ferrybig

+0

Я так не думаю. Что касается захвата вывода, я мог бы перенаправить его где-то еще до того, как он даже достигнет stdout или stderr, это не проблема. Проблема заключается в * понимании * вывода, независимо от того, как он захвачен. Написание собственного анализатора кодов ошибок может значительно снизить эффективность тестов и проверить фактический результат. – dimo414

+1

Просто идея. Вы заглянули в старую командную команду unix 'script', используемую для записи и воспроизведения сеансов терминала? – arainone

ответ

1

Да и нет: как правило, терминальные программы не предоставляют способ извлекают содержимое экрана, например, в ответ на escape-последовательность, поскольку разрешение считается неустойчивым (если вы выполняете программа, которая делает это без вашего ведома).

Однако некоторые терминальные программы позволяют печатать содержимое экрана. xterm может это сделать, например. Вы можете настроить его для печати в файл и использовать escape-последовательности для цветов и атрибутов видео, которые находятся на экране. В отличие от вашей тестовой программы, эти escape-последовательности печатаются поочередно, а не прыгают по экрану.

С manual, соответствующие ресурсы

printerCommand (class PrinterCommand)          
      Specifies a shell command to which xterm-dev will open a pipe 
      when the first MC (Media Copy) command is initiated. The 
      default is an empty string, i.e., “”. If the resource value is 
      given as an empty string, the printer is disabled. 

и

printAttributes (class PrintAttributes) 
      Specifies whether to print graphic attributes along with the 
      text. A real DEC VTxxx terminal will print the underline, 
      highlighting codes but your printer may not handle these. 

      o "0" disables the attributes. 

      o "1" prints the normal set of attributes (bold, underline, 
       inverse and blink) as VT100-style control sequences. 

      o "2" prints ANSI color attributes as well. 

      The default is "1". 
Смежные вопросы