I think it would be really nice for failed, todo, and skipped tests to
log their $expected and $got values, with any $desc or $context
information to a log file (probably test.log).

I also think it would be very nice to be able to use other operators,
such as gt, lt, or isa.

  is($got, $expected, $desc, operator => 'gt');

Or something like that.

Anyway, I was just trying to implement logging to a file, first.  But I
keep running into errors.  At this point, I don't know if it is my bad
perl6 or pugs sand pits.

This is the error I am getting:

  $ pugs -c ext/Test/lib/Test.pm
  *** Error:
  unexpected "s"
  expecting adverb, term postfix, operator, postfix conditional, ternary 
conditional, ";", "}" or end of input
    at ext/Test/lib/Test.pm at line 105, column 1

A gentle prod in the right direction would be appreciated.
The line 105 refers to the 'sub write_log' line.

This is what I'm trying to add to Test.pm:

my $log_file = '';

sub log_file (Str $filename) returns Str is export {
    $log_file = $filename;
    return $log_file;
}

sub write_log (+$got, +$expected, Str +$desc, Str +$errstr, Str +$context, Str 
+$operator = 'eq') returns Bool {
    # return 0 but true unless $log_file; # not yet implemented
    return 1 unless $log_file;
    # until we have 'given'/'when'
    my $status = 'FAILED';
    if (index($?CALLER::CALLER::SUBNAME, 'todo') >= 0) {
        $status = 'TODO';
    } elsif (index($?CALLER::CALLER::SUBNAME, 'skip') >= 0) {
        $status = 'SKIPPED';
    }
    if (my $out = open(">>$log_file")) {
        $out.say $?CALLER::CALLER::FILE ~ " $loop $status";
        $out.say $desc if $desc;
        $out.say $errstr if $errstr;
        $out.say $context if $context;
        $out.say '### Expected ###';
        $out.say $expected;
        $out.say '### Actual Results ###';
        $out.say $got, "\n";
        $out.close;
        return 1;
    }
    return 0;
}

Thank you,

-kolibrie

Reply via email to