12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- #!/usr/bin/perl
- use strict;
- use warnings;
- ################################################################################
- # A sub-class of Fcm::Interactive::InputGetter for testing
- {
- package TestInputGetter;
- use base qw{Fcm::Interactive::InputGetter};
- ############################################################################
- # A callback for testing
- sub get_callback {
- my ($self) = @_;
- return $self->{callback};
- }
- ############################################################################
- # Returns some pre-defined strings
- sub invoke {
- my ($self) = @_;
- $self->get_callback()->(
- $self->get_title(),
- $self->get_message(),
- $self->get_type(),
- $self->get_default(),
- );
- return 'answer';
- }
- }
- use Test::More qw{no_plan};
- main();
- sub main {
- use_ok('Fcm::Interactive');
- test_default_impl();
- test_set_impl();
- test_get_input();
- }
- ################################################################################
- # Tests default setting of input getter implementation
- sub test_default_impl {
- my $prefix = 'default impl';
- my ($class_name, $class_options_ref) = Fcm::Interactive::get_default_impl();
- is($class_name, 'Fcm::Interactive::InputGetter::CLI', "$prefix: class name");
- is_deeply($class_options_ref, {}, "$prefix: class options");
- }
- ################################################################################
- # Tests setting the input getter implementation
- sub test_set_impl {
- my $prefix = 'set impl';
- my %options = (extra => 'extra-value');
- my $name = 'TestInputGetter';
- Fcm::Interactive::set_impl($name, \%options);
- my ($class_name, $class_options_ref) = Fcm::Interactive::get_impl();
- is($class_name, $name, "$prefix: class name");
- is_deeply($class_options_ref, \%options, "$prefix: class options");
- }
- ################################################################################
- # Tests getting input with test input getter
- sub test_get_input {
- my $prefix = 'get input';
- my %EXPECTED = (
- TITLE => 'title-value',
- MESSAGE => 'message-value',
- TYPE => 'type-value',
- DEFAULT => 'default-value',
- ANSWER => 'answer',
- );
- Fcm::Interactive::set_impl('TestInputGetter', {
- callback => sub {
- my ($title, $message, $type, $default) = @_;
- is($title, $EXPECTED{TITLE}, "$prefix: title");
- is($message, $EXPECTED{MESSAGE}, "$prefix: message");
- is($type, $EXPECTED{TYPE}, "$prefix: type");
- is($default, $EXPECTED{DEFAULT}, "$prefix: default");
- },
- });
- my $ans = Fcm::Interactive::get_input(
- title => $EXPECTED{TITLE},
- message => $EXPECTED{MESSAGE},
- type => $EXPECTED{TYPE},
- default => $EXPECTED{DEFAULT},
- );
- is($ans, $EXPECTED{ANSWER}, "$prefix: answer");
- }
- __END__
|