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,25 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::UnlessElse do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for an unless with else' do
9
+ inspect_source(cop, ['unless x',
10
+ ' a = 1',
11
+ 'else',
12
+ ' a = 0',
13
+ 'end'])
14
+ expect(cop.messages).to eq(
15
+ ['Never use unless with else. Rewrite these with the ' \
16
+ 'positive case first.'])
17
+ end
18
+
19
+ it 'accepts an unless without else' do
20
+ inspect_source(cop, ['unless x',
21
+ ' a = 1',
22
+ 'end'])
23
+ expect(cop.messages).to be_empty
24
+ end
25
+ end
@@ -0,0 +1,47 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::VariableInterpolation do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for interpolated global variables' do
9
+ inspect_source(cop,
10
+ ['puts "this is a #$test"'])
11
+ expect(cop.offences.size).to eq(1)
12
+ expect(cop.messages)
13
+ .to eq(['Replace interpolated var $test' \
14
+ ' with expression #{$test}.'])
15
+ end
16
+
17
+ it 'registers an offence for interpolated regexp back references' do
18
+ inspect_source(cop,
19
+ ['puts "this is a #$1"'])
20
+ expect(cop.offences.size).to eq(1)
21
+ expect(cop.messages)
22
+ .to eq(['Replace interpolated var $1 with expression #{$1}.'])
23
+ end
24
+
25
+ it 'registers an offence for interpolated instance variables' do
26
+ inspect_source(cop,
27
+ ['puts "this is a #@test"'])
28
+ expect(cop.offences.size).to eq(1)
29
+ expect(cop.messages)
30
+ .to eq(['Replace interpolated var @test' \
31
+ ' with expression #{@test}.'])
32
+ end
33
+
34
+ it 'registers an offence for interpolated class variables' do
35
+ inspect_source(cop,
36
+ ['puts "this is a #@@t"'])
37
+ expect(cop.offences.size).to eq(1)
38
+ expect(cop.messages)
39
+ .to eq(['Replace interpolated var @@t with expression #{@@t}.'])
40
+ end
41
+
42
+ it 'does not register an offence for variables in expressions' do
43
+ inspect_source(cop,
44
+ ['puts "this is a #{@test} #{@@t} #{$t} #{$1}"'])
45
+ expect(cop.offences).to be_empty
46
+ end
47
+ end
@@ -0,0 +1,107 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::VariableName, :config do
6
+ subject(:cop) { described_class.new(config) }
7
+
8
+ shared_examples 'always accepted' do
9
+ it 'accepts screaming snake case globals' do
10
+ inspect_source(cop, '$MY_GLOBAL = 0')
11
+ expect(cop.offences).to be_empty
12
+ end
13
+
14
+ it 'accepts screaming snake case constants' do
15
+ inspect_source(cop, 'MY_CONSTANT = 0')
16
+ expect(cop.offences).to be_empty
17
+ end
18
+
19
+ it 'accepts assigning to camel case constant' do
20
+ inspect_source(cop, 'Paren = Struct.new :left, :right, :kind')
21
+ expect(cop.offences).to be_empty
22
+ end
23
+
24
+ it 'accepts assignment with indexing of self' do
25
+ inspect_source(cop, 'self[:a] = b')
26
+ expect(cop.offences).to be_empty
27
+ end
28
+ end
29
+
30
+ context 'when configured for snake_case' do
31
+ let(:cop_config) { { 'EnforcedStyle' => 'snake_case' } }
32
+
33
+ it 'registers an offence for camel case in local variable name' do
34
+ inspect_source(cop, 'myLocal = 1')
35
+ expect(cop.offences.size).to eq(1)
36
+ expect(cop.highlights).to eq(['myLocal'])
37
+ expect(cop.config_to_allow_offences).to eq('EnforcedStyle' =>
38
+ 'camelCase')
39
+ end
40
+
41
+ it 'registers an offence for correct + opposite' do
42
+ inspect_source(cop, ['my_local = 1',
43
+ 'myLocal = 1'])
44
+ expect(cop.highlights).to eq(['myLocal'])
45
+ expect(cop.config_to_allow_offences).to eq('Enabled' => false)
46
+ end
47
+
48
+ it 'registers an offence for camel case in instance variable name' do
49
+ inspect_source(cop, '@myAttribute = 3')
50
+ expect(cop.offences.size).to eq(1)
51
+ expect(cop.highlights).to eq(['@myAttribute'])
52
+ end
53
+
54
+ it 'registers an offence for camel case in setter name' do
55
+ inspect_source(cop, 'self.mySetter = 2')
56
+ expect(cop.offences.size).to eq(1)
57
+ expect(cop.highlights).to eq(['mySetter'])
58
+ end
59
+
60
+ include_examples 'always accepted'
61
+ end
62
+
63
+ context 'when configured for camelCase' do
64
+ let(:cop_config) { { 'EnforcedStyle' => 'camelCase' } }
65
+
66
+ it 'registers an offence for snake case in local variable name' do
67
+ inspect_source(cop, 'my_local = 1')
68
+ expect(cop.offences.size).to eq(1)
69
+ expect(cop.highlights).to eq(['my_local'])
70
+ expect(cop.config_to_allow_offences).to eq('EnforcedStyle' =>
71
+ 'snake_case')
72
+ end
73
+
74
+ it 'registers an offence for opposite + correct' do
75
+ inspect_source(cop, ['my_local = 1',
76
+ 'myLocal = 1'])
77
+ expect(cop.highlights).to eq(['my_local'])
78
+ expect(cop.config_to_allow_offences).to eq('Enabled' => false)
79
+ end
80
+
81
+ it 'accepts camel case in local variable name' do
82
+ inspect_source(cop, 'myLocal = 1')
83
+ expect(cop.offences).to be_empty
84
+ end
85
+
86
+ it 'accepts camel case in instance variable name' do
87
+ inspect_source(cop, '@myAttribute = 3')
88
+ expect(cop.offences).to be_empty
89
+ end
90
+
91
+ it 'accepts camel case in setter name' do
92
+ inspect_source(cop, 'self.mySetter = 2')
93
+ expect(cop.offences).to be_empty
94
+ end
95
+
96
+ include_examples 'always accepted'
97
+ end
98
+
99
+ context 'when configured with a bad value' do
100
+ let(:cop_config) { { 'EnforcedStyle' => 'other' } }
101
+
102
+ it 'fails' do
103
+ expect { inspect_source(cop, 'a = 3') }
104
+ .to raise_error(RuntimeError)
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,41 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::WhenThen do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for when x;' do
9
+ inspect_source(cop, ['case a',
10
+ 'when b; c',
11
+ 'end'])
12
+ expect(cop.messages).to eq(
13
+ ['Never use "when x;". Use "when x then" instead.'])
14
+ end
15
+
16
+ it 'accepts when x then' do
17
+ inspect_source(cop, ['case a',
18
+ 'when b then c',
19
+ 'end'])
20
+ expect(cop.messages).to be_empty
21
+ end
22
+
23
+ it 'accepts ; separating statements in the body of when' do
24
+ inspect_source(cop, ['case a',
25
+ 'when b then c; d',
26
+ 'end',
27
+ '',
28
+ 'case e',
29
+ 'when f',
30
+ ' g; h',
31
+ 'end'])
32
+ expect(cop.messages).to be_empty
33
+ end
34
+
35
+ it 'auto-corrects "when x;" with "when x then"' do
36
+ new_source = autocorrect_source(cop, ['case a',
37
+ 'when b; c',
38
+ 'end'])
39
+ expect(new_source).to eq("case a\nwhen b then c\nend")
40
+ end
41
+ end
@@ -0,0 +1,53 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::WhileUntilDo do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for do in multiline while' do
9
+ inspect_source(cop, ['while cond do',
10
+ 'end'])
11
+ expect(cop.offences.size).to eq(1)
12
+ end
13
+
14
+ it 'registers an offence for do in multiline until' do
15
+ inspect_source(cop, ['until cond do',
16
+ 'end'])
17
+ expect(cop.offences.size).to eq(1)
18
+ end
19
+
20
+ it 'accepts do in single-line while' do
21
+ inspect_source(cop, ['while cond do something end'])
22
+ expect(cop.offences).to be_empty
23
+ end
24
+
25
+ it 'accepts do in single-line until' do
26
+ inspect_source(cop, ['until cond do something end'])
27
+ expect(cop.offences).to be_empty
28
+ end
29
+
30
+ it 'it accepts multi-line while without do' do
31
+ inspect_source(cop, ['while cond',
32
+ 'end'])
33
+ expect(cop.offences).to be_empty
34
+ end
35
+
36
+ it 'it accepts multi-line until without do' do
37
+ inspect_source(cop, ['until cond',
38
+ 'end'])
39
+ expect(cop.offences).to be_empty
40
+ end
41
+
42
+ it 'auto-corrects the usage of "do" in multiline while' do
43
+ new_source = autocorrect_source(cop, ['while cond do',
44
+ 'end'])
45
+ expect(new_source).to eq("while cond\nend")
46
+ end
47
+
48
+ it 'auto-corrects the usage of "do" in multiline until' do
49
+ new_source = autocorrect_source(cop, ['until cond do',
50
+ 'end'])
51
+ expect(new_source).to eq("until cond\nend")
52
+ end
53
+ end
@@ -0,0 +1,75 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::WhileUntilModifier do
6
+ include StatementModifierHelper
7
+
8
+ subject(:cop) { described_class.new(config) }
9
+ let(:config) do
10
+ hash = { 'LineLength' => { 'Max' => 79 } }
11
+ Rubocop::Config.new(hash)
12
+ end
13
+
14
+ it "accepts multiline unless that doesn't fit on one line" do
15
+ check_too_long(cop, 'unless')
16
+ end
17
+
18
+ it 'accepts multiline unless whose body is more than one line' do
19
+ check_short_multiline(cop, 'unless')
20
+ end
21
+
22
+ it 'registers an offence for multiline while that fits on one line' do
23
+ check_really_short(cop, 'while')
24
+ end
25
+
26
+ it "accepts multiline while that doesn't fit on one line" do
27
+ check_too_long(cop, 'while')
28
+ end
29
+
30
+ it 'accepts multiline while whose body is more than one line' do
31
+ check_short_multiline(cop, 'while')
32
+ end
33
+
34
+ it 'accepts oneline while when condition has local variable assignment' do
35
+ inspect_source(cop, ['lines = %w{first second third}',
36
+ 'while (line = lines.shift)',
37
+ ' puts line',
38
+ 'end'])
39
+ expect(cop.offences).to be_empty
40
+ end
41
+
42
+ it 'registers an offence for oneline while when assignment is in body' do
43
+ inspect_source(cop, ['while true',
44
+ ' x = 0',
45
+ 'end'])
46
+ expect(cop.offences.size).to eq(1)
47
+ end
48
+
49
+ it 'registers an offence for multiline until that fits on one line' do
50
+ check_really_short(cop, 'until')
51
+ end
52
+
53
+ it "accepts multiline until that doesn't fit on one line" do
54
+ check_too_long(cop, 'until')
55
+ end
56
+
57
+ it 'accepts multiline until whose body is more than one line' do
58
+ check_short_multiline(cop, 'until')
59
+ end
60
+
61
+ it 'accepts an empty condition' do
62
+ check_empty(cop, 'while')
63
+ check_empty(cop, 'until')
64
+ end
65
+
66
+ it 'accepts modifier while' do
67
+ inspect_source(cop, ['ala while bala'])
68
+ expect(cop.offences).to be_empty
69
+ end
70
+
71
+ it 'accepts modifier until' do
72
+ inspect_source(cop, ['ala until bala'])
73
+ expect(cop.offences).to be_empty
74
+ end
75
+ end
@@ -0,0 +1,97 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::WordArray, :config do
6
+ subject(:cop) { described_class.new(config) }
7
+ let(:cop_config) { { 'MinSize' => 0 } }
8
+
9
+ it 'registers an offence for arrays of single quoted strings' do
10
+ inspect_source(cop,
11
+ ["['one', 'two', 'three']"])
12
+ expect(cop.offences.size).to eq(1)
13
+ expect(cop.config_to_allow_offences).to eq('MinSize' => 3)
14
+ end
15
+
16
+ it 'registers an offence for arrays of double quoted strings' do
17
+ inspect_source(cop,
18
+ ['["one", "two", "three"]'])
19
+ expect(cop.offences.size).to eq(1)
20
+ end
21
+
22
+ it 'registers an offence for arrays with character constants' do
23
+ inspect_source(cop,
24
+ ['["one", ?\n]'])
25
+ expect(cop.offences.size).to eq(1)
26
+ end
27
+
28
+ it 'does not register an offence for array of non-words' do
29
+ inspect_source(cop,
30
+ ['["one space", "two", "three"]'])
31
+ expect(cop.offences).to be_empty
32
+ end
33
+
34
+ it 'does not register an offence for array containing non-string' do
35
+ inspect_source(cop,
36
+ ['["one", "two", 3]'])
37
+ expect(cop.offences).to be_empty
38
+ end
39
+
40
+ it 'does not register an offence for array starting with %w' do
41
+ inspect_source(cop,
42
+ ['%w(one two three)'])
43
+ expect(cop.offences).to be_empty
44
+ end
45
+
46
+ it 'does not register an offence for array with one element' do
47
+ inspect_source(cop,
48
+ ['["three"]'])
49
+ expect(cop.offences).to be_empty
50
+ end
51
+
52
+ it 'does not register an offence for array with empty strings' do
53
+ inspect_source(cop,
54
+ ['["", "two", "three"]'])
55
+ expect(cop.offences).to be_empty
56
+ end
57
+
58
+ it 'does not register an offence for array with allowed number of strings' do
59
+ cop_config['MinSize'] = 3
60
+
61
+ inspect_source(cop,
62
+ ['["one", "two", "three"]'])
63
+ expect(cop.offences).to be_empty
64
+ end
65
+
66
+ it 'does not register an offence for an array with comments in it' do
67
+ inspect_source(cop,
68
+ ['[',
69
+ '"foo", # comment here',
70
+ '"bar", # this thing was done because of a bug',
71
+ '"baz" # do not delete this line',
72
+ ']'])
73
+
74
+ expect(cop.offences).to be_empty
75
+ end
76
+
77
+ it 'registers an offence for an array with comments outside of it' do
78
+ inspect_source(cop,
79
+ ['[',
80
+ '"foo",',
81
+ '"bar",',
82
+ '"baz"',
83
+ '] # test'])
84
+
85
+ expect(cop.offences.size).to eq(1)
86
+ end
87
+
88
+ it 'auto-corrects an array of words' do
89
+ new_source = autocorrect_source(cop, "['one', %q(two), 'three']")
90
+ expect(new_source).to eq('%w(one two three)')
91
+ end
92
+
93
+ it 'auto-corrects an array of words and character constants' do
94
+ new_source = autocorrect_source(cop, '[%{one}, %Q(two), ?\n, ?\t]')
95
+ expect(new_source).to eq('%W(one two \n \t)')
96
+ end
97
+ end