#!/usr/bin/perl use warnings; use strict; use Test::More; use Carp::Assert qw( assert ); use Path::Class qw( file ); use Encode qw( decode ); use XML::LibXML; use Daizu; use Daizu::Test qw( init_tests ); init_tests(9); my $cms = Daizu->new($Daizu::Test::TEST_CONFIG); my $live_wc = $cms->live_wc; # Daizu::Plugin::HeaderAnchor { my $filter = bless {}, 'Daizu::Plugin::HeaderAnchor'; my $input = read_xml('HeaderAnchor-input.xml'); my $art = $filter->filter_article(undef, undef, $input); assert(defined $art); isa_ok($art, 'HASH', 'HeaderAnchor'); is(scalar(keys %$art), 1, 'HeaderAnchor: only content returned'); isa_ok($art->{content}, 'XML::LibXML::Document', 'HeaderAnchor: content'); my $got = $art->{content}->documentElement->toStringC14N . "\n"; my $expected = read_file('HeaderAnchor-expected.xml'); $expected = decode('UTF-8', $expected, Encode::FB_CROAK); is($got, $expected, 'HeaderAnchor: correct output'); } # Daizu::Plugin::ImageMetadata { # First test with images found in a normal HTML article. The actual # content of these articles I'm testing with are faked up so that I don't # have to bother adding the elements to the test repository. my $file = $live_wc->file_at_path('foo.com/_index.html'); assert(defined $file); my $input = read_xml('ImageMetadata-input-1.xml'); my $filter = bless {}, 'Daizu::Plugin::ImageMetadata'; my $art = $filter->filter_article($cms, $file, $input); assert(defined $art); isa_ok($art, 'HASH', 'ImageMetadata'); is(scalar(keys %$art), 1, 'ImageMetadata: only content returned'); isa_ok($art->{content}, 'XML::LibXML::Document', 'ImageMetadata: content'); my $got = $art->{content}->documentElement->toStringC14N . "\n"; my $expected = read_file('ImageMetadata-expected-1.xml'); $expected = decode('UTF-8', $expected, Encode::FB_CROAK); is($got, $expected, 'ImageMetadata: correct output'); # Same tests, but with different content and using a PictureArticle file. # This is slightly different because the 'dc:title' and 'dc:description' # properties are assumed to already be used in the article, and so # shouldn't also be added to the element. $file = $live_wc->file_at_path('foo.com/blog/2005/photos/wasp-on-holly-leaf.jpg'); assert(defined $file); $input = read_xml('ImageMetadata-input-2.xml'); $art = $filter->filter_article($cms, $file, $input); assert(defined $art); $got = $art->{content}->documentElement->toStringC14N . "\n"; $expected = read_file('ImageMetadata-expected-2.xml'); $expected = decode('UTF-8', $expected, Encode::FB_CROAK); is($got, $expected, 'ImageMetadata, on PictureArticle file: correct output'); } sub test_filename { file(qw( t data 27articlefilter ), @_) } # TODO perhaps some stuff like this should be moved to Daizu::Test sub read_file { my ($test_file) = @_; open my $fh, '<', test_filename($test_file) or die "error: $!"; binmode $fh or die "error reading file '$test_file' in binary mode: $!"; local $/; return <$fh>; } sub read_xml { my $input = read_file(@_); return XML::LibXML->new->parse_string($input); } # vi:ts=4 sw=4 expandtab filetype=perl