From: chromatic Date: Sat, 8 Sep 2001 19:33:42 +0000 (-0600) Subject: Add Test for Term::Complete X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=bbd9de80171ea0fa05dd6f3d3ca2dd7f725ba05c;p=p5sagit%2Fp5-mst-13.2.git Add Test for Term::Complete Message-ID: <20010909013810.11522.qmail@onion.perl.org> p4raw-id: //depot/perl@11959 --- diff --git a/MANIFEST b/MANIFEST index 1806ad0..60fa6f7 100644 --- a/MANIFEST +++ b/MANIFEST @@ -1124,6 +1124,7 @@ lib/Term/ANSIColor/README Term::ANSIColor lib/Term/ANSIColor/test.pl See if Term::ANSIColor works lib/Term/Cap.pm Perl module supporting termcap usage lib/Term/Complete.pm A command completion subroutine +lib/Term/Complete.t See if Term::Complete works lib/Term/ReadLine.pm Stub readline library lib/termcap.pl Perl library supporting termcap usage lib/Test.pm A simple framework for writing test scripts diff --git a/lib/Term/Complete.t b/lib/Term/Complete.t new file mode 100644 index 0000000..ff62d1d --- /dev/null +++ b/lib/Term/Complete.t @@ -0,0 +1,101 @@ +#!./perl + +BEGIN { + chdir 't' unless -d 't'; + @INC = '../lib'; +} + +use warnings; +use Test::More tests => 8; +use vars qw( $Term::Complete::complete $complete ); + +use_ok( 'Term::Complete' ); + +*complete = \$Term::Complete::complete; + +my $in = tie *STDIN, 'FakeIn', "fro\t"; +my $out = tie *STDOUT, 'FakeOut'; +my @words = ( 'frobnitz', 'frobozz', 'frostychocolatemilkshakes' ); + +Complete('', \@words); +my $data = get_expected('fro', @words); + +# there should be an \a after our word +like( $$out, qr/fro\a/, 'found bell character' ); + +# now remove the \a -- there should be only one +is( $out->scrub(), 1, '(single) bell removed'); + +# 'fro' should match all three words +like( $$out, qr/$data/, 'all three words possible' ); +$out->clear(); + +# should only find 'frobnitz' and 'frobozz' +$in->add('frob'); +Complete('', @words); +$out->scrub(); +is( $$out, get_expected('frob', 'frobnitz', 'frobozz'), 'expected frob*' ); +$out->clear(); + +# should only do 'frobozz' +$in->add('frobo'); +Complete('', @words); +$out->scrub(); +is( $$out, get_expected( 'frobo', 'frobozz' ), 'only frobozz possible' ); +$out->clear(); + +# change the completion character +$complete = "!"; +$in->add('frobn'); +Complete('prompt:', @words); +$out->scrub(); +like( $$out, qr/prompt:frobn/, 'prompt is okay' ); + +# now remove the prompt and we should be okay +$$out =~ s/prompt://g; +is( $$out, get_expected('frobn', 'frobnitz' ), 'works with new $complete' ); + +# easier than matching space characters +sub get_expected { + my $word = shift; + return join('.', $word, @_, $word, '.'); +} + +package FakeIn; + +sub TIEHANDLE { + my ($class, $text) = @_; + $text .= "$main::complete\025"; + bless(\$text, $class); +} + +sub add { + my ($self, $text) = @_; + $$self = $text . "$main::complete\025"; +} + +sub GETC { + my $self = shift; + return length $$self ? substr($$self, 0, 1, '') : "\r"; +} + +package FakeOut; + +sub TIEHANDLE { + bless(\(my $text), $_[0]); +} + +sub clear { + ${ $_[0] } = ''; +} + +# remove the bell character +sub scrub { + ${ $_[0] } =~ tr/\a//d; +} + +# must shift off self +sub PRINT { + my $self = shift; + ($$self .= join('', @_)) =~ s/\s+/./gm; +}