#!perl

use 5.010;
use strict;
use warnings;

use FindBin '$Bin';
use lib $Bin, "$Bin/t";

use Org::Parser;
use Test::More 0.96;
require "testlib.pl";

test_parse(
    name => 'non-table (missing extra character)',
    filter_elements => 'Org::Element::Table',
    doc  => <<'_',
|
_
    num => 0,
);

test_parse(
    name => 'table basic tests',
    filter_elements => 'Org::Element::Table',
    doc  => <<'_',
#+CAPTION: test caption
#+LABEL: tbl:test
| a | b   | c |
|---+-----+---|
| 1 |     | 2 |
| 3 | abc | 4 |
| one <2011-03-17 > three
_
    num  => 1,
    test_after_parse => sub {
        my %args = @_;
        my $doc = $args{result};
        my $elems = $args{elements};
        my $t = $elems->[0];
        my ($r1, $r2, $r3, $r4, $r5) = @{ $t->children };
        isa_ok($r1, "Org::Element::TableRow");
        isa_ok($r2, "Org::Element::TableHLine");
        isa_ok($r3, "Org::Element::TableRow");
        isa_ok($r4, "Org::Element::TableRow");

        my $c1a = $r1->children->[0];
        isa_ok($c1a, "Org::Element::TableCell");
        isa_ok($c1a->children->[0], "Org::Element::Text");

        is($c1a->as_string, "a", "first cell's as_string");
        is($r1->as_string, "|a|b|c\n", "first row's as_string");

        # test inline elements inside cell
        my $c5a = $r5->children->[0];
        isa_ok($c5a->children->[0], "Org::Element::Text");
        isa_ok($c5a->children->[1], "Org::Element::Timestamp");
        isa_ok($c5a->children->[2], "Org::Element::Text");

        is($t->row_count, 4, "row_count() method");
        is($t->column_count, 3, "column_count() method");
        isa_ok($t->rows->[0], "Org::Element::TableRow");
        isa_ok($t->rows->[0]->cells->[0], 'Org::Element::TableCell');

        is_deeply($r1->as_array, ["a", "b", "c"], "row's as_array() method")
            or diag explain $r1->as_array;
        is_deeply($t->as_aoa,
                  [["a", "b", "c"],
                   [1, '', 2],
                   [3, "abc", 4],
                   ["one <2011-03-17 > three"]],
                  "table's as_aoa() method")
            or diag explain $t->as_aoa;
    },
);

done_testing();