ridecharge-rubocop 0.0.1

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 (219) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +22 -0
  3. data/.rspec +1 -0
  4. data/.travis.yml +14 -0
  5. data/CHANGELOG.md +0 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE.txt +22 -0
  8. data/README.md +35 -0
  9. data/Rakefile +22 -0
  10. data/bin/ridecharge-rubocop +49 -0
  11. data/config/0default.yml +8 -0
  12. data/config/fleet-magic-todo.yml +380 -0
  13. data/config/rc-todo.yml +190 -0
  14. data/config/ridecharge-rubocop_todo.yml +73 -0
  15. data/config/rubocop/default.yml +308 -0
  16. data/config/rubocop/disabled.yml +9 -0
  17. data/config/rubocop/enabled.yml +648 -0
  18. data/config/standard-todo.yml +24 -0
  19. data/config/tabs.yml +15 -0
  20. data/config/vehicle-todo.yml +195 -0
  21. data/lib/ridecharge/rubocop.rb +2 -0
  22. data/lib/ridecharge/rubocop/version.rb +5 -0
  23. data/lib/rubocop/config_loader_monkeypatch.rb +117 -0
  24. data/lib/rubocop/ridecharge.rb +1 -0
  25. data/ridecharge-rubocop.gemspec +25 -0
  26. data/spec/isolated_environment_spec.rb +24 -0
  27. data/spec/project_spec.rb +118 -0
  28. data/spec/rubocop/cli_spec.rb +1385 -0
  29. data/spec/rubocop/config_loader_spec.rb +328 -0
  30. data/spec/rubocop/config_spec.rb +179 -0
  31. data/spec/rubocop/config_store_spec.rb +53 -0
  32. data/spec/rubocop/cop/commissioner_spec.rb +83 -0
  33. data/spec/rubocop/cop/cop_spec.rb +114 -0
  34. data/spec/rubocop/cop/corrector_spec.rb +59 -0
  35. data/spec/rubocop/cop/lint/ambiguous_operator_spec.rb +113 -0
  36. data/spec/rubocop/cop/lint/ambiguous_regexp_literal_spec.rb +35 -0
  37. data/spec/rubocop/cop/lint/assignment_in_condition_spec.rb +107 -0
  38. data/spec/rubocop/cop/lint/block_alignment_spec.rb +411 -0
  39. data/spec/rubocop/cop/lint/condition_position_spec.rb +49 -0
  40. data/spec/rubocop/cop/lint/debugger_spec.rb +39 -0
  41. data/spec/rubocop/cop/lint/else_layout_spec.rb +65 -0
  42. data/spec/rubocop/cop/lint/empty_ensure_spec.rb +27 -0
  43. data/spec/rubocop/cop/lint/end_alignment_spec.rb +136 -0
  44. data/spec/rubocop/cop/lint/end_in_method_spec.rb +29 -0
  45. data/spec/rubocop/cop/lint/ensure_return_spec.rb +39 -0
  46. data/spec/rubocop/cop/lint/eval_spec.rb +35 -0
  47. data/spec/rubocop/cop/lint/handle_exceptions_spec.rb +30 -0
  48. data/spec/rubocop/cop/lint/invalid_character_literal_spec.rb +33 -0
  49. data/spec/rubocop/cop/lint/literal_in_condition_spec.rb +63 -0
  50. data/spec/rubocop/cop/lint/loop_spec.rb +27 -0
  51. data/spec/rubocop/cop/lint/parentheses_as_grouped_expression_spec.rb +57 -0
  52. data/spec/rubocop/cop/lint/require_parentheses_spec.rb +82 -0
  53. data/spec/rubocop/cop/lint/rescue_exception_spec.rb +131 -0
  54. data/spec/rubocop/cop/lint/shadowing_outer_local_variable_spec.rb +237 -0
  55. data/spec/rubocop/cop/lint/syntax_spec.rb +34 -0
  56. data/spec/rubocop/cop/lint/unreachable_code_spec.rb +63 -0
  57. data/spec/rubocop/cop/lint/useless_assignment_spec.rb +1570 -0
  58. data/spec/rubocop/cop/lint/useless_comparison_spec.rb +30 -0
  59. data/spec/rubocop/cop/lint/useless_else_without_rescue_spec.rb +48 -0
  60. data/spec/rubocop/cop/lint/useless_setter_call_spec.rb +149 -0
  61. data/spec/rubocop/cop/lint/void_spec.rb +57 -0
  62. data/spec/rubocop/cop/offence_spec.rb +133 -0
  63. data/spec/rubocop/cop/rails/default_scope_spec.rb +37 -0
  64. data/spec/rubocop/cop/rails/has_and_belongs_to_many_spec.rb +13 -0
  65. data/spec/rubocop/cop/rails/output_spec.rb +41 -0
  66. data/spec/rubocop/cop/rails/read_attribute_spec.rb +13 -0
  67. data/spec/rubocop/cop/rails/validation_spec.rb +21 -0
  68. data/spec/rubocop/cop/style/access_modifier_indentation_spec.rb +361 -0
  69. data/spec/rubocop/cop/style/accessor_method_name_spec.rb +81 -0
  70. data/spec/rubocop/cop/style/alias_spec.rb +59 -0
  71. data/spec/rubocop/cop/style/align_array_spec.rb +75 -0
  72. data/spec/rubocop/cop/style/align_hash_spec.rb +310 -0
  73. data/spec/rubocop/cop/style/align_parameters_spec.rb +222 -0
  74. data/spec/rubocop/cop/style/and_or_spec.rb +57 -0
  75. data/spec/rubocop/cop/style/ascii_comments_spec.rb +22 -0
  76. data/spec/rubocop/cop/style/ascii_identifiers_spec.rb +36 -0
  77. data/spec/rubocop/cop/style/attr_spec.rb +19 -0
  78. data/spec/rubocop/cop/style/begin_block_spec.rb +13 -0
  79. data/spec/rubocop/cop/style/block_comments_spec.rb +21 -0
  80. data/spec/rubocop/cop/style/block_nesting_spec.rb +156 -0
  81. data/spec/rubocop/cop/style/blocks_spec.rb +99 -0
  82. data/spec/rubocop/cop/style/braces_around_hash_parameters_spec.rb +284 -0
  83. data/spec/rubocop/cop/style/case_equality_spec.rb +12 -0
  84. data/spec/rubocop/cop/style/case_indentation_spec.rb +289 -0
  85. data/spec/rubocop/cop/style/character_literal_spec.rb +37 -0
  86. data/spec/rubocop/cop/style/class_and_module_camel_case_spec.rb +40 -0
  87. data/spec/rubocop/cop/style/class_length_spec.rb +131 -0
  88. data/spec/rubocop/cop/style/class_methods_spec.rb +45 -0
  89. data/spec/rubocop/cop/style/class_vars_spec.rb +19 -0
  90. data/spec/rubocop/cop/style/collection_methods_spec.rb +48 -0
  91. data/spec/rubocop/cop/style/colon_method_call_spec.rb +60 -0
  92. data/spec/rubocop/cop/style/comment_annotation_spec.rb +86 -0
  93. data/spec/rubocop/cop/style/constant_name_spec.rb +65 -0
  94. data/spec/rubocop/cop/style/cyclomatic_complexity_spec.rb +204 -0
  95. data/spec/rubocop/cop/style/def_with_parentheses_spec.rb +39 -0
  96. data/spec/rubocop/cop/style/documentation_spec.rb +123 -0
  97. data/spec/rubocop/cop/style/dot_position_spec.rb +94 -0
  98. data/spec/rubocop/cop/style/empty_line_between_defs_spec.rb +127 -0
  99. data/spec/rubocop/cop/style/empty_lines_around_access_modifier_spec.rb +56 -0
  100. data/spec/rubocop/cop/style/empty_lines_around_body_spec.rb +131 -0
  101. data/spec/rubocop/cop/style/empty_lines_spec.rb +40 -0
  102. data/spec/rubocop/cop/style/empty_literal_spec.rb +100 -0
  103. data/spec/rubocop/cop/style/encoding_spec.rb +56 -0
  104. data/spec/rubocop/cop/style/end_block_spec.rb +13 -0
  105. data/spec/rubocop/cop/style/end_of_line_spec.rb +47 -0
  106. data/spec/rubocop/cop/style/even_odd_spec.rb +75 -0
  107. data/spec/rubocop/cop/style/favor_join_spec.rb +31 -0
  108. data/spec/rubocop/cop/style/favor_sprintf_spec.rb +47 -0
  109. data/spec/rubocop/cop/style/favor_unless_over_negated_if_spec.rb +76 -0
  110. data/spec/rubocop/cop/style/favor_until_over_negated_while_spec.rb +41 -0
  111. data/spec/rubocop/cop/style/final_newline_spec.rb +30 -0
  112. data/spec/rubocop/cop/style/flip_flop_spec.rb +23 -0
  113. data/spec/rubocop/cop/style/for_spec.rb +105 -0
  114. data/spec/rubocop/cop/style/global_vars_spec.rb +34 -0
  115. data/spec/rubocop/cop/style/hash_methods_spec.rb +45 -0
  116. data/spec/rubocop/cop/style/hash_syntax_spec.rb +131 -0
  117. data/spec/rubocop/cop/style/if_unless_modifier_spec.rb +128 -0
  118. data/spec/rubocop/cop/style/if_with_semicolon_spec.rb +19 -0
  119. data/spec/rubocop/cop/style/indentation_consistency_spec.rb +490 -0
  120. data/spec/rubocop/cop/style/indentation_width_spec.rb +470 -0
  121. data/spec/rubocop/cop/style/lambda_call_spec.rb +65 -0
  122. data/spec/rubocop/cop/style/lambda_spec.rb +41 -0
  123. data/spec/rubocop/cop/style/leading_comment_space_spec.rb +64 -0
  124. data/spec/rubocop/cop/style/line_end_concatenation_spec.rb +34 -0
  125. data/spec/rubocop/cop/style/line_length_spec.rb +20 -0
  126. data/spec/rubocop/cop/style/method_call_parentheses_spec.rb +59 -0
  127. data/spec/rubocop/cop/style/method_called_on_do_end_block_spec.rb +60 -0
  128. data/spec/rubocop/cop/style/method_def_parentheses_spec.rb +106 -0
  129. data/spec/rubocop/cop/style/method_length_spec.rb +147 -0
  130. data/spec/rubocop/cop/style/method_name_spec.rb +125 -0
  131. data/spec/rubocop/cop/style/module_function_spec.rb +24 -0
  132. data/spec/rubocop/cop/style/multiline_block_chain_spec.rb +78 -0
  133. data/spec/rubocop/cop/style/multiline_if_then_spec.rb +107 -0
  134. data/spec/rubocop/cop/style/multiline_ternary_operator_spec.rb +18 -0
  135. data/spec/rubocop/cop/style/nested_ternary_operator_spec.rb +21 -0
  136. data/spec/rubocop/cop/style/nil_comparison_spec.rb +30 -0
  137. data/spec/rubocop/cop/style/not_spec.rb +22 -0
  138. data/spec/rubocop/cop/style/numeric_literals_spec.rb +64 -0
  139. data/spec/rubocop/cop/style/one_line_conditional_spec.rb +13 -0
  140. data/spec/rubocop/cop/style/op_method_spec.rb +74 -0
  141. data/spec/rubocop/cop/style/parameter_lists_spec.rb +44 -0
  142. data/spec/rubocop/cop/style/parentheses_around_condition_spec.rb +122 -0
  143. data/spec/rubocop/cop/style/perl_backrefs_spec.rb +17 -0
  144. data/spec/rubocop/cop/style/predicate_name_spec.rb +25 -0
  145. data/spec/rubocop/cop/style/proc_spec.rb +27 -0
  146. data/spec/rubocop/cop/style/raise_args_spec.rb +82 -0
  147. data/spec/rubocop/cop/style/redundant_begin_spec.rb +57 -0
  148. data/spec/rubocop/cop/style/redundant_exception_spec.rb +27 -0
  149. data/spec/rubocop/cop/style/redundant_return_spec.rb +171 -0
  150. data/spec/rubocop/cop/style/redundant_self_spec.rb +142 -0
  151. data/spec/rubocop/cop/style/regexp_literal_spec.rb +83 -0
  152. data/spec/rubocop/cop/style/rescue_modifier_spec.rb +116 -0
  153. data/spec/rubocop/cop/style/semicolon_spec.rb +100 -0
  154. data/spec/rubocop/cop/style/signal_exception_spec.rb +266 -0
  155. data/spec/rubocop/cop/style/single_line_block_params_spec.rb +68 -0
  156. data/spec/rubocop/cop/style/single_line_methods_spec.rb +52 -0
  157. data/spec/rubocop/cop/style/space_after_colon_spec.rb +38 -0
  158. data/spec/rubocop/cop/style/space_after_comma_spec.rb +30 -0
  159. data/spec/rubocop/cop/style/space_after_control_keyword_spec.rb +84 -0
  160. data/spec/rubocop/cop/style/space_after_method_name_spec.rb +70 -0
  161. data/spec/rubocop/cop/style/space_after_not_spec.rb +22 -0
  162. data/spec/rubocop/cop/style/space_after_semicolon_spec.rb +23 -0
  163. data/spec/rubocop/cop/style/space_around_block_braces_spec.rb +283 -0
  164. data/spec/rubocop/cop/style/space_around_equals_in_parameter_default_spec.rb +33 -0
  165. data/spec/rubocop/cop/style/space_around_operators_spec.rb +325 -0
  166. data/spec/rubocop/cop/style/space_before_modifier_keyword_spec.rb +70 -0
  167. data/spec/rubocop/cop/style/space_inside_brackets_spec.rb +52 -0
  168. data/spec/rubocop/cop/style/space_inside_hash_literal_braces_spec.rb +138 -0
  169. data/spec/rubocop/cop/style/space_inside_parens_spec.rb +34 -0
  170. data/spec/rubocop/cop/style/special_global_vars_spec.rb +56 -0
  171. data/spec/rubocop/cop/style/string_literals_spec.rb +212 -0
  172. data/spec/rubocop/cop/style/symbol_array_spec.rb +37 -0
  173. data/spec/rubocop/cop/style/tab_spec.rb +17 -0
  174. data/spec/rubocop/cop/style/trailing_blank_lines_spec.rb +43 -0
  175. data/spec/rubocop/cop/style/trailing_comma_spec.rb +230 -0
  176. data/spec/rubocop/cop/style/trailing_whitespace_spec.rb +30 -0
  177. data/spec/rubocop/cop/style/trivial_accessors_spec.rb +415 -0
  178. data/spec/rubocop/cop/style/unless_else_spec.rb +25 -0
  179. data/spec/rubocop/cop/style/variable_interpolation_spec.rb +47 -0
  180. data/spec/rubocop/cop/style/variable_name_spec.rb +107 -0
  181. data/spec/rubocop/cop/style/when_then_spec.rb +41 -0
  182. data/spec/rubocop/cop/style/while_until_do_spec.rb +53 -0
  183. data/spec/rubocop/cop/style/while_until_modifier_spec.rb +75 -0
  184. data/spec/rubocop/cop/style/word_array_spec.rb +97 -0
  185. data/spec/rubocop/cop/team_spec.rb +156 -0
  186. data/spec/rubocop/cop/util_spec.rb +49 -0
  187. data/spec/rubocop/cop/variable_inspector/assignment_spec.rb +213 -0
  188. data/spec/rubocop/cop/variable_inspector/locatable_spec.rb +734 -0
  189. data/spec/rubocop/cop/variable_inspector/scope_spec.rb +184 -0
  190. data/spec/rubocop/cop/variable_inspector/variable_spec.rb +73 -0
  191. data/spec/rubocop/cop/variable_inspector/variable_table_spec.rb +269 -0
  192. data/spec/rubocop/cop/variable_inspector_spec.rb +29 -0
  193. data/spec/rubocop/file_inspector_spec.rb +78 -0
  194. data/spec/rubocop/formatter/base_formatter_spec.rb +191 -0
  195. data/spec/rubocop/formatter/clang_style_formatter_spec.rb +114 -0
  196. data/spec/rubocop/formatter/colorizable_spec.rb +107 -0
  197. data/spec/rubocop/formatter/disabled_config_formatter_spec.rb +50 -0
  198. data/spec/rubocop/formatter/emacs_style_formatter_spec.rb +62 -0
  199. data/spec/rubocop/formatter/file_list_formatter_spec.rb +33 -0
  200. data/spec/rubocop/formatter/formatter_set_spec.rb +132 -0
  201. data/spec/rubocop/formatter/json_formatter_spec.rb +148 -0
  202. data/spec/rubocop/formatter/offence_count_formatter_spec.rb +52 -0
  203. data/spec/rubocop/formatter/progress_formatter_spec.rb +182 -0
  204. data/spec/rubocop/formatter/simple_text_formatter_spec.rb +123 -0
  205. data/spec/rubocop/options_spec.rb +145 -0
  206. data/spec/rubocop/path_util_spec.rb +42 -0
  207. data/spec/rubocop/processed_source_spec.rb +114 -0
  208. data/spec/rubocop/source_parser_spec.rb +139 -0
  209. data/spec/rubocop/target_finder_spec.rb +180 -0
  210. data/spec/rubocop/token_spec.rb +25 -0
  211. data/spec/spec_helper.rb +136 -0
  212. data/spec/support/ast_helper.rb +15 -0
  213. data/spec/support/file_helper.rb +21 -0
  214. data/spec/support/isolated_environment.rb +34 -0
  215. data/spec/support/mri_syntax_checker.rb +73 -0
  216. data/spec/support/shared_context.rb +22 -0
  217. data/spec/support/shared_examples.rb +33 -0
  218. data/spec/support/statement_modifier_helper.rb +41 -0
  219. metadata +511 -0
@@ -0,0 +1,29 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::VariableInspector do
6
+ include AST::Sexp
7
+
8
+ class ExampleInspector
9
+ include Rubocop::Cop::VariableInspector
10
+ end
11
+
12
+ subject(:inspector) { ExampleInspector.new }
13
+
14
+ describe '#process_node' do
15
+ before do
16
+ inspector.variable_table.push_scope(s(:def))
17
+ end
18
+
19
+ context 'when processing lvar node' do
20
+ let(:node) { s(:lvar, :foo) }
21
+
22
+ context 'when the variable is not yet declared' do
23
+ it 'does not raise error' do
24
+ expect { inspector.process_node(node) }.not_to raise_error
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,78 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ class Rubocop::FileInspector
6
+ attr_writer :errors # Needed only for testing.
7
+ end
8
+
9
+ describe Rubocop::FileInspector do
10
+ subject(:inspector) { described_class.new(options) }
11
+ let(:options) { {} }
12
+ let(:offences) { [] }
13
+ let(:errors) { [] }
14
+
15
+ before(:each) do
16
+ $stdout = StringIO.new
17
+ $stderr = StringIO.new
18
+
19
+ allow(inspector).to receive(:inspect_file) do
20
+ inspector.errors = errors
21
+ offences
22
+ end
23
+ end
24
+
25
+ after(:each) do
26
+ $stdout = STDOUT
27
+ $stderr = STDERR
28
+ end
29
+
30
+ describe '#display_error_summary' do
31
+ let(:errors) do
32
+ ['An error occurred while Encoding cop was inspecting file.rb.']
33
+ end
34
+
35
+ it 'displays an error message to stderr when errors are present' do
36
+ inspector.process_files(['file.rb'], nil) {}
37
+ inspector.display_error_summary
38
+ expect($stderr.string.lines.to_a[-6..-5])
39
+ .to eq(["1 error occurred:\n", "#{errors.first}\n"])
40
+ end
41
+ end
42
+
43
+ describe '#process_files' do
44
+ context 'if there are no offences in inspected files' do
45
+ it 'returns false' do
46
+ result = inspector.process_files(['file.rb'], nil) {}
47
+ expect(result).to eq(false)
48
+ end
49
+ end
50
+
51
+ context 'if there is an offence in an inspected file' do
52
+ let(:offences) do
53
+ [Rubocop::Cop::Offence.new(:convention,
54
+ Struct.new(:line, :column,
55
+ :source_line).new(1, 0, ''),
56
+ 'Use alias_method instead of alias.',
57
+ 'Alias')]
58
+ end
59
+
60
+ it 'returns true' do
61
+ expect(inspector.process_files(['file.rb'], nil) {}).to eq(true)
62
+ end
63
+
64
+ it 'sends the offence to a formatter' do
65
+ inspector.process_files(['file.rb'], nil) {}
66
+ expect($stdout.string.split("\n"))
67
+ .to eq(['Inspecting 1 file',
68
+ 'C',
69
+ '',
70
+ 'Offences:',
71
+ '',
72
+ "file.rb:1:1: C: #{offences.first.message}",
73
+ '',
74
+ '1 file inspected, 1 offence detected'])
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,191 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ module Rubocop
6
+ module Formatter
7
+ describe BaseFormatter do
8
+ include FileHelper
9
+
10
+ describe 'how the API methods are invoked', :isolated_environment do
11
+ subject(:formatter) { double('formatter').as_null_object }
12
+ let(:cli) { CLI.new }
13
+ let(:output) { $stdout.string }
14
+
15
+ before do
16
+ create_file('1_offence.rb', [
17
+ '# encoding: utf-8',
18
+ '#' * 90
19
+ ])
20
+
21
+ create_file('4_offences.rb', [
22
+ '# encoding: utf-8',
23
+ 'puts x ',
24
+ 'test;',
25
+ 'top;',
26
+ '#' * 90
27
+ ])
28
+
29
+ create_file('no_offence.rb', [
30
+ '# encoding: utf-8'
31
+ ])
32
+
33
+ allow(SimpleTextFormatter).to receive(:new).and_return(formatter)
34
+ $stdout = StringIO.new
35
+ end
36
+
37
+ after do
38
+ $stdout = STDOUT
39
+ end
40
+
41
+ def run
42
+ cli.run([])
43
+ end
44
+
45
+ describe 'invocation order' do
46
+ subject(:formatter) do
47
+ formatter = double('formatter')
48
+ def formatter.method_missing(method_name, *args)
49
+ return if method_name == :output
50
+ puts method_name
51
+ end
52
+ formatter
53
+ end
54
+
55
+ it 'is called in the proper sequence' do
56
+ run
57
+ expect(output).to eq([
58
+ 'started',
59
+ 'file_started',
60
+ 'file_finished',
61
+ 'file_started',
62
+ 'file_finished',
63
+ 'file_started',
64
+ 'file_finished',
65
+ 'finished',
66
+ ''
67
+ ].join("\n"))
68
+ end
69
+ end
70
+
71
+ shared_examples 'receives all file paths' do |method_name|
72
+ it 'receives all file paths' do
73
+ expected_paths = [
74
+ '1_offence.rb',
75
+ '4_offences.rb',
76
+ 'no_offence.rb'
77
+ ].map { |path| File.expand_path(path) }.sort
78
+
79
+ expect(formatter).to receive(method_name) do |all_files|
80
+ expect(all_files.sort).to eq(expected_paths)
81
+ end
82
+
83
+ run
84
+ end
85
+
86
+ describe 'the passed files paths' do
87
+ it 'is frozen' do
88
+ expect(formatter).to receive(method_name) do |all_files|
89
+ all_files.each do |path|
90
+ expect(path).to be_frozen
91
+ end
92
+ end
93
+ run
94
+ end
95
+ end
96
+ end
97
+
98
+ describe '#started' do
99
+ include_examples 'receives all file paths', :started
100
+ end
101
+
102
+ describe '#finished' do
103
+ context 'when RuboCop finished inspecting all files normally' do
104
+ include_examples 'receives all file paths', :started
105
+ end
106
+
107
+ context 'when RuboCop is interrupted by user' do
108
+ it 'received processed file paths' do
109
+ class << formatter
110
+ attr_reader :processed_file_count
111
+
112
+ def file_finished(file, offences)
113
+ @processed_file_count ||= 0
114
+ @processed_file_count += 1
115
+ end
116
+ end
117
+
118
+ allow(cli).to receive(:wants_to_quit?) do
119
+ formatter.processed_file_count == 2
120
+ end
121
+
122
+ expect(formatter).to receive(:finished) do |processed_files|
123
+ expect(processed_files.size).to eq(2)
124
+ end
125
+
126
+ run
127
+ end
128
+ end
129
+ end
130
+
131
+ shared_examples 'receives a file path' do |method_name|
132
+ it 'receives a file path' do
133
+ expect(formatter).to receive(method_name)
134
+ .with(File.expand_path('1_offence.rb'), anything)
135
+
136
+ expect(formatter).to receive(method_name)
137
+ .with(File.expand_path('4_offences.rb'), anything)
138
+
139
+ expect(formatter).to receive(method_name)
140
+ .with(File.expand_path('no_offence.rb'), anything)
141
+
142
+ run
143
+ end
144
+
145
+ describe 'the passed path' do
146
+ it 'is frozen' do
147
+ expect(formatter)
148
+ .to receive(method_name).exactly(3).times do |path|
149
+ expect(path).to be_frozen
150
+ end
151
+ run
152
+ end
153
+ end
154
+ end
155
+
156
+ describe '#file_started' do
157
+ include_examples 'receives a file path', :file_started
158
+
159
+ it 'receives file specific information hash' do
160
+ expect(formatter).to receive(:file_started)
161
+ .with(anything, an_instance_of(Hash)).exactly(3).times
162
+ run
163
+ end
164
+ end
165
+
166
+ describe '#file_finished' do
167
+ include_examples 'receives a file path', :file_finished
168
+
169
+ it 'receives an array of detected offences for the file' do
170
+ expect(formatter).to receive(:file_finished)
171
+ .exactly(3).times do |file, offences|
172
+ case File.basename(file)
173
+ when '1_offence.rb'
174
+ expect(offences.size).to eq(1)
175
+ when '4_offences.rb'
176
+ expect(offences.size).to eq(4)
177
+ when 'no_offence.rb'
178
+ expect(offences).to be_empty
179
+ else
180
+ fail
181
+ end
182
+ expect(offences.all? { |o| o.is_a?(Rubocop::Cop::Offence) })
183
+ .to be_true
184
+ end
185
+ run
186
+ end
187
+ end
188
+ end
189
+ end
190
+ end
191
+ end
@@ -0,0 +1,114 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+ require 'stringio'
5
+
6
+ module Rubocop
7
+ module Formatter
8
+ describe ClangStyleFormatter do
9
+ subject(:formatter) { described_class.new(output) }
10
+ let(:output) { StringIO.new }
11
+
12
+ describe '#report_file' do
13
+ it 'displays text containing the offending source line' do
14
+ cop = Cop::Cop.new
15
+ source_buffer = Parser::Source::Buffer.new('test', 1)
16
+ source_buffer.source = ('aa'..'az').to_a.join($RS)
17
+ cop.add_offence(nil,
18
+ Parser::Source::Range.new(source_buffer, 0, 2),
19
+ 'message 1')
20
+ cop.add_offence(nil,
21
+ Parser::Source::Range.new(source_buffer, 30, 32),
22
+ 'message 2')
23
+
24
+ formatter.report_file('test', cop.offences)
25
+ expect(output.string).to eq ['test:1:1: C: message 1',
26
+ 'aa',
27
+ '^^',
28
+ 'test:11:1: C: message 2',
29
+ 'ak',
30
+ '^^',
31
+ ''].join("\n")
32
+ end
33
+
34
+ context 'when the source line is blank' do
35
+ it 'does not display offending source line' do
36
+ cop = Cop::Cop.new
37
+ source_buffer = Parser::Source::Buffer.new('test', 1)
38
+ source_buffer.source = ([' ', 'yaba']).to_a.join($RS)
39
+ cop.add_offence(nil,
40
+ Parser::Source::Range.new(source_buffer, 0, 2),
41
+ 'message 1')
42
+ cop.add_offence(nil,
43
+ Parser::Source::Range.new(source_buffer, 6, 10),
44
+ 'message 2')
45
+
46
+ formatter.report_file('test', cop.offences)
47
+ expect(output.string).to eq ['test:1:1: C: message 1',
48
+ 'test:2:1: C: message 2',
49
+ 'yaba',
50
+ '^^^^',
51
+ ''].join("\n")
52
+ end
53
+ end
54
+
55
+ context 'when the offending source spans multiple lines' do
56
+ it 'displays the first line' do
57
+ source = ['do_something([this,',
58
+ ' is,',
59
+ ' target])'].join($RS)
60
+
61
+ source_buffer = Parser::Source::Buffer.new('test', 1)
62
+ source_buffer.source = source
63
+
64
+ location = Parser::Source::Range.new(source_buffer,
65
+ source.index('['),
66
+ source.index(']') + 1)
67
+
68
+ cop = Cop::Cop.new
69
+ cop.add_offence(nil, location, 'message 1')
70
+
71
+ formatter.report_file('test', cop.offences)
72
+ expect(output.string).to eq ['test:1:14: C: message 1',
73
+ 'do_something([this,',
74
+ ' ^^^^^^',
75
+ ''].join("\n")
76
+ end
77
+ end
78
+
79
+ let(:file) { '/path/to/file' }
80
+
81
+ let(:offence) do
82
+ Cop::Offence.new(:convention, location,
83
+ 'This is a message.', 'CopName', corrected)
84
+ end
85
+
86
+ let(:location) do
87
+ source_buffer = Parser::Source::Buffer.new('test', 1)
88
+ source_buffer.source = "a\n"
89
+ Parser::Source::Range.new(source_buffer, 0, 1)
90
+ end
91
+
92
+ context 'when the offence is not corrected' do
93
+ let(:corrected) { false }
94
+
95
+ it 'prints message as-is' do
96
+ formatter.report_file(file, [offence])
97
+ expect(output.string)
98
+ .to include(': This is a message.')
99
+ end
100
+ end
101
+
102
+ context 'when the offence is automatically corrected' do
103
+ let(:corrected) { true }
104
+
105
+ it 'prints [Corrected] along with message' do
106
+ formatter.report_file(file, [offence])
107
+ expect(output.string)
108
+ .to include(': [Corrected] This is a message.')
109
+ end
110
+ end
111
+ end
112
+ end
113
+ end
114
+ end
@@ -0,0 +1,107 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+ require 'rubocop/formatter/colorizable'
5
+ require 'stringio'
6
+
7
+ module Rubocop
8
+ module Formatter
9
+ describe Colorizable do
10
+ let(:formatter_class) do
11
+ Class.new(BaseFormatter) do
12
+ include Colorizable
13
+ end
14
+ end
15
+
16
+ let(:formatter) do
17
+ formatter_class.new(output)
18
+ end
19
+
20
+ let(:output) { double('output') }
21
+
22
+ around do |example|
23
+ original_state = Rainbow.enabled
24
+
25
+ begin
26
+ example.run
27
+ ensure
28
+ Rainbow.enabled = original_state
29
+ end
30
+ end
31
+
32
+ describe '#colorize' do
33
+ subject { formatter.colorize('foo', :red) }
34
+
35
+ shared_examples 'does nothing' do
36
+ it 'does nothing' do
37
+ should == 'foo'
38
+ end
39
+ end
40
+
41
+ context 'when the global Rainbow.enabled is true' do
42
+ before do
43
+ Rainbow.enabled = true
44
+ end
45
+
46
+ context "and the formatter's output is a tty" do
47
+ before do
48
+ allow(output).to receive(:tty?).and_return(true)
49
+ end
50
+
51
+ it 'colorize the passed string' do
52
+ should == "\e[31mfoo\e[0m"
53
+ end
54
+ end
55
+
56
+ context "and the formatter's output is not a tty" do
57
+ before do
58
+ allow(output).to receive(:tty?).and_return(false)
59
+ end
60
+
61
+ include_examples 'does nothing'
62
+ end
63
+ end
64
+
65
+ context 'when the global Rainbow.enabled is false' do
66
+ before do
67
+ Rainbow.enabled = false
68
+ end
69
+
70
+ context "and the formatter's output is a tty" do
71
+ before do
72
+ allow(output).to receive(:tty?).and_return(true)
73
+ end
74
+
75
+ include_examples 'does nothing'
76
+ end
77
+
78
+ context "and the formatter's output is not a tty" do
79
+ before do
80
+ allow(output).to receive(:tty?).and_return(false)
81
+ end
82
+
83
+ include_examples 'does nothing'
84
+ end
85
+ end
86
+ end
87
+
88
+ [
89
+ :black,
90
+ :red,
91
+ :green,
92
+ :yellow,
93
+ :blue,
94
+ :magenta,
95
+ :cyan,
96
+ :white
97
+ ].each do |color|
98
+ describe "##{color}" do
99
+ it "invokes #colorize(string, #{color}" do
100
+ expect(formatter).to receive(:colorize).with('foo', color)
101
+ formatter.send(color, 'foo')
102
+ end
103
+ end
104
+ end
105
+ end
106
+ end
107
+ end