The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w
#=============================================================================
# test02_read.t         lpOD-Perl installation test     2012-02-21T09:37:57
#=============================================================================
use 5.010_000;
use strict;
use Test;
BEGIN   { plan tests => 19 }

use ODF::lpOD;

#--- test parameters ---------------------------------------------------------

our $filename   = $ARGV[0] // "lpod_test.odt";
our $title      = "lpOD test";
our $subject    = "lpOD generated test document";

our %desc = (
        "lpOD version"                  => $ODF::lpOD::VERSION,
        "lpOD build"                    => ODF::lpOD->PACKAGE_DATE,
        "lpOD installation path"        => lpod->installation_path,
        "XML::Twig version"             => $XML::Twig::VERSION,
        "Archive::Zip version"          => $Archive::Zip::VERSION,
        "Perl version"                  => $],
        "Platform"                      => $^O
        );

lpod->debug(TRUE);
my $elt;

#--- document initialization -------------------------------------------------

# Document access check
my $doc = odf_get_document($filename)
        or die "# Document initialisation failure. Stopped";
ok($doc && $doc->isa(odf_document));

# Document body access check
my $context = $doc->get_body;
ok($context && $context->isa(odf_element));

# Metadata access check
my $meta = $doc->get_part(META);
ok($meta && $meta->isa(odf_xmlpart));

# Styles context access check
my $styles = $doc->get_part(STYLES);
ok($styles && $styles->isa(odf_xmlpart));

#--- metadata settings -------------------------------------------------------

# Generator signature check
ok($meta->get_generator(), scalar lpod->info);
# Document title check
ok($meta->get_title(), $title);
# Document subject check
ok($meta->get_subject(), $subject);
# User field check
ok($meta->get_user_field("Project name"), "lpOD");
# Document keyword check
ok($meta->check_keyword("ODF"));

#--- style definitions -------------------------------------------------------

# Basic paragraph style check
$elt = $doc->get_style('paragraph', "Basic");
ok($elt && $elt->isa(odf_paragraph_style));

#--- table style definition --------------------------------------------------

# Table style check
$elt = $doc->get_style('table', "Environment");
ok($elt && $elt->isa(odf_table_style));

#--- page style definition ---------------------------------------------------

# Page layout check
$elt = $doc->get_style('page layout', "StdLayout");
ok($elt && $elt->isa(odf_page_layout));

# Master page check
$elt = $doc->get_style('master page', "StdMaster");
ok($elt && $elt->isa(odf_master_page));

# Frame check
$elt = $elt->get_frame("Logo");
ok($elt && $elt->isa(odf_frame));

# Frame title check
ok($elt->get_title(), "OASIS ODF logo");

#--- bookmark retrieval ------------------------------------------------------

# Paragraph retrieval by bookmark
$elt = $context->get_paragraph_by_bookmark("Announce");
ok($elt && $elt->isa(odf_paragraph));

#--- table retrieval ---------------------------------------------------------

# Table retrieval check
my $tbl = $context->get_table("Environment");
ok($tbl && $tbl->isa(odf_table));

# Table size check
my ($l, $w) = $tbl->get_size;
ok($l == scalar keys %desc && $w == 2);

# Table content check
$elt = TRUE;
for (my $i = 0 ; $i < $l ; $i++) {
        my $k = $tbl->get_cell($i, 0)->get_text;
        my $v = $tbl->get_cell($i, 1)->get_text;
        unless ($v eq $desc{$k})
                {
                alert "# Error: Unexpected value in table row $i";
                $elt = FALSE;
                }
        }
ok($elt);

#--- end ---------------------------------------------------------------------

exit 0;

#=== END =====================================================================