Markdown-Compiler
view release on metacpan or search on metacpan
lib/Markdown/Compiler/Test.pm view on Meta::CPAN
package Markdown::Compiler::Test;
use warnings;
use strict;
use Test::More;
use Test::Deep;
use Test::Differences;
use Import::Into;
use Exporter;
use Markdown::Compiler;
use Markdown::Compiler::Lexer;
use Markdown::Compiler::Parser;
use Markdown::Compiler::Target::HTML;
use Data::Dumper::Concise;
push our @ISA, qw( Exporter );
push our @EXPORT, qw( build_and_test _test_dump_lexer _test_dump_parser _test_dump_html );
sub import {
shift->export_to_level(1);
my $target = caller;
warnings->import::into($target);
strict->import::into($target);
Test::More->import::into($target);
Test::Deep->import::into($target);
}
# build_and_test
#
# source can be:
# 1. string ->
# 2. hash ->
# 3. code ->
#
# expect can be:
# code_name => arguments ( &_test_run_$code_name($compiler,$arguments) )
sub build_and_test {
my ( $name, $source, $expects ) = @_;
my ( undef, $file, $line ) = caller;
if ( ref($source) and ( ref($source) ne 'CODE' or ref($source) ne 'HASH' ) ) {
die "Error: Invalid type for \$source @ $file:$line. Must be HASH, CODE or plain string.\n";
}
my $compiler = ref($source) eq 'HASH'
? Markdown::Compiler->new( %{$source} )
: ref($source) eq 'CODE'
? $source->()
: Markdown::Compiler->new( source => $source );
foreach my $expect ( @{$expects} ) {
my $method_name = shift @{$expect};
my $test = __PACKAGE__->can( "_test_run_$method_name" )
or die "Invalid test function: $method_name @ $file:$line\n";
$test->($compiler, $name, $file, $line, @{$expect});
}
return $compiler;
}
sub _test_run_dump_lexer {
my ( $compiler, $name, $file, $line, @args ) = @_;
( run in 2.939 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )