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 )