[BACK]Return to response.t CVS log [TXT][DIR] Up to [local] / todotxt / Text-Todo-REST-API / t

File: [local] / todotxt / Text-Todo-REST-API / t / response.t (download)

Revision 1.1, Sat Jan 23 07:04:43 2010 UTC (14 years, 5 months ago) by andrew
Branch: MAIN

redo how some of this is handled to make it more unixy

#===============================================================================
#
#         FILE:  response.t
#
#  DESCRIPTION:  Test Text::Todo::REST::API::Response
#
#       AUTHOR:  Andrew Fresh (AAF), andrew@cpan.org
#      COMPANY:  Red River Communications
#      CREATED:  01/07/10 19:11
#     REVISION:  $AFresh1: response.t,v 1.1 2010/01/23 07:04:43 andrew Exp $
#===============================================================================

use strict;
use warnings;

use Test::More tests => 49;

my $class;

BEGIN {
    $class = 'Text::Todo::REST::API::Response';
    use_ok( $class, "use $class" );
}

diag("Testing $class $Text::Todo::REST::API::Response::VERSION");

my %data = (
    files => ['todo.txt'],
    list  => [ 
        { text => 'uno', md5 => 'XXX md5 of uno XXX' }, 
        { text => 'dos', md5 => 'XXX md5 of dos XXX' }, 
        { text => 'tre', md5 => 'XXX md5 of tre XXX' }, 
    ],
    entry => { text => 'ety', md5 => 'XXX md5 of ety XXX' }, 
);

my %TESTS = (
    undef => {
        undef => {},
        text  => {},
        md5   => {},
    },

    files => {
        undef => {
            result => '/^Unable to handle \[render_files\] for format \[\]/',
        },
        text => {
            result      => undef,
            data_result => "todo.txt\n"
        },
        md5 => {
            result =>
                '/^Unable to handle \[render_files\] for format \[md5\]/',
        },
    },

    list => {
        undef => {
            result => '/^Unable to handle \[render_list\] for format \[\]/',
        },
        text => {
            result      => undef,
            data_result => ( join q{}, map "$_->{text}\n", @{ $data{list} } ),
        },
        md5 => {
            result => undef,
            data_result => ( join q{},  map "MD5 ($_->{text}) = $_->{md5}\n",
                @{ $data{list} } ),
        },
    },

    entry => {
        undef => {
            result => '/^Unable to handle \[render_entry\] for format \[\]/',
        },
        text => {
            result      => undef,
            data_result => ( join q{}, map "$_->{text}\n", $data{entry} ),
        },
        md5 => {
            result => undef,
            data_result => ( join q{},  map "MD5 ($_->{text}) = $_->{md5}\n",
                $data{entry} ),
        },
    },
);

foreach my $type ( sort keys %TESTS ) {
    foreach my $format ( sort keys %{ $TESTS{$type} } ) {
        foreach my $data ( undef, $data{$type} ) {
            my $args;
            if ( $type ne 'undef' ) {
                $args->{type} = $type;
            }
            if ( $format ne 'undef' ) {
                $args->{format} = $format;
            }
            if ($data) {
                $args->{data} = $data;
            }

            my $diag = "type [$type] format [$format]";
            if ($data) {
                $diag .= ' with data';
            }

            test( $TESTS{$type}{$format}, $args, $diag );
        }
    }
}

sub test {
    my ( $test, $args, $diag ) = @_;

    if ( !exists $args->{type} ) {
        ok( !eval { $class->new($args) }, "Create $class without type" );
        like( $@, '/^option \[type\] required/', 'Got expected error' );
        return 1;
    }

    my $response = new_ok( $class, [$args] );

    my $expected = $test->{result};
    if ( $args->{data} && exists $test->{data_result} ) {
        $expected = $test->{data_result};
    }

    my $result;
    eval { $result = $response->render() };
    if ($@) {
        if (index $expected, '/') { 
            $expected = '/^$/';
        }

        like( $@, $expected, 'Got expected eval_error - ' . $diag );
    }
    else {
        is( $result, $expected, 'Got expected result - ' . $diag );
    }
    return 1;
}