File Coverage

blib/lib/Games/Solitaire/Verify/Move.pm
Criterion Covered Total %
statement 47 47 100.0
branch 13 14 92.8
condition n/a
subroutine 6 6 100.0
pod n/a
total 66 67 98.5


line stmt bran cond sub pod time code
1             package Games::Solitaire::Verify::Move;
2             $Games::Solitaire::Verify::Move::VERSION = '0.2401';
3 9     9   69902 use warnings;
  9         27  
  9         302  
4 9     9   51 use strict;
  9         34  
  9         198  
5              
6              
7 9     9   957 use parent 'Games::Solitaire::Verify::Base';
  9         708  
  9         54  
8              
9 9     9   1434 use Games::Solitaire::Verify::Exception ();
  9         20  
  9         4802  
10              
11             __PACKAGE__->mk_acc_ref(
12             [
13             qw(
14             source_type
15             dest_type
16             source
17             dest
18             num_cards
19             _game
20             )
21             ]
22             );
23              
24              
25             sub _from_fcs_string
26             {
27 2551     2551   4454 my ( $self, $str ) = @_;
28              
29 2551 100       13211 if ( $str =~ m{\AMove a card from stack (\d+) to the foundations\z} )
    100          
    100          
    100          
    100          
    100          
30             {
31 659         1720 my $source = $1;
32              
33 659         1414 $self->source_type("stack");
34 659         1277 $self->dest_type("foundation");
35              
36 659         1852 $self->source($source);
37             }
38             elsif ( $str =~ m{\AMove a card from freecell (\d+) to the foundations\z} )
39             {
40 116         325 my $source = $1;
41              
42 116         281 $self->source_type("freecell");
43 116         246 $self->dest_type("foundation");
44              
45 116         350 $self->source($source);
46             }
47             elsif ( $str =~ m{\AMove a card from freecell (\d+) to stack (\d+)\z} )
48             {
49 475         1584 my ( $source, $dest ) = ( $1, $2 );
50              
51 475         1103 $self->source_type("freecell");
52 475         874 $self->dest_type("stack");
53              
54 475         911 $self->source($source);
55 475         1395 $self->dest($dest);
56             }
57             elsif ( $str =~ m{\AMove a card from stack (\d+) to freecell (\d+)\z} )
58             {
59 591         1916 my ( $source, $dest ) = ( $1, $2 );
60              
61 591         1353 $self->source_type("stack");
62 591         1141 $self->dest_type("freecell");
63              
64 591         1125 $self->source($source);
65 591         1699 $self->dest($dest);
66             }
67             elsif ( $str =~ m{\AMove (\d+) cards from stack (\d+) to stack (\d+)\z} )
68             {
69 702         2556 my ( $num_cards, $source, $dest ) = ( $1, $2, $3 );
70              
71 702         1561 $self->source_type("stack");
72 702         1378 $self->dest_type("stack");
73              
74 702         1362 $self->source($source);
75 702         1313 $self->dest($dest);
76 702         2046 $self->num_cards($num_cards);
77             }
78             elsif ( $str =~
79             m{\AMove the sequence on top of Stack (\d+) to the foundations\z} )
80             {
81 7         17 my $source = $1;
82              
83 7         25 $self->source_type("stack_seq");
84 7         16 $self->dest_type("foundation");
85              
86 7         25 $self->source($source);
87             }
88             else
89             {
90 1         20 Games::Solitaire::Verify::Exception::Parse::FCS->throw(
91             error => "Cannot parse 'FCS' String", );
92             }
93             }
94              
95             sub _init
96             {
97 2551     2551   4757 my ( $self, $args ) = @_;
98              
99 2551         6240 $self->_game( $args->{game} );
100              
101 2551 50       5802 if ( exists( $args->{fcs_string} ) )
102             {
103 2551         5435 return $self->_from_fcs_string( $args->{fcs_string} );
104             }
105             }
106              
107              
108             1; # End of Games::Solitaire::Verify::Move
109              
110             __END__