diff options
author | chromatic <chromatic@wgz.org> | 2001-09-08 13:33:42 -0600 |
---|---|---|
committer | Jarkko Hietaniemi <jhi@iki.fi> | 2001-09-09 13:16:43 +0000 |
commit | bbd9de80171ea0fa05dd6f3d3ca2dd7f725ba05c (patch) | |
tree | 5c7bd20bbf3c399f6b5e773e4fbada3b722057ed /lib/Term | |
parent | 9dc10e63ca59281e54002455d90c80f35b788b04 (diff) | |
download | perl-bbd9de80171ea0fa05dd6f3d3ca2dd7f725ba05c.tar.gz |
Add Test for Term::Complete
Message-ID: <20010909013810.11522.qmail@onion.perl.org>
p4raw-id: //depot/perl@11959
Diffstat (limited to 'lib/Term')
-rw-r--r-- | lib/Term/Complete.t | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/lib/Term/Complete.t b/lib/Term/Complete.t new file mode 100644 index 0000000000..ff62d1d871 --- /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; +} |