AI-Prolog
view release on metacpan or search on metacpan
t/40parser.t view on Meta::CPAN
#!/usr/bin/perl
# '$Id: 40parser.t,v 1.6 2005/08/06 23:28:40 ovid Exp $';
use warnings;
use strict;
use Test::More;
BEGIN {
eval 'use Test::MockModule';
if ($@) {
plan skip_all => 'Test::MockModule required for this';
} else {
plan tests => 76;
}
}
#use Test::More 'no_plan';
my $CLASS;
BEGIN
{
chdir 't' if -d 't';
unshift @INC => '../lib';
$CLASS = 'AI::Prolog::Parser';
use_ok($CLASS) or die;
}
# I hate the fact that they're interdependent. That brings a
# chicken and egg problem to squashing bugs.
use aliased 'AI::Prolog::KnowledgeBase';
use aliased 'AI::Prolog::TermList';
use aliased 'AI::Prolog::Term';
can_ok $CLASS, 'new';
ok my $parser = $CLASS->new('p(x)'), '...and calling new with a string should succeed';
isa_ok $parser, $CLASS, '... and the object it returns';
can_ok $parser, '_str';
is $parser->_str, 'p(x)', '... and it should return the string we created the parser with.';
can_ok $parser, '_posn';
is $parser->_posn, 0,
'... and it should return the current position of where we are parsing the string';
can_ok $parser, '_start';
is $parser->_start, 0, '... and it should return the current starting point in the string';
can_ok $parser, '_varnum';
is $parser->_varnum, 0, '... and it should return the current variable number';
can_ok $parser, '_vardict';
is_deeply $parser->_vardict, {}, '... and it should be empty.';
can_ok $parser, 'to_string';
is $parser->to_string, '{ ^ p(x) | {} }',
'... and it should show the parser string, the position in the string and an empty vardict';
$parser = $CLASS->new(' p(x)');
can_ok $parser, 'current';
is $parser->current, ' ', '... and it should return the current character the parser is pointing at';
can_ok $parser, 'advance';
$parser->advance;
is $parser->_posn, 1, '... and calling advance will move the parser forward one character';
can_ok $parser, 'skipspace';
$parser->skipspace;
is $parser->current, 'p', '... and calling skipspace will move the parser to the next non-whitespace character';
is $parser->_start, 0, '... and it will not change the starting position';
is $parser->_posn, 3, '... but the position will indicate the new position';
can_ok $parser, 'peek';
( run in 0.824 second using v1.01-cache-2.11-cpan-39bf76dae61 )