common_checks (@output);
@output = get_core_output (@output);
-my ($begin);
-for my $i (0...$#output) {
- $begin = $i, last if $output[$i] eq '(dir-lsdir) begin';
+must_contain_in_order (\@output,
+ '(dir-lsdir) open .',
+ '(dir-lsdir) isdir(.)',
+ '(dir-lsdir) close .');
+
+sub must_contain_in_order {
+ my ($output, @lines) = @_;
+ my (@line_numbers) = map (find_line ($_, @$output), @lines);
+ for my $i (0...$#lines - 1) {
+ fail "\"$lines[$i]\" follows \"$lines[$i + 1]\" in output\n"
+ if $line_numbers[$i] > $line_numbers[$i + 1];
+ }
}
-fail "\"(dir-lsdir) begin\" does not appear in output\n" if !defined $begin;
-my ($end);
-for my $i (0...$#output) {
- $end = $i, last if $output[$i] eq '(dir-lsdir) end';
+sub find_line {
+ my ($line, @output) = @_;
+ for my $i (0...$#output) {
+ return $i if $line eq $output[$i];
+ }
+ fail "\"$line\" does not appear in output\n";
}
-fail "\"(dir-lsdir) end\" does not appear in output\n" if !defined $end;
-fail "\"begin\" follows \"end\" in output\n" if $begin > $end;
my (%count);
-for my $fn (@output[$begin + 1...$end - 1]) {
- $fn =~ s/\s+$//;
+for my $fn (map (/readdir: \"([^"]+)\"/, @output)) {
fail "Unexpected file \"$fn\" in lsdir output\n"
- unless grep ($_ eq $fn, qw (. .. dir-lsdir));
+ unless grep ($_ eq $fn, qw (dir-lsdir));
fail "File \"$fn\" listed twice in lsdir output\n"
if $count{$fn};
$count{$fn}++;