-
Notifications
You must be signed in to change notification settings - Fork 138
/
004-configure.t
147 lines (116 loc) · 4.33 KB
/
004-configure.t
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#! perl
# Copyright (C) 2007, Parrot Foundation.
# 004-configure.t
use strict;
use warnings;
use Test::More tests => 29;
use Carp;
use lib qw( lib );
use Parrot::Configure;
use Parrot::Configure::Options qw( process_options );
use Parrot::Configure::Step::List qw| get_steps_list |;
$| = 1;
is( $|, 1, "output autoflush is set" );
my $CC = "/usr/bin/gcc-3.3";
my $localargv = [ qq{--cc=$CC}, ];
my ($args, $step_list_ref) = process_options(
{
mode => q{configure},
argv => $localargv,
}
);
ok( defined $args, "process_options returned successfully" );
my %args = %$args;
my $conf = Parrot::Configure->new;
ok( defined $conf, "Parrot::Configure->new() returned okay" );
isa_ok( $conf, "Parrot::Configure" );
my $newconf = Parrot::Configure->new;
ok( defined $newconf, "Parrot::Configure->new() returned okay" );
isa_ok( $newconf, "Parrot::Configure" );
is( $conf, $newconf, "Parrot::Configure object is a singleton" );
# Since these tests peek into the Parrot::Configure object, they will break if
# the structure of that object changes. We retain them for now to delineate
# our progress in testing the object.
foreach my $k (qw| steps options data |) {
ok( defined $conf->$k, "Parrot::Configure object has $k key" );
}
is( ref( $conf->steps ), q{ARRAY}, "Parrot::Configure object 'steps' key is array reference" );
is( scalar @{ $conf->steps },
0, "Parrot::Configure object 'steps' key holds empty array reference" );
foreach my $k (qw| options data |) {
isa_ok( $conf->$k, "Parrot::Configure::Data" );
}
can_ok( "Parrot::Configure", qw| data | );
can_ok( "Parrot::Configure", qw| options | );
can_ok( "Parrot::Configure", qw| steps | );
can_ok( "Parrot::Configure", qw| add_step | );
can_ok( "Parrot::Configure", qw| add_steps | );
can_ok( "Parrot::Configure", qw| run_single_step | );
can_ok( "Parrot::Configure", qw| runsteps | );
can_ok( "Parrot::Configure", qw| _run_this_step | );
$conf->add_steps( get_steps_list() );
my @confsteps = @{ $conf->steps };
isnt( scalar @confsteps, 0,
"Parrot::Configure object 'steps' key holds non-empty array reference" );
my $nontaskcount = 0;
foreach my $k (@confsteps) {
$nontaskcount++ unless $k->isa("Parrot::Configure::Task");
}
is( $nontaskcount, 0, "Each step is a Parrot::Configure::Task object" );
$conf->options->set(%args);
is( $conf->options->{c}->{cc}, $CC, "command-line option '--cc' has been stored in object" );
is( $conf->options->{c}->{debugging},
1, "command-line option '--debugging' has been stored in object" );
my $res = eval "no strict; use Parrot::Config::Generated; \\%PConfig";
SKIP: {
my $reason = <<REASON;
If you have already completed configuration,
you can call Parrot::Configure::Data::get_PConfig().
But here you are testing for that method's failure.
REASON
skip $reason, 1 if defined $res;
eval { $conf->data()->get_PConfig(); };
like(
$@,
qr/You cannot use --step until you have completed the full configure process/,
"Got expected error message for --step option and get_PConfig() without prior configuration"
);
}
$res = eval "no strict; use Parrot::Config::Generated; \\%PConfig_Temp";
SKIP: {
my $reason = <<REASON;
If you have already completed configuration,
you can call Parrot::Configure::Data::get_PConfig_Temp().
But here you are testing for that method's failure.
REASON
skip $reason, 1 if defined $res;
eval { $conf->data()->get_PConfig_Temp(); };
like(
$@,
qr/You cannot use --step until you have completed the full configure process/,
"Got expected error message for --step option and get_PConfig_Temp() without prior configuration"
);
}
pass("Completed all tests in $0");
################### DOCUMENTATION ###################
=head1 NAME
004-configure.t - test Parrot::Configure
=head1 SYNOPSIS
% prove t/configure/004-configure.t
=head1 DESCRIPTION
The files in this directory test functionality used by F<Configure.pl>.
The tests in this file test those Parrot::Configure methods regularly called
by F<Configure.pl> up to, but not including, C<Parrot::Configure::runsteps()>.
There is also a test for failure of the C<--step> option without prior
completed configuration.
=head1 AUTHOR
James E Keenan
=head1 SEE ALSO
Parrot::Configure, F<Configure.pl>.
=cut
# Local Variables:
# mode: cperl
# cperl-indent-level: 4
# fill-column: 100
# End:
# vim: expandtab shiftwidth=4: