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,470 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::IndentationWidth do
6
+ subject(:cop) { described_class.new }
7
+
8
+ context 'with if statement' do
9
+ it 'registers an offence for bad indentation of an if body' do
10
+ inspect_source(cop,
11
+ ['if cond',
12
+ ' func',
13
+ 'end'])
14
+ expect(cop.messages).to eq(['Use 2 (not 1) spaces for indentation.'])
15
+ end
16
+
17
+ it 'registers an offence for bad indentation of an else body' do
18
+ inspect_source(cop,
19
+ ['if cond',
20
+ ' func1',
21
+ 'else',
22
+ ' func2',
23
+ 'end'])
24
+ expect(cop.messages).to eq(['Use 2 (not 1) spaces for indentation.'])
25
+ end
26
+
27
+ it 'registers an offence for bad indentation of an elsif body' do
28
+ inspect_source(cop,
29
+ ['if a1',
30
+ ' b1',
31
+ 'elsif a2',
32
+ ' b2',
33
+ 'else',
34
+ ' c',
35
+ 'end'])
36
+ expect(cop.messages).to eq(['Use 2 (not 1) spaces for indentation.'])
37
+ end
38
+
39
+ it 'registers offence for bad indentation of ternary inside else' do
40
+ inspect_source(cop,
41
+ ['if a',
42
+ ' b',
43
+ 'else',
44
+ ' x ? y : z',
45
+ 'end'])
46
+ expect(cop.messages)
47
+ .to eq(['Use 2 (not 5) spaces for indentation.'])
48
+ end
49
+
50
+ it 'registers offence for bad indentation of modifier if in else' do
51
+ inspect_source(cop,
52
+ ['if a',
53
+ ' b',
54
+ 'else',
55
+ ' x if y',
56
+ 'end'])
57
+ expect(cop.messages)
58
+ .to eq(['Use 2 (not 3) spaces for indentation.'])
59
+ end
60
+
61
+ it 'accepts a one line if statement' do
62
+ inspect_source(cop,
63
+ ['if cond then func1 else func2 end'])
64
+ expect(cop.offences).to be_empty
65
+ end
66
+
67
+ it 'accepts a correctly aligned if/elsif/else/end' do
68
+ inspect_source(cop,
69
+ ['if a1',
70
+ ' b1',
71
+ 'elsif a2',
72
+ ' b2',
73
+ 'else',
74
+ ' c',
75
+ 'end'])
76
+ expect(cop.offences).to be_empty
77
+ end
78
+
79
+ it 'accepts if/elsif/else/end laid out as a table' do
80
+ inspect_source(cop,
81
+ ['if @io == $stdout then str << "$stdout"',
82
+ 'elsif @io == $stdin then str << "$stdin"',
83
+ 'elsif @io == $stderr then str << "$stderr"',
84
+ 'else str << @io.class.to_s',
85
+ 'end'])
86
+ expect(cop.offences).to be_empty
87
+ end
88
+
89
+ it 'accepts if/then/else/end laid out as another table' do
90
+ inspect_source(cop,
91
+ ["if File.exist?('config.save')",
92
+ 'then ConfigTable.load',
93
+ 'else ConfigTable.new',
94
+ 'end'])
95
+ expect(cop.offences).to be_empty
96
+ end
97
+
98
+ it 'accepts an empty if' do
99
+ inspect_source(cop,
100
+ ['if a',
101
+ 'else',
102
+ 'end'])
103
+ expect(cop.offences).to be_empty
104
+ end
105
+
106
+ it 'accepts an if in assignment with end aligned with variable' do
107
+ inspect_source(cop,
108
+ ['var = if a',
109
+ ' 0',
110
+ 'end',
111
+ '@var = if a',
112
+ ' 0',
113
+ 'end',
114
+ '$var = if a',
115
+ ' 0',
116
+ 'end',
117
+ 'var ||= if a',
118
+ ' 0',
119
+ 'end',
120
+ 'var &&= if a',
121
+ ' 0',
122
+ 'end',
123
+ 'var -= if a',
124
+ ' 0',
125
+ 'end',
126
+ 'VAR = if a',
127
+ ' 0',
128
+ 'end'])
129
+ expect(cop.offences).to be_empty
130
+ end
131
+
132
+ it 'accepts an if/else in assignment with end aligned with variable' do
133
+ inspect_source(cop,
134
+ ['var = if a',
135
+ ' 0',
136
+ 'else',
137
+ ' 1',
138
+ 'end'])
139
+ expect(cop.offences).to be_empty
140
+ end
141
+
142
+ it 'accepts an if/else in assignment with end aligned with variable ' \
143
+ 'and chaining after the end' do
144
+ inspect_source(cop,
145
+ ['var = if a',
146
+ ' 0',
147
+ 'else',
148
+ ' 1',
149
+ 'end.abc.join("")'])
150
+ expect(cop.offences).to be_empty
151
+ end
152
+
153
+ it 'accepts an if/else in assignment with end aligned with variable ' \
154
+ 'and chaining with a block after the end' do
155
+ inspect_source(cop,
156
+ ['var = if a',
157
+ ' 0',
158
+ 'else',
159
+ ' 1',
160
+ 'end.abc.tap {}'])
161
+ expect(cop.offences).to be_empty
162
+ end
163
+
164
+ it 'accepts an if in assignment with end aligned with if' do
165
+ inspect_source(cop,
166
+ ['var = if a',
167
+ ' 0',
168
+ ' end'])
169
+ expect(cop.offences).to be_empty
170
+ end
171
+
172
+ it 'accepts an if/else in assignment with end aligned with if' do
173
+ inspect_source(cop,
174
+ ['var = if a',
175
+ ' 0',
176
+ ' else',
177
+ ' 1',
178
+ ' end'])
179
+ expect(cop.offences).to be_empty
180
+ end
181
+
182
+ it 'accepts an if/else in assignment on next line with end aligned ' \
183
+ 'with if' do
184
+ inspect_source(cop,
185
+ ['var =',
186
+ ' if a',
187
+ ' 0',
188
+ ' else',
189
+ ' 1',
190
+ ' end'])
191
+ expect(cop.offences).to be_empty
192
+ end
193
+
194
+ it 'accepts an if/else branches with rescue clauses' do
195
+ # Because of how the rescue clauses come out of Parser, these are
196
+ # special and need to be tested.
197
+ inspect_source(cop,
198
+ ['if a',
199
+ ' a rescue nil',
200
+ 'else',
201
+ ' a rescue nil',
202
+ 'end'])
203
+ expect(cop.offences).to be_empty
204
+ end
205
+ end
206
+
207
+ context 'with unless' do
208
+ it 'registers an offence for bad indentation of an unless body' do
209
+ inspect_source(cop,
210
+ ['unless cond',
211
+ ' func',
212
+ 'end'])
213
+ expect(cop.messages).to eq(['Use 2 (not 1) spaces for indentation.'])
214
+ end
215
+
216
+ it 'accepts an empty unless' do
217
+ inspect_source(cop,
218
+ ['unless a',
219
+ 'else',
220
+ 'end'])
221
+ expect(cop.offences).to be_empty
222
+ end
223
+ end
224
+
225
+ context 'with case' do
226
+ it 'registers an offence for bad indentation in a case/when body' do
227
+ inspect_source(cop,
228
+ ['case a',
229
+ 'when b',
230
+ ' c',
231
+ 'end'])
232
+ expect(cop.messages).to eq(['Use 2 (not 1) spaces for indentation.'])
233
+ end
234
+
235
+ it 'registers an offence for bad indentation in a case/else body' do
236
+ inspect_source(cop,
237
+ ['case a',
238
+ 'when b',
239
+ ' c',
240
+ 'when d',
241
+ ' e',
242
+ 'else',
243
+ ' f',
244
+ 'end'])
245
+ expect(cop.messages).to eq(['Use 2 (not 3) spaces for indentation.'])
246
+ end
247
+
248
+ it 'accepts correctly indented case/when/else' do
249
+ inspect_source(cop,
250
+ ['case a',
251
+ 'when b',
252
+ ' c',
253
+ ' c',
254
+ 'when d',
255
+ 'else',
256
+ ' f',
257
+ 'end'])
258
+ expect(cop.offences).to be_empty
259
+ end
260
+
261
+ it 'accepts case/when/else laid out as a table' do
262
+ inspect_source(cop,
263
+ ['case sexp.loc.keyword.source',
264
+ "when 'if' then cond, body, _else = *sexp",
265
+ "when 'unless' then cond, _else, body = *sexp",
266
+ 'else cond, body = *sexp',
267
+ 'end'])
268
+ expect(cop.offences).to be_empty
269
+ end
270
+
271
+ it 'accepts case/when/else with then beginning a line' do
272
+ inspect_source(cop,
273
+ ['case sexp.loc.keyword.source',
274
+ "when 'if'",
275
+ 'then cond, body, _else = *sexp',
276
+ 'end'])
277
+ expect(cop.offences).to be_empty
278
+ end
279
+
280
+ it 'accepts indented when/else plus indented body' do
281
+ # "Indent when as deep as case" is the job of another cop.
282
+ inspect_source(cop,
283
+ ['case code_type',
284
+ " when 'ruby', 'sql', 'plain'",
285
+ ' code_type',
286
+ " when 'erb'",
287
+ " 'ruby; html-script: true'",
288
+ ' when "html"',
289
+ " 'xml'",
290
+ ' else',
291
+ " 'plain'",
292
+ 'end'])
293
+ expect(cop.offences).to be_empty
294
+ end
295
+ end
296
+
297
+ context 'with while/until' do
298
+ it 'registers an offence for bad indentation of a while body' do
299
+ inspect_source(cop,
300
+ ['while cond',
301
+ ' func',
302
+ 'end'])
303
+ expect(cop.messages).to eq(['Use 2 (not 1) spaces for indentation.'])
304
+ end
305
+
306
+ it 'registers an offence for bad indentation of begin/end/while' do
307
+ inspect_source(cop,
308
+ ['something = begin',
309
+ ' func1',
310
+ ' func2',
311
+ 'end while cond'])
312
+ expect(cop.messages).to eq(['Use 2 (not 1) spaces for indentation.'])
313
+ end
314
+
315
+ it 'registers an offence for bad indentation of an until body' do
316
+ inspect_source(cop,
317
+ ['until cond',
318
+ ' func',
319
+ 'end'])
320
+ expect(cop.messages).to eq(['Use 2 (not 1) spaces for indentation.'])
321
+ end
322
+
323
+ it 'accepts an empty while' do
324
+ inspect_source(cop,
325
+ ['while a',
326
+ 'end'])
327
+ expect(cop.offences).to be_empty
328
+ end
329
+ end
330
+
331
+ context 'with for' do
332
+ it 'registers an offence for bad indentation of a for body' do
333
+ inspect_source(cop,
334
+ ['for var in 1..10',
335
+ ' func',
336
+ 'end'])
337
+ expect(cop.messages).to eq(['Use 2 (not 1) spaces for indentation.'])
338
+ end
339
+
340
+ it 'accepts an empty for' do
341
+ inspect_source(cop,
342
+ ['for var in 1..10',
343
+ 'end'])
344
+ expect(cop.offences).to be_empty
345
+ end
346
+ end
347
+
348
+ context 'with def/defs' do
349
+ it 'registers an offence for bad indentation of a def body' do
350
+ inspect_source(cop,
351
+ ['def test',
352
+ ' func1',
353
+ ' func2', # No offence registered for this.
354
+ 'end'])
355
+ expect(cop.messages).to eq(['Use 2 (not 4) spaces for indentation.'])
356
+ end
357
+
358
+ it 'registers an offence for bad indentation of a defs body' do
359
+ inspect_source(cop,
360
+ ['def self.test',
361
+ ' func',
362
+ 'end'])
363
+ expect(cop.messages).to eq(['Use 2 (not 3) spaces for indentation.'])
364
+ end
365
+
366
+ it 'accepts an empty def body' do
367
+ inspect_source(cop,
368
+ ['def test',
369
+ 'end'])
370
+ expect(cop.offences).to be_empty
371
+ end
372
+
373
+ it 'accepts an empty defs body' do
374
+ inspect_source(cop,
375
+ ['def self.test',
376
+ 'end'])
377
+ expect(cop.offences).to be_empty
378
+ end
379
+ end
380
+
381
+ context 'with class' do
382
+ it 'registers an offence for bad indentation of a class body' do
383
+ inspect_source(cop,
384
+ ['class Test',
385
+ ' def func',
386
+ ' end',
387
+ 'end'])
388
+ expect(cop.messages).to eq(['Use 2 (not 4) spaces for indentation.'])
389
+ end
390
+
391
+ it 'accepts an empty class body' do
392
+ inspect_source(cop,
393
+ ['class Test',
394
+ 'end'])
395
+ expect(cop.offences).to be_empty
396
+ end
397
+
398
+ it 'accepts indented public, protected, and private' do
399
+ inspect_source(cop,
400
+ ['class Test',
401
+ ' public',
402
+ '',
403
+ ' def e',
404
+ ' end',
405
+ '',
406
+ ' protected',
407
+ '',
408
+ ' def f',
409
+ ' end',
410
+ '',
411
+ ' private',
412
+ '',
413
+ ' def g',
414
+ ' end',
415
+ 'end'])
416
+ expect(cop.offences).to be_empty
417
+ end
418
+ end
419
+
420
+ context 'with module' do
421
+ it 'registers an offence for bad indentation of a module body' do
422
+ inspect_source(cop,
423
+ ['module Test',
424
+ ' def func',
425
+ ' end',
426
+ 'end'])
427
+ expect(cop.messages).to eq(['Use 2 (not 4) spaces for indentation.'])
428
+ end
429
+
430
+ it 'accepts an empty module body' do
431
+ inspect_source(cop,
432
+ ['module Test',
433
+ 'end'])
434
+ expect(cop.offences).to be_empty
435
+ end
436
+ end
437
+
438
+ context 'with block' do
439
+ it 'registers an offence for bad indentation of a do/end body' do
440
+ inspect_source(cop,
441
+ ['a = func do',
442
+ ' b',
443
+ 'end'])
444
+ expect(cop.messages).to eq(['Use 2 (not 1) spaces for indentation.'])
445
+ end
446
+
447
+ it 'registers an offence for bad indentation of a {} body' do
448
+ inspect_source(cop,
449
+ ['func {',
450
+ ' b',
451
+ '}'])
452
+ expect(cop.messages).to eq(['Use 2 (not 3) spaces for indentation.'])
453
+ end
454
+
455
+ it 'accepts a correctly indented block body' do
456
+ inspect_source(cop,
457
+ ['a = func do',
458
+ ' b',
459
+ 'end'])
460
+ expect(cop.offences).to be_empty
461
+ end
462
+
463
+ it 'accepts an empty block body' do
464
+ inspect_source(cop,
465
+ ['a = func do',
466
+ 'end'])
467
+ expect(cop.offences).to be_empty
468
+ end
469
+ end
470
+ end