3 ##############################################################################
4 # $URL: http://perlcritic.tigris.org/svn/perlcritic/trunk/Perl-Critic/t/10_userprofile.t $
5 # $Date: 2008-06-06 00:48:04 -0500 (Fri, 06 Jun 2008) $
8 ##############################################################################
13 use Test::More tests => 41;
14 use English qw(-no_match_vars);
15 use Perl::Critic::UserProfile;
17 #-----------------------------------------------------------------------------
18 # Create profile from hash
21 my %policy_params = (keywords => 'Revision');
22 my %profile_hash = ( '-NamingConventions::ProhibitMixedCaseVars' => {},
23 'Miscellanea::RequireRcsKeywords' => \%policy_params );
25 my $up = Perl::Critic::UserProfile->new( -profile => \%profile_hash );
27 #Using short policy names
28 is($up->policy_is_enabled('Miscellanea::RequireRcsKeywords'), 1 );
29 is($up->policy_is_disabled('NamingConventions::ProhibitMixedCaseVars'), 1 );
30 is_deeply($up->raw_policy_params('Miscellanea::RequireRcsKeywords'), \%policy_params);
32 #Now using long policy names
33 is($up->policy_is_enabled('Perl::Critic::Policy::Miscellanea::RequireRcsKeywords'), 1 );
34 is($up->policy_is_disabled('Perl::Critic::Policy::NamingConventions::ProhibitMixedCaseVars'), 1 );
35 is_deeply($up->raw_policy_params('Perl::Critic::Policy::Miscellanea::RequireRcsKeywords'), \%policy_params);
37 #Using bogus policy names
38 is($up->policy_is_enabled('Perl::Critic::Policy::Bogus'), q{} );
39 is($up->policy_is_disabled('Perl::Critic::Policy::Bogus'), q{} );
40 is_deeply($up->raw_policy_params('Perl::Critic::Policy::Bogus'), {} );
43 #-----------------------------------------------------------------------------
44 # Create profile from array
47 my %policy_params = (keywords => 'Revision');
48 my @profile_array = ( q{ [-NamingConventions::ProhibitMixedCaseVars] },
49 q{ [Miscellanea::RequireRcsKeywords] },
50 q{ keywords = Revision },
54 my $up = Perl::Critic::UserProfile->new( -profile => \@profile_array );
56 #Now using long policy names
57 is($up->policy_is_enabled('Miscellanea::RequireRcsKeywords'), 1 );
58 is($up->policy_is_disabled('NamingConventions::ProhibitMixedCaseVars'), 1 );
59 is_deeply($up->raw_policy_params('Miscellanea::RequireRcsKeywords'), \%policy_params);
61 #Now using long policy names
62 is($up->policy_is_enabled('Perl::Critic::Policy::Miscellanea::RequireRcsKeywords'), 1 );
63 is($up->policy_is_disabled('Perl::Critic::Policy::NamingConventions::ProhibitMixedCaseVars'), 1 );
64 is_deeply($up->raw_policy_params('Perl::Critic::Policy::Miscellanea::RequireRcsKeywords'), \%policy_params);
66 #Using bogus policy names
67 is($up->policy_is_enabled('Perl::Critic::Policy::Bogus'), q{} );
68 is($up->policy_is_disabled('Perl::Critic::Policy::Bogus'), q{} );
69 is_deeply($up->raw_policy_params('Perl::Critic::Policy::Bogus'), {} );
72 #-----------------------------------------------------------------------------
73 # Create profile from string
76 my %policy_params = (keywords => 'Revision');
77 my $profile_string = <<'END_PROFILE';
78 [-NamingConventions::ProhibitMixedCaseVars]
79 [Miscellanea::RequireRcsKeywords]
83 my $up = Perl::Critic::UserProfile->new( -profile => \$profile_string );
85 #Now using long policy names
86 is($up->policy_is_enabled('Miscellanea::RequireRcsKeywords'), 1 );
87 is($up->policy_is_disabled('NamingConventions::ProhibitMixedCaseVars'), 1 );
88 is_deeply($up->raw_policy_params('Miscellanea::RequireRcsKeywords'), \%policy_params);
90 #Now using long policy names
91 is($up->policy_is_enabled('Perl::Critic::Policy::Miscellanea::RequireRcsKeywords'), 1 );
92 is($up->policy_is_disabled('Perl::Critic::Policy::NamingConventions::ProhibitMixedCaseVars'), 1 );
93 is_deeply($up->raw_policy_params('Perl::Critic::Policy::Miscellanea::RequireRcsKeywords'), \%policy_params);
95 #Using bogus policy names
96 is($up->policy_is_enabled('Perl::Critic::Policy::Bogus'), q{} );
97 is($up->policy_is_disabled('Perl::Critic::Policy::Bogus'), q{} );
98 is_deeply($up->raw_policy_params('Perl::Critic::Policy::Bogus'), {} );
101 #-----------------------------------------------------------------------------
102 # Test long policy names
105 my %policy_params = (keywords => 'Revision');
106 my $long_profile_string = <<'END_PROFILE';
107 [-Perl::Critic::Policy::NamingConventions::ProhibitMixedCaseVars]
108 [Perl::Critic::Policy::Miscellanea::RequireRcsKeywords]
112 my $up = Perl::Critic::UserProfile->new( -profile => \$long_profile_string );
114 #Now using long policy names
115 is($up->policy_is_enabled('Miscellanea::RequireRcsKeywords'), 1 );
116 is($up->policy_is_disabled('NamingConventions::ProhibitMixedCaseVars'), 1 );
117 is_deeply($up->raw_policy_params('Miscellanea::RequireRcsKeywords'), \%policy_params);
119 #Now using long policy names
120 is($up->policy_is_enabled('Perl::Critic::Policy::Miscellanea::RequireRcsKeywords'), 1 );
121 is($up->policy_is_disabled('Perl::Critic::Policy::NamingConventions::ProhibitMixedCaseVars'), 1 );
122 is_deeply($up->raw_policy_params('Perl::Critic::Policy::Miscellanea::RequireRcsKeywords'), \%policy_params);
124 #Using bogus policy names
125 is($up->policy_is_enabled('Perl::Critic::Policy::Bogus'), q{} );
126 is($up->policy_is_disabled('Perl::Critic::Policy::Bogus'), q{} );
127 is_deeply($up->raw_policy_params('Perl::Critic::Policy::Bogus'), {} );
130 #-----------------------------------------------------------------------------
131 # Test exception handling
134 my $code_ref = sub { return };
135 eval { Perl::Critic::UserProfile->new( -profile => $code_ref ) };
136 like( $EVAL_ERROR, qr/Can't load UserProfile/, 'Invalid profile type');
138 eval { Perl::Critic::UserProfile->new( -profile => 'bogus' ) };
139 like( $EVAL_ERROR, qr/File 'bogus' does not exist/, 'Invalid profile path');
141 my $invalid_syntax = '[Foo::Bar'; #Missing "]"
142 eval { Perl::Critic::UserProfile->new( -profile => \$invalid_syntax ) };
143 like( $EVAL_ERROR, qr/Syntax error at line/, 'Invalid profile syntax');
145 $invalid_syntax = 'severity 2'; #Missing "="
146 eval { Perl::Critic::UserProfile->new( -profile => \$invalid_syntax ) };
147 like( $EVAL_ERROR, qr/Syntax error at line/, 'Invalid profile syntax');
151 #-----------------------------------------------------------------------------
152 # Test profile finding
155 my $expected = $ENV{PERLCRITIC} = 'foo';
156 my $got = Perl::Critic::UserProfile::_find_profile_path();
157 is( $got, $expected, 'PERLCRITIC environment variable');
160 #-----------------------------------------------------------------------------
162 # ensure we run true if this test is loaded by
163 # t/10_userprofile.t_without_optional_dependencies.t
168 # cperl-indent-level: 4
170 # indent-tabs-mode: nil
171 # c-indentation-style: bsd
173 # ex: set ts=8 sts=4 sw=4 tw=78 ft=perl expandtab shiftround :