#! /usr/bin/env perl

use strict;
use warnings;

use Test::More;

use Tapper::TAP::Harness;
use File::Slurp 'slurp';
use Data::Dumper;
use TAP::DOM;

my $tap = slurp ("t/tap-archive-3-with-empty.tgz");

# ============================================================

my $harness = Tapper::TAP::Harness->new( tap => $tap, tap_is_archive => 1 );

$harness->evaluate_report();
#diag(Dumper($harness->parsed_report->{tap_sections}));

is(scalar @{$harness->parsed_report->{tap_sections}}, 5, "count sections");

my $first_section = $harness->parsed_report->{tap_sections}->[0];
my $last_section = $harness->parsed_report->{tap_sections}->[-1];

# ============================================================

#diag Dumper();
my $dom = TAP::DOM->new( tap => "TAP Version 13\n".$harness->parsed_report->{tap_sections}->[3]->{raw} );
#diag(Dumper($dom));
is($dom->{tests_run}, 3, "section 3 tests run");
ok($dom->{is_good_plan}, "section 3 good plan");

# ============================================================

is($harness->parsed_report->{report_meta}{'suite-name'},    'Tapper-Test',       "report meta suite name");
is($harness->parsed_report->{report_meta}{'suite-version'}, '2.010012',           "report meta suite version");
is($harness->parsed_report->{report_meta}{'suite-type'},    'software',           "report meta suite type");
is($harness->parsed_report->{report_meta}{'machine-name'},  'ss5-netbook',        "report meta machine name");
is($harness->parsed_report->{report_meta}{'starttime-test-program'}, 'Thu, 28 Oct 2010 16:13:27 +0200', "report meta starttime test program");

is($first_section->{section_name},'t/00-tapper-meta.t', "first section name");

is($first_section->{section_meta}{'suite-name'},             'Tapper-Test',                                                            "report meta suite name");
is($first_section->{section_meta}{'suite-version'},          '2.010012',                                                           "report meta suite version");
is($first_section->{section_meta}{'suite-type'},             'software',                                                           "report meta suite type");
is($first_section->{section_meta}{'language-description'},   'Perl 5.012001, /home/ss5/perl5/perlbrew/perls/perl-5.12.1/bin/perl', "report meta language description");
is($first_section->{section_meta}{'uname'}, 'Linux ss5-netbook 2.6.31-21-generic #59-Ubuntu SMP Wed Mar 24 07:28:56 UTC 2010 i686 GNU/Linux', "report meta uname");
is($first_section->{section_meta}{'osname'},                 'Ubuntu 10.10',                                                       "report meta osname");
is($first_section->{section_meta}{'cpuinfo'},                '2 cores [Intel(R) Atom(TM) CPU N270   @ 1.60GHz]',                   "report meta cpuinfo");
is($first_section->{section_meta}{'ram'},                    '993MB',                                                              "report meta ram");

is($first_section->{db_section_meta}{'language_description'},   'Perl 5.012001, /home/ss5/perl5/perlbrew/perls/perl-5.12.1/bin/perl', "db meta language description");
is($first_section->{db_section_meta}{'uname'},                  'Linux ss5-netbook 2.6.31-21-generic #59-Ubuntu SMP Wed Mar 24 07:28:56 UTC 2010 i686 GNU/Linux', "db meta uname");
is($first_section->{db_section_meta}{'osname'},                 'Ubuntu 10.10',                                                       "db meta osname");
is($first_section->{db_section_meta}{'cpuinfo'},                '2 cores [Intel(R) Atom(TM) CPU N270   @ 1.60GHz]',                   "db meta cpuinfo");
is($first_section->{db_section_meta}{'ram'},                    '993MB',                                                              "db meta ram");


# ============================================================

# empty tap

is($last_section->{section_name},'t/zero_size.t', "last section name");

my @expected_lines = split("\n", $TAP::DOM::noempty_tap);
my $i = 1;
for my $el (@expected_lines) {
  # There might be more auto-generated lines in it, like "TAP version # 13"
  # for which we don't check.
  like($last_section->{raw}, qr/\Q$el\E/,  "last section expected replacement line ".$i++);
  diag "expected line: $el";
}

done_testing;