puppet-lint 0.2.0.pre1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. data/.gitignore +1 -0
  2. data/.travis.yml +1 -14
  3. data/Gemfile +2 -0
  4. data/Rakefile +5 -0
  5. data/bin/puppet-lint +1 -99
  6. data/lib/puppet-lint.rb +4 -12
  7. data/lib/puppet-lint/bin.rb +115 -0
  8. data/lib/puppet-lint/configuration.rb +6 -2
  9. data/lib/puppet-lint/lexer.rb +135 -83
  10. data/lib/puppet-lint/lexer/token.rb +62 -0
  11. data/lib/puppet-lint/plugin.rb +57 -51
  12. data/lib/puppet-lint/plugins.rb +2 -0
  13. data/lib/puppet-lint/plugins/check_classes.rb +161 -45
  14. data/lib/puppet-lint/plugins/check_comments.rb +33 -0
  15. data/lib/puppet-lint/plugins/check_conditionals.rb +8 -10
  16. data/lib/puppet-lint/plugins/check_documentation.rb +41 -0
  17. data/lib/puppet-lint/plugins/check_resources.rb +28 -2
  18. data/lib/puppet-lint/plugins/check_strings.rb +6 -4
  19. data/lib/puppet-lint/plugins/check_variables.rb +1 -1
  20. data/lib/puppet-lint/plugins/check_whitespace.rb +26 -49
  21. data/lib/puppet-lint/tasks/puppet-lint.rb +2 -1
  22. data/lib/puppet-lint/version.rb +1 -1
  23. data/puppet-lint.gemspec +1 -0
  24. data/spec/fixtures/test/manifests/fail.pp +2 -0
  25. data/spec/fixtures/test/manifests/init.pp +3 -0
  26. data/spec/fixtures/test/manifests/warning.pp +2 -0
  27. data/spec/puppet-lint/bin_spec.rb +266 -0
  28. data/spec/puppet-lint/configuration_spec.rb +51 -0
  29. data/spec/puppet-lint/lexer/token_spec.rb +18 -0
  30. data/spec/puppet-lint/lexer_spec.rb +738 -0
  31. data/spec/puppet-lint/{check_classes_spec.rb → plugins/check_classes_spec.rb} +74 -7
  32. data/spec/puppet-lint/plugins/check_comments_spec.rb +40 -0
  33. data/spec/puppet-lint/{check_conditionals_spec.rb → plugins/check_conditionals_spec.rb} +19 -0
  34. data/spec/puppet-lint/plugins/check_documentation_spec.rb +55 -0
  35. data/spec/puppet-lint/{check_resources_spec.rb → plugins/check_resources_spec.rb} +65 -0
  36. data/spec/puppet-lint/{check_strings_spec.rb → plugins/check_strings_spec.rb} +18 -1
  37. data/spec/puppet-lint/{check_variables_spec.rb → plugins/check_variables_spec.rb} +0 -0
  38. data/spec/puppet-lint/plugins/check_whitespace_spec.rb +291 -0
  39. data/spec/puppet-lint_spec.rb +10 -0
  40. data/spec/spec_helper.rb +5 -0
  41. metadata +58 -24
  42. data/spec/puppet-lint/check_whitespace_spec.rb +0 -120
@@ -0,0 +1,33 @@
1
+ class PuppetLint::Plugins::CheckComments < PuppetLint::CheckPlugin
2
+ # Public: Check the manifest tokens for any comments started with slashes
3
+ # (//) and record a warning for each instance found.
4
+ #
5
+ # Returns nothing.
6
+ check 'slash_comments' do
7
+ tokens.select { |token|
8
+ token.type == :SLASH_COMMENT
9
+ }.each do |token|
10
+ notify :warning, {
11
+ :message => '// comment found',
12
+ :linenumber => token.line,
13
+ :column => token.column,
14
+ }
15
+ end
16
+ end
17
+
18
+ # Public: Check the manifest tokens for any comments encapsulated with
19
+ # slash-asterisks (/* */) and record a warning for each instance found.
20
+ #
21
+ # Returns nothing.
22
+ check 'star_comments' do
23
+ tokens.select { |token|
24
+ token.type == :MLCOMMENT
25
+ }.each do |token|
26
+ notify :warning, {
27
+ :message => '/* */ comment found',
28
+ :linenumber => token.line,
29
+ :column => token.column,
30
+ }
31
+ end
32
+ end
33
+ end
@@ -5,19 +5,17 @@ class PuppetLint::Plugins::CheckConditionals < PuppetLint::CheckPlugin
5
5
  # Returns nothing.
6
6
  check 'selector_inside_resource' do
7
7
  resource_indexes.each do |resource|
8
- resource_tokens = tokens[resource[:start]..resource[:end]].reject { |r|
9
- formatting_tokens.include? r.type
10
- }
8
+ resource_tokens = tokens[resource[:start]..resource[:end]]
11
9
 
12
- resource_tokens.each_index do |resource_token_idx|
13
- if resource_tokens[resource_token_idx].type == :FARROW
14
- if resource_tokens[resource_token_idx + 1].type == :VARIABLE
15
- unless resource_tokens[resource_token_idx + 2].nil?
16
- if resource_tokens[resource_token_idx + 2].type == :QMARK
10
+ resource_tokens.each do |token|
11
+ if token.type == :FARROW
12
+ if token.next_code_token.type == :VARIABLE
13
+ unless token.next_code_token.next_code_token.nil?
14
+ if token.next_code_token.next_code_token.type == :QMARK
17
15
  notify :warning, {
18
16
  :message => 'selector inside resource block',
19
- :linenumber => resource_tokens[resource_token_idx].line,
20
- :column => resource_tokens[resource_token_idx].column,
17
+ :linenumber => token.line,
18
+ :column => token.column,
21
19
  }
22
20
  end
23
21
  end
@@ -0,0 +1,41 @@
1
+ class PuppetLint::Plugins::CheckDocumentation < PuppetLint::CheckPlugin
2
+ def whitespace_tokens
3
+ @whitespace_tokens ||= {
4
+ :WHITESPACE => true,
5
+ :NEWLINE => true,
6
+ :INDENT => true,
7
+ }
8
+ end
9
+
10
+ def comment_tokens
11
+ @comment_tokens ||= {
12
+ :COMMENT => true,
13
+ :MLCOMMENT => true,
14
+ :SLASH_COMMENT => true,
15
+ }
16
+ end
17
+
18
+ check 'documentation' do
19
+ (class_indexes + defined_type_indexes).each do |item_idx|
20
+ prev_token = tokens[item_idx[:start] - 1]
21
+ while whitespace_tokens.include? prev_token.type
22
+ prev_token = prev_token.prev_token
23
+ end
24
+
25
+ unless comment_tokens.include? prev_token.type
26
+ first_token = tokens[item_idx[:start]]
27
+ if first_token.type == :CLASS
28
+ type = 'class'
29
+ else
30
+ type = 'defined type'
31
+ end
32
+
33
+ notify :warning, {
34
+ :message => "#{type} not documented",
35
+ :linenumber => first_token.line,
36
+ :column => first_token.column,
37
+ }
38
+ end
39
+ end
40
+ end
41
+ end
@@ -43,6 +43,31 @@ class PuppetLint::Plugins::CheckResources < PuppetLint::CheckPlugin
43
43
  end
44
44
  end
45
45
 
46
+ check 'duplicate_params' do
47
+ resource_indexes.each do |resource|
48
+ resource_tokens = tokens[resource[:start]..resource[:end]].reject { |r|
49
+ formatting_tokens.include? r.type
50
+ }
51
+
52
+ seen_params = {}
53
+ resource_tokens.each_with_index do |token, idx|
54
+ if token.type == :FARROW
55
+ prev_token = resource_tokens[idx - 1]
56
+ next unless prev_token.type == :NAME
57
+ if seen_params.include? prev_token.value
58
+ notify :error, {
59
+ :message => 'duplicate parameter found in resource',
60
+ :linenumber => prev_token.line,
61
+ :column => prev_token.column,
62
+ }
63
+ else
64
+ seen_params[prev_token.value] = true
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
70
+
46
71
  # Public: Check the tokens of each File resource instance for a mode
47
72
  # parameter and if found, record a warning if the value of that parameter is
48
73
  # not a quoted string.
@@ -68,7 +93,7 @@ class PuppetLint::Plugins::CheckResources < PuppetLint::CheckPlugin
68
93
  attr_token = resource_tokens[resource_token_idx]
69
94
  if attr_token.type == :NAME and attr_token.value == 'mode'
70
95
  value_token = resource_tokens[resource_token_idx + 2]
71
- if value_token.type == :NAME
96
+ if {:NAME => true, :NUMBER => true}.include? value_token.type
72
97
  notify :warning, {
73
98
  :message => 'unquoted file mode',
74
99
  :linenumber => value_token.line,
@@ -110,9 +135,10 @@ class PuppetLint::Plugins::CheckResources < PuppetLint::CheckPlugin
110
135
  if attr_token.type == :NAME and attr_token.value == 'mode'
111
136
  value_token = resource_tokens[resource_token_idx + 2]
112
137
 
113
- break if value_token.value =~ /\d{4}/
138
+ break if value_token.value =~ /\A[0-7]{4}\Z/
114
139
  break if value_token.type == :VARIABLE
115
140
  break if value_token.value =~ sym_mode
141
+ break if value_token.type == :UNDEF
116
142
 
117
143
  notify :warning, {
118
144
  :message => msg,
@@ -7,8 +7,10 @@ class PuppetLint::Plugins::CheckStrings < PuppetLint::CheckPlugin
7
7
  check 'double_quoted_strings' do
8
8
  tokens.select { |r|
9
9
  r.type == :STRING
10
- }.reject { |r|
11
- r.value.include?('\t') || r.value.include?('\n')
10
+ }.each { |r|
11
+ r.value.gsub!(' '*r.column, "\n")
12
+ }.select { |r|
13
+ r.value[/(\t|\\t|\n|\\n)/].nil?
12
14
  }.each do |token|
13
15
  notify :warning, {
14
16
  :message => 'double quoted string containing no variables',
@@ -27,7 +29,7 @@ class PuppetLint::Plugins::CheckStrings < PuppetLint::CheckPlugin
27
29
  token = tokens[token_idx]
28
30
 
29
31
  if token.type == :DQPRE and token.value == ''
30
- if [:VARIABLE, :UNENC_VARIABLE].include? tokens[token_idx + 1].type
32
+ if {:VARIABLE => true, :UNENC_VARIABLE => true}.include? tokens[token_idx + 1].type
31
33
  if tokens[token_idx + 2].type == :DQPOST
32
34
  if tokens[token_idx + 2].value == ''
33
35
  notify :warning, {
@@ -82,7 +84,7 @@ class PuppetLint::Plugins::CheckStrings < PuppetLint::CheckPlugin
82
84
  # Returns nothing.
83
85
  check 'quoted_booleans' do
84
86
  tokens.select { |r|
85
- [:STRING, :SSTRING].include?(r.type) && %w{true false}.include?(r.value)
87
+ {:STRING => true, :SSTRING => true}.include?(r.type) && %w{true false}.include?(r.value)
86
88
  }.each do |token|
87
89
  notify :warning, {
88
90
  :message => 'quoted boolean value found',
@@ -5,7 +5,7 @@ class PuppetLint::Plugins::CheckVariables < PuppetLint::CheckPlugin
5
5
  # Returns nothing.
6
6
  check 'variable_contains_dash' do
7
7
  tokens.select { |r|
8
- [:VARIABLE, :UNENC_VARIABLE].include? r.type
8
+ {:VARIABLE => true, :UNENC_VARIABLE => true}.include? r.type
9
9
  }.each do |token|
10
10
  if token.value.match(/-/)
11
11
  notify :warning, {
@@ -69,64 +69,41 @@ class PuppetLint::Plugins::CheckWhitespace < PuppetLint::CheckPlugin
69
69
  end
70
70
  end
71
71
 
72
- # Check the raw manifest strings for any arrows (=>) in a grouping ({}) that
73
- # are not aligned with other arrows in that grouping.
72
+ # Check the manifest tokens for any arrows (=>) in a grouping ({}) that are
73
+ # not aligned with other arrows in that grouping.
74
74
  #
75
75
  # Returns nothing.
76
76
  check 'arrow_alignment' do
77
- in_resource = false
78
- selectors = []
79
- resource_indent_length = 0
80
- manifest_lines.each_with_index do |line, idx|
81
- # SHOULD align fat comma arrows (=>) within blocks of attributes
82
- if line =~ /^( +.+? +)=>/
83
- line_indent = $1
84
- if in_resource
85
- if selectors.count > 0
86
- if selectors.last == 0
87
- selectors[-1] = line_indent.length
88
- end
77
+ resource_indexes.each do |res_idx|
78
+ indent_depth = [nil]
79
+ resource_tokens = tokens[res_idx[:start]..res_idx[:end]]
80
+ resource_tokens.reject! do |token|
81
+ {:COMMENT => true, :SLASH_COMMENT => true, :MLCOMMENT => true}.include? token.type
82
+ end
89
83
 
90
- # check for length first
91
- unless line_indent.length == selectors.last
92
- notify :warning, {
93
- :message => '=> is not properly aligned for selector',
94
- :linenumber => idx + 1,
95
- :column => line_indent.length,
96
- }
97
- end
84
+ # If this is a single line resource, skip it
85
+ next if resource_tokens.select { |r| r.type == :NEWLINE }.empty?
98
86
 
99
- # then for a new selector or selector finish
100
- if line.strip.end_with? '{'
101
- selectors.push(0)
102
- elsif line.strip =~ /\}[,;]?$/
103
- selectors.pop
104
- end
105
- else
106
- unless line_indent.length == resource_indent_length
107
- notify :warning, {
108
- :message => '=> is not properly aligned for resource',
109
- :linenumber => idx + 1,
110
- :column => line_indent.length,
111
- }
112
- end
87
+ resource_tokens.each_with_index do |token, idx|
88
+ if token.type == :FARROW
89
+ indent_length = token.column
113
90
 
114
- if line.strip.end_with? '{'
115
- selectors.push(0)
116
- end
91
+ if indent_depth.last.nil?
92
+ indent_depth[-1] = indent_length
117
93
  end
118
- else
119
- resource_indent_length = line_indent.length
120
- in_resource = true
121
- if line.strip.end_with? '{'
122
- selectors.push(0)
94
+
95
+ unless indent_depth.last == indent_length
96
+ notify :warning, {
97
+ :message => '=> is not properly aligned',
98
+ :linenumber => token.line,
99
+ :column => token.column,
100
+ }
123
101
  end
102
+ elsif token.type == :LBRACE
103
+ indent_depth.push(nil)
104
+ elsif token.type == :RBRACE
105
+ indent_depth.pop
124
106
  end
125
- elsif line.strip =~ /\}[,;]?$/ and selectors.count > 0
126
- selectors.pop
127
- else
128
- in_resource = false
129
- resource_indent_length = 0
130
107
  end
131
108
  end
132
109
  end
@@ -8,6 +8,8 @@ class PuppetLint
8
8
  desc 'Run puppet-lint'
9
9
 
10
10
  task :lint do
11
+ PuppetLint.configuration.with_filename = true
12
+
11
13
  RakeFileUtils.send(:verbose, true) do
12
14
  linter = PuppetLint.new
13
15
  matched_files = FileList['**/*.pp']
@@ -17,7 +19,6 @@ class PuppetLint
17
19
  end
18
20
 
19
21
  matched_files.to_a.each do |puppet_file|
20
- puts "Evaluating #{puppet_file}"
21
22
  linter.file = puppet_file
22
23
  linter.run
23
24
  end
@@ -1,3 +1,3 @@
1
1
  class PuppetLint
2
- VERSION = '0.2.0.pre1'
2
+ VERSION = '0.2.0'
3
3
  end
data/puppet-lint.gemspec CHANGED
@@ -16,6 +16,7 @@ Gem::Specification.new do |s|
16
16
 
17
17
  s.add_development_dependency 'rspec'
18
18
  s.add_development_dependency 'rdoc'
19
+ s.add_development_dependency 'rcov'
19
20
 
20
21
  s.authors = ['Tim Sharpe']
21
22
  s.email = 'tim@sharpe.id.au'
@@ -0,0 +1,2 @@
1
+ # foo
2
+ class test::foo { }
@@ -0,0 +1,3 @@
1
+ # foo
2
+ class test {
3
+ }
@@ -0,0 +1,2 @@
1
+ # foo
2
+ define test::warning($foo='bar', $baz) { }
@@ -0,0 +1,266 @@
1
+ require 'spec_helper'
2
+ require 'rspec/mocks'
3
+ require 'optparse'
4
+
5
+ class CommandRun
6
+ attr_accessor :stdout, :stderr, :exitstatus
7
+
8
+ def initialize(args)
9
+ out = StringIO.new
10
+ err = StringIO.new
11
+
12
+ $stdout = out
13
+ $stderr = err
14
+
15
+ PuppetLint.configuration.defaults
16
+ @exitstatus = PuppetLint::Bin.new(args).run
17
+ PuppetLint.configuration.defaults
18
+
19
+ @stdout = out.string.strip
20
+ @stderr = err.string.strip
21
+
22
+ $stdout = STDOUT
23
+ $stderr = STDERR
24
+ end
25
+ end
26
+
27
+ describe PuppetLint::Bin do
28
+ subject do
29
+ if args.is_a? Array
30
+ sane_args = args
31
+ else
32
+ sane_args = [args]
33
+ end
34
+
35
+ CommandRun.new(sane_args)
36
+ end
37
+
38
+ context 'when running normally' do
39
+ let(:args) { 'spec/fixtures/test/manifests/init.pp' }
40
+
41
+ its(:exitstatus) { should == 0 }
42
+ end
43
+
44
+ context 'when running without arguments' do
45
+ let(:args) { [] }
46
+
47
+ its(:exitstatus) { should == 1 }
48
+ end
49
+
50
+ context 'when asked to display version' do
51
+ let(:args) { '--version' }
52
+
53
+ its(:exitstatus) { should == 0 }
54
+ its(:stdout) { should == "Puppet-lint #{PuppetLint::VERSION}" }
55
+ end
56
+
57
+ context 'when passed multiple files' do
58
+ let(:args) { [
59
+ 'spec/fixtures/test/manifests/warning.pp',
60
+ 'spec/fixtures/test/manifests/fail.pp',
61
+ ] }
62
+
63
+ its(:exitstatus) { should == 1 }
64
+ its(:stdout) { should == [
65
+ 'WARNING: optional parameter listed before required parameter on line 2',
66
+ 'ERROR: test::foo not in autoload module layout on line 2',
67
+ ].join("\n") }
68
+ end
69
+
70
+ context 'when limited to errors only' do
71
+ let(:args) { [
72
+ '--error-level', 'error',
73
+ 'spec/fixtures/test/manifests/warning.pp',
74
+ 'spec/fixtures/test/manifests/fail.pp',
75
+ ] }
76
+
77
+ its(:exitstatus) { should == 1 }
78
+ its(:stdout) { should match(/^ERROR/) }
79
+ end
80
+
81
+ context 'when limited to errors only' do
82
+ let(:args) { [
83
+ '--error-level', 'warning',
84
+ 'spec/fixtures/test/manifests/warning.pp',
85
+ 'spec/fixtures/test/manifests/fail.pp',
86
+ ] }
87
+
88
+ its(:exitstatus) { should == 1 }
89
+ its(:stdout) { should match(/^WARNING/) }
90
+ end
91
+
92
+ context 'when asked to display filenames ' do
93
+ let(:args) { ['--with-filename', 'spec/fixtures/test/manifests/fail.pp'] }
94
+
95
+ its(:exitstatus) { should == 1 }
96
+ its(:stdout) { should match(%r{^spec/fixtures/test/manifests/fail\.pp -}) }
97
+ end
98
+
99
+ context 'when not asked to fail on warnings' do
100
+ let(:args) { ['spec/fixtures/test/manifests/warning.pp'] }
101
+
102
+ its(:exitstatus) { should == 0 }
103
+ its(:stdout) { should match(/optional parameter/) }
104
+ end
105
+
106
+ context 'when asked to fail on warnings' do
107
+ let(:args) { [
108
+ '--fail-on-warnings',
109
+ 'spec/fixtures/test/manifests/warning.pp',
110
+ ] }
111
+
112
+ its(:exitstatus) { should == 1 }
113
+ its(:stdout) { should match(/optional parameter/) }
114
+ end
115
+
116
+ context 'when used with an invalid option' do
117
+ let(:args) { '--foo-bar-baz' }
118
+
119
+ its(:exitstatus) { should == 1 }
120
+ its(:stdout) { should match(/invalid option/) }
121
+ end
122
+
123
+ context 'when passed a file that does not exist' do
124
+ let(:args) { 'spec/fixtures/test/manifests/enoent.pp' }
125
+
126
+ its(:exitstatus) { should == 1 }
127
+ its(:stdout) { should match(/specified file does not exist/) }
128
+ end
129
+
130
+ context 'when passed a directory' do
131
+ let(:args) { 'spec/fixtures/' }
132
+
133
+ its(:exitstatus) { should == 1 }
134
+ its(:stdout) { should match(/^ERROR/) }
135
+ end
136
+
137
+ context 'when disabling a check' do
138
+ let(:args) { [
139
+ '--no-autoloader_layout',
140
+ 'spec/fixtures/test/manifests/fail.pp'
141
+ ] }
142
+
143
+ its(:exitstatus) { should == 0 }
144
+ its(:stdout) { should == "" }
145
+ end
146
+
147
+ context 'when changing the log format' do
148
+ context 'to print %{filename}' do
149
+ let(:args) { [
150
+ '--log-format', '%{filename}',
151
+ 'spec/fixtures/test/manifests/fail.pp'
152
+ ] }
153
+
154
+ its(:exitstatus) { should == 1 }
155
+ its(:stdout) { should == 'fail.pp' }
156
+ end
157
+
158
+ context 'to print %{path}' do
159
+ let(:args) { [
160
+ '--log-format', '%{path}',
161
+ 'spec/fixtures/test/manifests/fail.pp'
162
+ ] }
163
+
164
+ its(:exitstatus) { should == 1 }
165
+ its(:stdout) { should == 'spec/fixtures/test/manifests/fail.pp' }
166
+ end
167
+
168
+ context 'to print %{fullpath}' do
169
+ let(:args) { [
170
+ '--log-format', '%{fullpath}',
171
+ 'spec/fixtures/test/manifests/fail.pp'
172
+ ] }
173
+
174
+ its(:exitstatus) { should == 1 }
175
+ its(:stdout) {
176
+ should match(%r{^/.+/spec/fixtures/test/manifests/fail\.pp$})
177
+ }
178
+ end
179
+
180
+ context 'to print %{linenumber}' do
181
+ let(:args) { [
182
+ '--log-format', '%{linenumber}',
183
+ 'spec/fixtures/test/manifests/fail.pp'
184
+ ] }
185
+
186
+ its(:exitstatus) { should == 1 }
187
+ its(:stdout) { should == '2' }
188
+ end
189
+
190
+ context 'to print %{kind}' do
191
+ let(:args) { [
192
+ '--log-format', '%{kind}',
193
+ 'spec/fixtures/test/manifests/fail.pp'
194
+ ] }
195
+
196
+ its(:exitstatus) { should == 1 }
197
+ its(:stdout) { should == 'error' }
198
+ end
199
+
200
+ context 'to print %{KIND}' do
201
+ let(:args) { [
202
+ '--log-format', '%{KIND}',
203
+ 'spec/fixtures/test/manifests/fail.pp'
204
+ ] }
205
+
206
+ its(:exitstatus) { should == 1 }
207
+ its(:stdout) { should == 'ERROR' }
208
+ end
209
+
210
+ context 'to print %{check}' do
211
+ let(:args) { [
212
+ '--log-format', '%{check}',
213
+ 'spec/fixtures/test/manifests/fail.pp'
214
+ ] }
215
+
216
+ its(:exitstatus) { should == 1 }
217
+ its(:stdout) { should == 'autoloader_layout' }
218
+ end
219
+
220
+ context 'to print %{message}' do
221
+ let(:args) { [
222
+ '--log-format', '%{message}',
223
+ 'spec/fixtures/test/manifests/fail.pp'
224
+ ] }
225
+
226
+ its(:exitstatus) { should == 1 }
227
+ its(:stdout) { should == 'test::foo not in autoload module layout' }
228
+ end
229
+
230
+ context 'when loading options from a file' do
231
+ let(:args) { 'spec/fixtures/test/manifests/fail.pp' }
232
+
233
+ it 'should have ~/.puppet-lintrc as depreciated' do
234
+ OptionParser.any_instance.stub(:load).
235
+ with(File.expand_path('~/.puppet-lintrc')).and_return(true)
236
+ OptionParser.any_instance.stub(:load).
237
+ with(File.expand_path('~/.puppet-lint.rc')).and_return(false)
238
+ OptionParser.any_instance.stub(:load).
239
+ with('.puppet-lintrc').and_return(false)
240
+ OptionParser.any_instance.stub(:load).
241
+ with('.puppet-lint.rc').and_return(false)
242
+ OptionParser.any_instance.stub(:load).
243
+ with('/etc/puppet-lint.rc').and_return(false)
244
+
245
+ msg = 'Depreciated: Found ~/.puppet-lintrc instead of ~/.puppet-lint.rc'
246
+ subject.stderr.should == msg
247
+ end
248
+
249
+ it 'should have .puppet-lintrc as depreciated' do
250
+ OptionParser.any_instance.stub(:load).
251
+ with(File.expand_path('~/.puppet-lintrc')).and_return(false)
252
+ OptionParser.any_instance.stub(:load).
253
+ with(File.expand_path('~/.puppet-lint.rc')).and_return(false)
254
+ OptionParser.any_instance.stub(:load).
255
+ with('.puppet-lintrc').and_return(true)
256
+ OptionParser.any_instance.stub(:load).
257
+ with('.puppet-lint.rc').and_return(false)
258
+ OptionParser.any_instance.stub(:load).
259
+ with('/etc/puppet-lint.rc').and_return(false)
260
+
261
+ msg = 'Depreciated: Read .puppet-lintrc instead of .puppet-lint.rc'
262
+ subject.stderr.should == msg
263
+ end
264
+ end
265
+ end
266
+ end