#!/usr/bin/perl -Ilib/ -I../lib/ -w
#
# Test we can instantiate the known formatter-plugins, and that
# they work.
#
# Steve
# --
#
use strict;
use warnings;
use Test::More qw! no_plan !;
use Test::Exception;
#
# Load the factory
#
BEGIN {use_ok('Templer::Plugin::Factory');}
require_ok('Templer::Plugin::Factory');
#
# Load the formatter plugins.
#
BEGIN {use_ok('Templer::Plugin::HTML');}
require_ok('Templer::Plugin::HTML');
BEGIN {use_ok('Templer::Plugin::Markdown');}
require_ok('Templer::Plugin::Markdown');
BEGIN {use_ok('Templer::Plugin::Perl');}
require_ok('Templer::Plugin::Perl');
BEGIN {use_ok('Templer::Plugin::Textile');}
require_ok('Templer::Plugin::Textile');
#
# Instantiate the helper.
#
my $factory = Templer::Plugin::Factory->new();
ok( $factory, "Loaded the factory object." );
isa_ok( $factory, "Templer::Plugin::Factory" );
#
# We should have only a small number of known plugins registered.
#
my @known = $factory->formatters();
is( scalar @known, 4, "There are four known formatters" );
#
# The names are what we expect.
#
my @sorted = sort(@known);
is( $sorted[0], "html", "The first is HTML" );
is( $sorted[1], "markdown", "The second is markdown" );
is( $sorted[2], "perl", "The third is markdown" );
is( $sorted[3], "textile", "The fourth is textile" );
#
# Get the HTML plugin by name, testing that case sensitivity
# isn't important.
#
isa_ok( $factory->formatter("html"), "Templer::Plugin::HTML" );
isa_ok( $factory->formatter("HTML"), "Templer::Plugin::HTML" );
isa_ok( $factory->formatter("htML"), "Templer::Plugin::HTML" );
#
# Get the markdown plugin by name, testing that case sensitivity
# isn't important.
#
isa_ok( $factory->formatter("markdown"), "Templer::Plugin::Markdown" );
isa_ok( $factory->formatter("MARKDOWN"), "Templer::Plugin::Markdown" );
isa_ok( $factory->formatter("MARkdown"), "Templer::Plugin::Markdown" );
#
# Get the perl plugin by name, testing that case sensitivity
# isn't important.
#
isa_ok( $factory->formatter("perl"), "Templer::Plugin::Perl" );
isa_ok( $factory->formatter("PERl"), "Templer::Plugin::Perl" );
isa_ok( $factory->formatter("PERL"), "Templer::Plugin::Perl" );
#
# Get the textile plugin by name, testing that case sensitivity
# isn't important.
#
isa_ok( $factory->formatter("textile"), "Templer::Plugin::Textile" );
isa_ok( $factory->formatter("TEXTILE"), "Templer::Plugin::Textile" );
isa_ok( $factory->formatter("TEXTile"), "Templer::Plugin::Textile" );
#
# Unknown plugins are an error
#
foreach my $name (qw! fake test missing unknown !)
{
ok( !$factory->formatter($name), "Unknown plugin fails: $name" );
}
#
# Attempting to load a plugin with a missing name is an error.
#
dies_ok( sub {$factory->formatter(undef)}, "Missing plugin-name causes die()" );
dies_ok( sub {$factory->formatter("")}, "Missing plugin-name causes die()" );
#
# Input testing
#
my $input = "**STRONG** The number is {42}.";
my $h_out = $factory->formatter("html")->format($input);
my $m_out = $factory->formatter("markdown")->format($input);
my $p_out = $factory->formatter("perl")->format($input);
my $t_out = $factory->formatter("textile")->format($input);
#
# The HTML formatter won't make any changes.
#
ok( $factory->formatter("html")->available(),
"HTML Formatter is always available" );
is( $input, $h_out, "HTML formatter resulted in no changes" );
#
# Markdown
#
if ( $factory->formatter("markdown")->available() )
{
ok( $m_out =~ /strong/i, "Formatting with markdown worked" );
}
else
{
is( $input, $m_out,
"When disabled the markdown plugin didn't modify our text" );
}
#
# Perl
#
if ( $factory->formatter("perl")->available() )
{
ok( $p_out =~ / 42\./, "Formatting with perl worked" );
}
else
{
is( $input, $m_out,
"When disabled the perl plugin didn't modify our text" );
}
#
# Textile
#
if ( $factory->formatter("textile")->available() )
{
ok( $t_out =~ /class="caps"/i, "Formatting with textile worked" );
}
else
{
is( $input, $t_out,
"When disabled the textile plugin didn't modify our text" );
}