#===============================================================================
#
#         FILE:  special_tags.t
#
#  DESCRIPTION:  Test special tags
#
#       AUTHOR:  Andrew Fresh (AAF), andrew@cpan.org
#      COMPANY:  Red River Communications
#      CREATED:  01/09//10 17:43
#     REVISION:  $AFresh1: special_tags.t,v 1.7 2010/02/14 00:50:56 andrew Exp $
#===============================================================================

use strict;
use warnings;

use Test::More tests => 30;

my $class;
BEGIN { 
	$class = 'Text::Todo::Entry';
	use_ok( $class, "use $class" ) 
}

diag("Testing special tags in $class $Text::Todo::Entry::VERSION");

my %sample = (
    text     => '(B) @home @work send email to mailto:andrew@cpan.org DUE:2011-01-01 +say_thanks',

    known_tags => {
        context => '@',
        project => '+',
        due_date => 'DUE:',
    },

    extra_tags => { 'email' => 'mailto:' },

    priority  => 'B',
    contexts  => [ 'home', 'work' ],
    projects  => ['say_thanks'],
    due_dates => ['2011-01-01'],
    emails    => ['andrew@cpan.org'],
);

my $e = new_ok($class, [ {text => $sample{text}, tags => { due_date => 'DUE:' }} ]);

is( $e->text,     $sample{text},     'Make sure entry matches' );
is( $e->priority, $sample{priority}, 'check priority' );

my $known_tags = $sample{known_tags};
check_tags($e, $known_tags);

foreach my $key (keys %{ $sample{extra_tags} }) {
    ok( $e->learn_tag( $key, $sample{extra_tags}{$key} ), "Learn tag [$key]");
    $known_tags->{ $key } = $sample{extra_tags}{$key};
}
check_tags($e, $known_tags);

#done_testing();

sub check_tags {
    my ($e, $known_tags) = @_;

    is_deeply( $e->known_tags, $known_tags, 'check known_tags' );
    
    foreach my $key (keys %{ $known_tags }) {
        my $t = $key . 's';
        my $in = 'in_' . $key;

        is_deeply( [ $e->$t ], $sample{$t}, "check [$t]" );

        ok( !$e->$in(''), "check not [$in]");

        foreach my $value (@{ $sample{$t} }) {
            ok( $e->$in($value), "check [$in] [$value]");
        }
    }
}
