reek 1.6.6 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG +6 -9
- data/features/command_line_interface/options.feature +20 -16
- data/features/command_line_interface/stdin.feature +1 -1
- data/features/rake_task/rake_task.feature +0 -12
- data/features/reports/reports.feature +63 -23
- data/features/reports/yaml.feature +3 -3
- data/features/samples.feature +3 -3
- data/lib/reek/cli/application.rb +5 -5
- data/lib/reek/cli/input.rb +1 -1
- data/lib/reek/cli/option_interpreter.rb +77 -0
- data/lib/reek/cli/options.rb +89 -82
- data/lib/reek/cli/report/formatter.rb +33 -24
- data/lib/reek/cli/report/heading_formatter.rb +45 -0
- data/lib/reek/cli/report/location_formatter.rb +23 -0
- data/lib/reek/cli/report/report.rb +32 -17
- data/lib/reek/configuration/app_configuration.rb +2 -2
- data/lib/reek/configuration/configuration_file_finder.rb +10 -10
- data/lib/reek/core/smell_repository.rb +3 -28
- data/lib/reek/rake/task.rb +35 -76
- data/lib/reek/smell_warning.rb +31 -16
- data/lib/reek/smells/nested_iterators.rb +1 -1
- data/lib/reek/smells/smell_detector.rb +9 -0
- data/lib/reek/smells/utility_function.rb +2 -1
- data/lib/reek/spec/should_reek.rb +0 -3
- data/lib/reek/spec/should_reek_of.rb +61 -12
- data/lib/reek/spec/should_reek_only_of.rb +12 -10
- data/lib/reek/version.rb +1 -1
- data/reek.gemspec +2 -2
- data/spec/factories/factories.rb +2 -5
- data/spec/reek/cli/html_report_spec.rb +28 -0
- data/spec/reek/cli/option_interperter_spec.rb +14 -0
- data/spec/reek/cli/text_report_spec.rb +95 -0
- data/spec/reek/cli/yaml_report_spec.rb +23 -0
- data/spec/reek/configuration/configuration_file_finder_spec.rb +5 -6
- data/spec/reek/core/module_context_spec.rb +1 -1
- data/spec/reek/core/smell_repository_spec.rb +17 -0
- data/spec/reek/smell_warning_spec.rb +9 -11
- data/spec/reek/smells/boolean_parameter_spec.rb +11 -11
- data/spec/reek/smells/control_parameter_spec.rb +40 -40
- data/spec/reek/smells/data_clump_spec.rb +17 -17
- data/spec/reek/smells/duplicate_method_call_spec.rb +56 -33
- data/spec/reek/smells/feature_envy_spec.rb +44 -40
- data/spec/reek/smells/irresponsible_module_spec.rb +1 -1
- data/spec/reek/smells/long_parameter_list_spec.rb +12 -12
- data/spec/reek/smells/long_yield_list_spec.rb +4 -4
- data/spec/reek/smells/module_initialize_spec.rb +3 -3
- data/spec/reek/smells/nested_iterators_spec.rb +71 -52
- data/spec/reek/smells/nil_check_spec.rb +6 -6
- data/spec/reek/smells/prima_donna_method_spec.rb +2 -2
- data/spec/reek/smells/too_many_statements_spec.rb +34 -34
- data/spec/reek/smells/uncommunicative_method_name_spec.rb +1 -1
- data/spec/reek/smells/uncommunicative_module_name_spec.rb +7 -3
- data/spec/reek/smells/uncommunicative_parameter_name_spec.rb +12 -12
- data/spec/reek/smells/uncommunicative_variable_name_spec.rb +28 -38
- data/spec/reek/smells/unused_parameters_spec.rb +16 -17
- data/spec/reek/smells/utility_function_spec.rb +21 -8
- data/spec/reek/spec/should_reek_of_spec.rb +18 -5
- data/spec/reek/spec/should_reek_only_of_spec.rb +7 -1
- data/spec/spec_helper.rb +22 -14
- metadata +15 -20
- data/lib/reek/cli/help_command.rb +0 -15
- data/lib/reek/cli/report/strategy.rb +0 -64
- data/lib/reek/cli/version_command.rb +0 -16
- data/spec/matchers/smell_of_matcher.rb +0 -95
- data/spec/reek/cli/help_command_spec.rb +0 -25
- data/spec/reek/cli/report_spec.rb +0 -132
- data/spec/reek/cli/version_command_spec.rb +0 -31
@@ -8,7 +8,7 @@ describe ShouldReekOnlyOf do
|
|
8
8
|
before :each do
|
9
9
|
@expected_smell_type = :NestedIterators
|
10
10
|
@expected_context_name = 'SmellyClass#big_method'
|
11
|
-
@matcher = ShouldReekOnlyOf.new(@expected_smell_type
|
11
|
+
@matcher = ShouldReekOnlyOf.new(@expected_smell_type)
|
12
12
|
@examiner = double('examiner').as_null_object
|
13
13
|
expect(@examiner).to receive(:smells) { smells }
|
14
14
|
@match = @matcher.matches_examiner?(@examiner)
|
@@ -18,14 +18,17 @@ describe ShouldReekOnlyOf do
|
|
18
18
|
it 'does not match' do
|
19
19
|
expect(@match).to be_falsey
|
20
20
|
end
|
21
|
+
|
21
22
|
context 'when a match was expected' do
|
22
23
|
before :each do
|
23
24
|
@source = 'the_path/to_a/source_file.rb'
|
24
25
|
expect(@examiner).to receive(:description).and_return(@source)
|
25
26
|
end
|
27
|
+
|
26
28
|
it 'reports the source' do
|
27
29
|
expect(@matcher.failure_message).to match(@source)
|
28
30
|
end
|
31
|
+
|
29
32
|
it 'reports the expected smell class' do
|
30
33
|
expect(@matcher.failure_message).to match(@expected_smell_type.to_s)
|
31
34
|
end
|
@@ -86,12 +89,15 @@ describe ShouldReekOnlyOf do
|
|
86
89
|
[build(:smell_warning, smell_detector: detector,
|
87
90
|
message: "message mentioning #{@expected_context_name}")]
|
88
91
|
end
|
92
|
+
|
89
93
|
it 'matches' do
|
90
94
|
expect(@match).to be_truthy
|
91
95
|
end
|
96
|
+
|
92
97
|
it 'reports the expected smell when no match was expected' do
|
93
98
|
expect(@matcher.failure_message_when_negated).to match(@expected_smell_type.to_s)
|
94
99
|
end
|
100
|
+
|
95
101
|
it 'reports the source when no match was expected' do
|
96
102
|
source = 'the_path/to_a/source_file.rb'
|
97
103
|
expect(@examiner).to receive(:description).and_return(source)
|
data/spec/spec_helper.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'reek/spec'
|
2
2
|
require 'reek/source/ast_node_class_map'
|
3
|
+
require 'reek/configuration/app_configuration'
|
3
4
|
|
4
|
-
require 'matchers/smell_of_matcher'
|
5
5
|
require 'factory_girl'
|
6
6
|
|
7
7
|
begin
|
@@ -13,22 +13,30 @@ FactoryGirl.find_definitions
|
|
13
13
|
|
14
14
|
SAMPLES_DIR = 'spec/samples'
|
15
15
|
|
16
|
-
# :reek:UncommunicativeMethodName
|
17
|
-
def s(type, *children)
|
18
|
-
@klass_map ||= Reek::Source::AstNodeClassMap.new
|
19
|
-
@klass_map.klass_for(type).new(type, children)
|
20
|
-
end
|
21
|
-
|
22
|
-
def ast(*args)
|
23
|
-
s(*args)
|
24
|
-
end
|
25
|
-
|
26
16
|
# Simple helpers for our specs.
|
27
17
|
module Helpers
|
28
|
-
def with_test_config(
|
29
|
-
|
18
|
+
def with_test_config(config)
|
19
|
+
if config.is_a? String
|
20
|
+
Reek::Configuration::AppConfiguration.load_from_file(config)
|
21
|
+
elsif config.is_a? Hash
|
22
|
+
Reek::Configuration::AppConfiguration.class_eval do
|
23
|
+
@configuration = config
|
24
|
+
end
|
25
|
+
else
|
26
|
+
raise "Unknown config given in `with_test_config`: #{config.inspect}"
|
27
|
+
end
|
30
28
|
yield if block_given?
|
31
|
-
Configuration::AppConfiguration.reset
|
29
|
+
Reek::Configuration::AppConfiguration.reset
|
30
|
+
end
|
31
|
+
|
32
|
+
# :reek:UncommunicativeMethodName
|
33
|
+
def s(type, *children)
|
34
|
+
@klass_map ||= Reek::Source::AstNodeClassMap.new
|
35
|
+
@klass_map.klass_for(type).new(type, children)
|
36
|
+
end
|
37
|
+
|
38
|
+
def ast(*args)
|
39
|
+
s(*args)
|
32
40
|
end
|
33
41
|
end
|
34
42
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: reek
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kevin Rutherford
|
@@ -18,14 +18,14 @@ dependencies:
|
|
18
18
|
requirements:
|
19
19
|
- - "~>"
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 2.2
|
21
|
+
version: '2.2'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
requirements:
|
26
26
|
- - "~>"
|
27
27
|
- !ruby/object:Gem::Version
|
28
|
-
version: 2.2
|
28
|
+
version: '2.2'
|
29
29
|
- !ruby/object:Gem::Dependency
|
30
30
|
name: unparser
|
31
31
|
requirement: !ruby/object:Gem::Requirement
|
@@ -44,22 +44,16 @@ dependencies:
|
|
44
44
|
name: rainbow
|
45
45
|
requirement: !ruby/object:Gem::Requirement
|
46
46
|
requirements:
|
47
|
-
- - "
|
48
|
-
- !ruby/object:Gem::Version
|
49
|
-
version: '1.99'
|
50
|
-
- - "<"
|
47
|
+
- - "~>"
|
51
48
|
- !ruby/object:Gem::Version
|
52
|
-
version: '
|
49
|
+
version: '2.0'
|
53
50
|
type: :runtime
|
54
51
|
prerelease: false
|
55
52
|
version_requirements: !ruby/object:Gem::Requirement
|
56
53
|
requirements:
|
57
|
-
- - "
|
58
|
-
- !ruby/object:Gem::Version
|
59
|
-
version: '1.99'
|
60
|
-
- - "<"
|
54
|
+
- - "~>"
|
61
55
|
- !ruby/object:Gem::Version
|
62
|
-
version: '
|
56
|
+
version: '2.0'
|
63
57
|
- !ruby/object:Gem::Dependency
|
64
58
|
name: bundler
|
65
59
|
requirement: !ruby/object:Gem::Requirement
|
@@ -208,14 +202,14 @@ files:
|
|
208
202
|
- lib/reek.rb
|
209
203
|
- lib/reek/cli/application.rb
|
210
204
|
- lib/reek/cli/command.rb
|
211
|
-
- lib/reek/cli/help_command.rb
|
212
205
|
- lib/reek/cli/input.rb
|
206
|
+
- lib/reek/cli/option_interpreter.rb
|
213
207
|
- lib/reek/cli/options.rb
|
214
208
|
- lib/reek/cli/reek_command.rb
|
215
209
|
- lib/reek/cli/report/formatter.rb
|
210
|
+
- lib/reek/cli/report/heading_formatter.rb
|
211
|
+
- lib/reek/cli/report/location_formatter.rb
|
216
212
|
- lib/reek/cli/report/report.rb
|
217
|
-
- lib/reek/cli/report/strategy.rb
|
218
|
-
- lib/reek/cli/version_command.rb
|
219
213
|
- lib/reek/configuration/app_configuration.rb
|
220
214
|
- lib/reek/configuration/configuration_file_finder.rb
|
221
215
|
- lib/reek/core/code_context.rb
|
@@ -281,11 +275,11 @@ files:
|
|
281
275
|
- spec/factories/factories.rb
|
282
276
|
- spec/gem/updates_spec.rb
|
283
277
|
- spec/gem/yard_spec.rb
|
284
|
-
- spec/matchers/smell_of_matcher.rb
|
285
278
|
- spec/quality/reek_source_spec.rb
|
286
|
-
- spec/reek/cli/
|
287
|
-
- spec/reek/cli/
|
288
|
-
- spec/reek/cli/
|
279
|
+
- spec/reek/cli/html_report_spec.rb
|
280
|
+
- spec/reek/cli/option_interperter_spec.rb
|
281
|
+
- spec/reek/cli/text_report_spec.rb
|
282
|
+
- spec/reek/cli/yaml_report_spec.rb
|
289
283
|
- spec/reek/configuration/app_configuration_spec.rb
|
290
284
|
- spec/reek/configuration/configuration_file_finder_spec.rb
|
291
285
|
- spec/reek/core/code_context_spec.rb
|
@@ -295,6 +289,7 @@ files:
|
|
295
289
|
- spec/reek/core/object_refs_spec.rb
|
296
290
|
- spec/reek/core/singleton_method_context_spec.rb
|
297
291
|
- spec/reek/core/smell_configuration_spec.rb
|
292
|
+
- spec/reek/core/smell_repository_spec.rb
|
298
293
|
- spec/reek/core/stop_context_spec.rb
|
299
294
|
- spec/reek/core/warning_collector_spec.rb
|
300
295
|
- spec/reek/examiner_spec.rb
|
@@ -1,15 +0,0 @@
|
|
1
|
-
require 'reek/cli/command'
|
2
|
-
|
3
|
-
module Reek
|
4
|
-
module Cli
|
5
|
-
#
|
6
|
-
# A command to display usage information for this application.
|
7
|
-
#
|
8
|
-
class HelpCommand < Command
|
9
|
-
def execute(view)
|
10
|
-
view.output(@options.help_text)
|
11
|
-
view.report_success
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
@@ -1,64 +0,0 @@
|
|
1
|
-
module Reek
|
2
|
-
module Cli
|
3
|
-
module Report
|
4
|
-
module Strategy
|
5
|
-
#
|
6
|
-
# Base class for report startegies.
|
7
|
-
# Each gathers results according to strategy chosen
|
8
|
-
#
|
9
|
-
class Base
|
10
|
-
attr_reader :report_formatter, :warning_formatter, :examiners
|
11
|
-
|
12
|
-
def initialize(report_formatter, warning_formatter, examiners)
|
13
|
-
@report_formatter = report_formatter
|
14
|
-
@warning_formatter = warning_formatter
|
15
|
-
@examiners = examiners
|
16
|
-
end
|
17
|
-
|
18
|
-
def summarize_single_examiner(examiner)
|
19
|
-
result = report_formatter.header examiner
|
20
|
-
if examiner.smelly?
|
21
|
-
formatted_list = report_formatter.format_list(examiner.smells,
|
22
|
-
warning_formatter)
|
23
|
-
result += ":\n#{formatted_list}"
|
24
|
-
end
|
25
|
-
result
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
#
|
30
|
-
# Lists out each examiner, even if it has no smell
|
31
|
-
#
|
32
|
-
class Verbose < Base
|
33
|
-
def gather_results
|
34
|
-
examiners.each_with_object([]) do |examiner, result|
|
35
|
-
result << summarize_single_examiner(examiner)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
#
|
41
|
-
# Lists only smelly examiners
|
42
|
-
#
|
43
|
-
class Quiet < Base
|
44
|
-
def gather_results
|
45
|
-
examiners.each_with_object([]) do |examiner, result|
|
46
|
-
result << summarize_single_examiner(examiner) if examiner.smelly?
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
#
|
52
|
-
# Lists smells without summarization
|
53
|
-
# Used for yaml and html reports
|
54
|
-
#
|
55
|
-
class Normal < Base
|
56
|
-
def gather_results
|
57
|
-
examiners.each_with_object([]) { |examiner, smells| smells << examiner.smells }.
|
58
|
-
flatten
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
require 'reek'
|
2
|
-
require 'reek/cli/command'
|
3
|
-
|
4
|
-
module Reek
|
5
|
-
module Cli
|
6
|
-
#
|
7
|
-
# A command to report the application's current version number.
|
8
|
-
#
|
9
|
-
class VersionCommand < Command
|
10
|
-
def execute(view)
|
11
|
-
view.output("#{@options.program_name} #{Reek::VERSION}\n")
|
12
|
-
view.report_success
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
@@ -1,95 +0,0 @@
|
|
1
|
-
module SmellOfMatcher
|
2
|
-
class SmellOf
|
3
|
-
def initialize(klass, *expected_smells)
|
4
|
-
@klass = klass
|
5
|
-
@expected_smells = expected_smells
|
6
|
-
@config = {}
|
7
|
-
end
|
8
|
-
|
9
|
-
def failure_message
|
10
|
-
"Expected #{@source.desc} to smell of #{@klass}, but it didn't: #{@reason}"
|
11
|
-
end
|
12
|
-
|
13
|
-
def failure_message_when_negated
|
14
|
-
"Expected #{@source.desc} not to smell of #{@klass}, but it did"
|
15
|
-
end
|
16
|
-
|
17
|
-
def matches?(src)
|
18
|
-
@source = src.to_reek_source
|
19
|
-
|
20
|
-
detect_smells
|
21
|
-
|
22
|
-
return false if no_smells_found?
|
23
|
-
return false if wrong_number_of_smells_found?
|
24
|
-
return false if wrong_smell_details_found?
|
25
|
-
|
26
|
-
true
|
27
|
-
end
|
28
|
-
|
29
|
-
def with_config(options)
|
30
|
-
@config = options
|
31
|
-
self
|
32
|
-
end
|
33
|
-
|
34
|
-
private
|
35
|
-
|
36
|
-
def detect_smells
|
37
|
-
tree = @source.syntax_tree
|
38
|
-
ctx = case tree.type
|
39
|
-
when :def, :defs
|
40
|
-
MethodContext.new(nil, tree)
|
41
|
-
when :module, :class
|
42
|
-
ModuleContext.new(nil, tree)
|
43
|
-
else
|
44
|
-
CodeContext.new(nil, tree)
|
45
|
-
end
|
46
|
-
detector = @klass.new(@source.desc, @klass.default_config.merge(@config))
|
47
|
-
detector.examine(ctx)
|
48
|
-
@actual_smells = detector.smells_found.to_a
|
49
|
-
end
|
50
|
-
|
51
|
-
def no_smells_found?
|
52
|
-
return false if @actual_smells.any?
|
53
|
-
@reason = 'no smells found by detector'
|
54
|
-
true
|
55
|
-
end
|
56
|
-
|
57
|
-
def wrong_number_of_smells_found?
|
58
|
-
return false if @expected_smells.empty?
|
59
|
-
return false if expected_number_of_smells == actual_number_of_smells
|
60
|
-
|
61
|
-
@reason = "expected #{expected_number_of_smells} smell(s), " \
|
62
|
-
"found #{actual_number_of_smells}"
|
63
|
-
true
|
64
|
-
end
|
65
|
-
|
66
|
-
def expected_number_of_smells
|
67
|
-
@expected_number_of_smells ||= @expected_smells.length
|
68
|
-
end
|
69
|
-
|
70
|
-
def actual_number_of_smells
|
71
|
-
@actual_number_of_smells ||= @actual_smells.length
|
72
|
-
end
|
73
|
-
|
74
|
-
def wrong_smell_details_found?
|
75
|
-
@expected_smells.zip(@actual_smells).each do |expected_smell, actual_smell|
|
76
|
-
expected_smell.each do |key, value|
|
77
|
-
actual_value = actual_smell.parameters[key]
|
78
|
-
next if actual_value == value
|
79
|
-
|
80
|
-
@reason = "expected #{key} to be #{value}, was #{actual_value}"
|
81
|
-
return true
|
82
|
-
end
|
83
|
-
end
|
84
|
-
false
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
def smell_of(klass, *smells)
|
89
|
-
SmellOf.new(klass, *smells)
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
RSpec.configure do |config|
|
94
|
-
config.include(SmellOfMatcher)
|
95
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'reek/cli/help_command'
|
3
|
-
|
4
|
-
include Reek::Cli
|
5
|
-
|
6
|
-
describe HelpCommand do
|
7
|
-
before :each do
|
8
|
-
@help_text = 'Piece of interesting text'
|
9
|
-
@parser = double('parser')
|
10
|
-
allow(@parser).to receive(:help_text).and_return @help_text
|
11
|
-
@cmd = HelpCommand.new(@parser)
|
12
|
-
@view = double('view').as_null_object
|
13
|
-
end
|
14
|
-
|
15
|
-
it 'displays the correct text on the view' do
|
16
|
-
expect(@view).to receive(:output).with(@help_text)
|
17
|
-
@cmd.execute(@view)
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'tells the view it succeeded' do
|
21
|
-
expect(@view).not_to receive(:report_smells)
|
22
|
-
expect(@view).to receive(:report_success)
|
23
|
-
@cmd.execute(@view)
|
24
|
-
end
|
25
|
-
end
|
@@ -1,132 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'reek/examiner'
|
3
|
-
require 'reek/cli/report/report'
|
4
|
-
require 'reek/cli/report/formatter'
|
5
|
-
require 'reek/cli/report/strategy'
|
6
|
-
require 'rainbow'
|
7
|
-
require 'stringio'
|
8
|
-
|
9
|
-
include Reek
|
10
|
-
include Reek::Cli
|
11
|
-
|
12
|
-
def capture_output_stream
|
13
|
-
$stdout = StringIO.new
|
14
|
-
yield
|
15
|
-
$stdout.string
|
16
|
-
ensure
|
17
|
-
$stdout = STDOUT
|
18
|
-
end
|
19
|
-
|
20
|
-
def report_options
|
21
|
-
{
|
22
|
-
warning_formatter: Report::SimpleWarningFormatter,
|
23
|
-
report_formatter: Report::Formatter,
|
24
|
-
strategy: Report::Strategy::Quiet
|
25
|
-
}
|
26
|
-
end
|
27
|
-
|
28
|
-
describe Report::TextReport, ' when empty' do
|
29
|
-
context 'empty source' do
|
30
|
-
let(:examiner) { Examiner.new('') }
|
31
|
-
|
32
|
-
def report(obj)
|
33
|
-
obj.add_examiner examiner
|
34
|
-
end
|
35
|
-
|
36
|
-
it 'has an empty quiet_report' do
|
37
|
-
tr = Report::TextReport.new
|
38
|
-
tr.add_examiner(examiner)
|
39
|
-
expect { tr.show }.to_not output.to_stdout
|
40
|
-
end
|
41
|
-
|
42
|
-
context 'when output format is html' do
|
43
|
-
it 'has the text 0 total warnings' do
|
44
|
-
html_report = report(Report::HtmlReport.new(report_options))
|
45
|
-
html_report.show
|
46
|
-
|
47
|
-
file = File.expand_path('../../../../reek.html', __FILE__)
|
48
|
-
text = File.read(file)
|
49
|
-
File.delete(file)
|
50
|
-
|
51
|
-
expect(text).to include('0 total warnings')
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
context 'when output format is yaml' do
|
56
|
-
it 'prints empty yaml' do
|
57
|
-
yaml_report = report(Report::YamlReport.new(report_options))
|
58
|
-
result = capture_output_stream { yaml_report.show }
|
59
|
-
expect(result).to match(/^--- \[\]\n.*$/)
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
context 'when output format is text' do
|
64
|
-
it 'prints nothing' do
|
65
|
-
text_report = report(Report::TextReport.new)
|
66
|
-
expect { text_report.show }.to_not output.to_stdout
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
context 'with a couple of smells' do
|
72
|
-
before :each do
|
73
|
-
@examiner = Examiner.new('def simple(a) a[3] end')
|
74
|
-
@rpt = Report::TextReport.new report_options
|
75
|
-
end
|
76
|
-
|
77
|
-
context 'with colors disabled' do
|
78
|
-
before :each do
|
79
|
-
Rainbow.enabled = false
|
80
|
-
@result = @rpt.add_examiner(@examiner).smells.first
|
81
|
-
end
|
82
|
-
|
83
|
-
it 'has a header' do
|
84
|
-
expect(@result).to match('string -- 2 warnings')
|
85
|
-
end
|
86
|
-
|
87
|
-
it 'should mention every smell name' do
|
88
|
-
expect(@result).to include('UncommunicativeParameterName')
|
89
|
-
expect(@result).to include('FeatureEnvy')
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
context 'with colors enabled' do
|
94
|
-
before :each do
|
95
|
-
Rainbow.enabled = true
|
96
|
-
end
|
97
|
-
|
98
|
-
context 'with non smelly files' do
|
99
|
-
before :each do
|
100
|
-
Rainbow.enabled = true
|
101
|
-
@rpt.add_examiner(Examiner.new('def simple() puts "a" end'))
|
102
|
-
@rpt.add_examiner(Examiner.new('def simple() puts "a" end'))
|
103
|
-
@result = @rpt.smells
|
104
|
-
end
|
105
|
-
|
106
|
-
it 'has a footer in color' do
|
107
|
-
result = capture_output_stream { @rpt.show }
|
108
|
-
expect(result).to end_with "\e[32m0 total warnings\n\e[0m"
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
|
-
context 'with smelly files' do
|
113
|
-
before :each do
|
114
|
-
Rainbow.enabled = true
|
115
|
-
@rpt.add_examiner(Examiner.new('def simple(a) a[3] end'))
|
116
|
-
@rpt.add_examiner(Examiner.new('def simple(a) a[3] end'))
|
117
|
-
@result = @rpt.smells
|
118
|
-
end
|
119
|
-
|
120
|
-
it 'has a header in color' do
|
121
|
-
expect(@result.first).
|
122
|
-
to start_with "\e[36mstring -- \e[0m\e[33m2 warning\e[0m\e[33ms\e[0m"
|
123
|
-
end
|
124
|
-
|
125
|
-
it 'has a footer in color' do
|
126
|
-
result = capture_output_stream { @rpt.show }
|
127
|
-
expect(result).to end_with "\e[31m4 total warnings\n\e[0m"
|
128
|
-
end
|
129
|
-
end
|
130
|
-
end
|
131
|
-
end
|
132
|
-
end
|