The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use v6-alpha;
use Test;

plan 3;

use Test::Builder::Output;

my $output       = open('output',       :w);
my $error_output = open('error_output', :w);

my $tbo = Test::Builder::Output.new(
    output       => $output,
    error_output => $error_output,    
);

is( $tbo.WHAT, ::Test::Builder::Output,
    'new() should return a Test::Builder::Output instance' );

$tbo.write('ok 1');
$tbo.write('ok 2');
$tbo.write("ok 3\ntesting");

$output.close();

my $output_output = slurp('output');
is( $output_output, "ok 1\nok 2\nok 3\n# testing\n",
    'write() should write to normal output, escaping newlines' );

$tbo.diag('this is error output');
$tbo.diag("this is error output\nover two lines");

$error_output.close();

my $error_output_output = slurp('error_output');
is($error_output_output, 
"# this is error output
# this is error output
# over two lines\n",
    'diag() should write to error output, escaping all output' );

END
{
    unlink( 'output' );
    unlink( 'error_output' );
}