+ is_deeply([split /\n/, qx(cat $infile1 | $valgrind_cmd$program none/none)], [split /\n/, $text], 'text read from stdin');
+ is_deeply([split /\n/, qx($valgrind_cmd$program none/none $infile1)], [split /\n/, $text], 'text read from file');
+
+ {
+ my @fg_colors = (30..37, 39);
+ my @bg_colors = (40..47, 49);
+
+ my @bold_colors = map "1;$_", @fg_colors;
+
+ my @values = (@fg_colors, @bg_colors, @bold_colors, 0);
+
+ my $ok = true;
+ foreach my $value (@values) {
+ $ok &= qx(printf %s "\e[${value}m" | $valgrind_cmd$program --clean) eq '';
+ }
+ ok($ok, 'clean color sequences');
+ }
+
+ my $check_clean = sub
+ {
+ my ($type) = @_;
+
+ my $switch = "--$type";
+
+ is(qx(printf %s "\e[35mhello\e[0m \e[36mworld\e[0m" | $valgrind_cmd$program $switch), 'hello world', "$type colored words");
+ is(qx(printf %s "hello world" | $program Magenta | $valgrind_cmd$program $switch), 'hello world', "$type colored line");
+ is_deeply([split /\n/, qx($program cyan $infile1 | $valgrind_cmd$program $switch)], [split /\n/, $text], "$type colored text");
+
+ {
+ my @attrs = qw(bold underscore blink reverse concealed);
+
+ my $ok = true;
+ foreach my $attr (@attrs) {
+ $ok &= qx(printf %s "$attr" | $program green --attr=$attr | $valgrind_cmd$program $switch) eq $attr;
+ }
+ ok($ok, "$type attribute");
+
+ my $attrs = join ',', @attrs;
+ is(qx(printf %s "$attrs" | $program green --attr=$attrs | $valgrind_cmd$program $switch), $attrs, "$type attributes");
+ }
+
+ ok(qx(printf %s "\e[\e[33m" | $valgrind_cmd$program $switch) eq "\e[", "$type with invalid sequence");
+ };
+
+ $check_clean->($_) foreach qw(clean clean-all);
+
+ is(qx(printf %s "\e[4munderline\e[24m" | $valgrind_cmd$program --clean-all), 'underline', 'clean-all color sequences');
+
+ my $check_clean_buf = sub
+ {
+ my ($program_buf, $type) = @_;
+
+ my $switch = "--$type";
+
+ # Check that line chunks are printed when cleaning text without sequences
+ my $short_text = 'Linux dev 2.6.32-5-openvz-686 #1 SMP Sun Sep 23 11:40:07 UTC 2012 i686 GNU/Linux';
+ is(qx(printf %s "$short_text" | $valgrind_cmd$program_buf $switch), $short_text, "print ${\length $short_text} bytes (BUF_SIZE=$BUF_SIZE{short}, $type)");
+ };
+
+ SKIP: {
+ my $program_buf = tmpnam();
+ skip 'compiling failed (short buffer)', 2 unless system("$compiler -DTEST -DBUF_SIZE=$BUF_SIZE{short} -o $program_buf $source") == 0;
+ $check_clean_buf->($program_buf, $_) foreach qw(clean clean-all);
+ unlink $program_buf;
+ }