#!/usr/bin/perl -w use strict; use warnings; use Test::More 'no_plan'; use FindBin qw($Bin); use lib "$Bin/../lib"; use_ok( 'Gtk2' ); use_ok( 'Gtk2::Ex::TimeEntry' ); my $entry = Gtk2::Ex::TimeEntry->new; ok( defined $entry, qq[widget created] ); my @test_times = ( ['12:00:00' , '12:00:00', '12:00 PM'], ['12:00' , '12:00:00', '12:00 PM'], ['12' , '12:00:00', '12:00 PM'], ['123000' , '12:30:00', '12:30 PM'], ['1230' , '12:30:00', '12:30 PM'], ['013000' , '01:30:00', '01:30 AM'], ['0130' , '01:30:00', '01:30 AM'], ['130' , '01:30:00', '01:30 AM'], ['01:00:00' , '01:00:00', '01:00 AM'], ['1:00:00' , '01:00:00', '01:00 AM'], ['01:00' , '01:00:00', '01:00 AM'], ['1:00' , '01:00:00', '01:00 AM'], ['1:00 am' , '01:00:00', '01:00 AM'], ['1:00 pm' , '13:00:00', '01:00 PM'], ['1pm' , '13:00:00', '01:00 PM'], ['1am' , '01:00:00', '01:00 AM'], ['invalid' , '' , '' ], ['' , '' , '' ], [undef , '' , '' ], ); for( @test_times ) { no warnings; # test the parsing of input $entry = Gtk2::Ex::TimeEntry->new; is( $entry->_parse_input($_->[0]), $_->[1], qq[parse input: $_->[0]]); # test the setting of the value $entry = Gtk2::Ex::TimeEntry->new; $entry->set_value($_->[0]); is ($entry->get_value, $_->[1], qq[set value: $_->[0]] ); is ($entry->get_text , $_->[2], qq[test output: $_->[1]]); } # selecting component my @select_tests = ( [qw/hours hours /], [qw/minutes minutes /], [qw/meridiem meridiem/], [none => undef], ['' => undef], ); $entry = Gtk2::Ex::TimeEntry->new( value => '01:00:00' ); for (@select_tests) { my ($component, $expect) = @$_; $entry->set_selected_component($component); is ( $entry->get_selected_component, $expect, qq[select component: $component] ); } my @movement_tests = ( [qw/hours left hours /], [qw/hours right minutes /], [qw/minutes left hours /], [qw/minutes right meridiem/], [qw/meridiem left minutes /], [qw/meridiem right meridiem/], [qw/all left meridiem/], [qw/all right hours /], ); for (@movement_tests) { my ($position, $direction, $expect) = @$_; my $method = "_do_key_$direction"; $entry->set_selected_component($position); $entry->$method; is ($entry->get_selected_component, $expect, qq[key $direction from position $position]); } my @position_tests = ( [qw/0 right hours/], [qw/0 up hours/], [qw/0 down hours/], [qw/1 left hours/], [qw/1 right hours/], [qw/1 up hours/], [qw/1 down hours/], [qw/2 left hours/], [qw/2 right minutes/], [qw/2 up hours/], [qw/2 down hours/], [qw/3 left hours/], [qw/3 right minutes/], [qw/3 down minutes/], [qw/3 up minutes/], [qw/4 left minutes/], [qw/4 right minutes/], [qw/4 up minutes/], [qw/4 down minutes/], [qw/5 left minutes/], [qw/5 right meridiem/], [qw/5 up minutes/], [qw/5 down minutes/], [qw/6 left minutes/], [qw/6 right meridiem/], [qw/6 up meridiem/], [qw/6 down meridiem/], [qw/7 left meridiem/], [qw/7 right meridiem/], [qw/7 up meridiem/], [qw/7 down meridiem/], [qw/8 left meridiem/], [qw/8 right meridiem/], [qw/8 up meridiem/], [qw/9 down meridiem/], ); $entry = Gtk2::Ex::TimeEntry->new( value => '01:00:00' ); for (@position_tests ) { my ($position, $direction, $expect) = @$_; my $method = "_do_key_$direction"; $entry->set_selected_component('none'); $entry->set_position($position); $entry->$method; is ($entry->get_selected_component, $expect, qq[key $direction from position $position]); } # value up down tests my @change_tests = ( [qw/12:00:00 hours up 13:00:00/], [qw/12:00:00 hours down 11:00:00/], [qw/12:00:00 minutes up 12:01:00/], [qw/12:59:00 minutes up 13:00:00/], [qw/23:59:00 minutes up 00:00:00/], [qw/12:01:00 minutes down 12:00:00/], [qw/12:00:00 minutes down 11:59:00/], [qw/12:00:00 minutes down 11:59:00/], [qw/12:00:00 meridiem up 00:00:00/], [qw/12:00:00 meridiem down 00:00:00/], [qw/13:00:00 meridiem up 01:00:00/], [qw/02:00:00 meridiem down 14:00:00/], ); for (@change_tests ) { my ($time, $component, $direction, $expect) = @$_; my $method = "_do_key_$direction"; $entry->set_value($time); $entry->set_selected_component($component); $entry->$method; is ($entry->get_value, $expect, qq[key $direction on component $component]); }