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,56 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::Encoding do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence when no encoding present', ruby: 1.9 do
9
+ inspect_source(cop, ['def foo() end'])
10
+
11
+ expect(cop.messages).to eq(
12
+ ['Missing utf-8 encoding comment.'])
13
+ end
14
+
15
+ it 'accepts encoding on first line', ruby: 1.9 do
16
+ inspect_source(cop, ['# encoding: utf-8',
17
+ 'def foo() end'])
18
+
19
+ expect(cop.offences).to be_empty
20
+ end
21
+
22
+ it 'accepts encoding on second line when shebang present', ruby: 1.9 do
23
+ inspect_source(cop, ['#!/usr/bin/env ruby',
24
+ '# encoding: utf-8',
25
+ 'def foo() end'])
26
+
27
+ expect(cop.messages).to be_empty
28
+ end
29
+
30
+ it 'books an offence when encoding is in the wrong place', ruby: 1.9 do
31
+ inspect_source(cop, ['def foo() end',
32
+ '# encoding: utf-8'])
33
+
34
+ expect(cop.messages).to eq(
35
+ ['Missing utf-8 encoding comment.'])
36
+ end
37
+
38
+ it 'does not register an offence on Ruby 2.0', ruby: 2.0 do
39
+ inspect_source(cop, ['def foo() end'])
40
+
41
+ expect(cop.offences).to be_empty
42
+ end
43
+
44
+ it 'accepts encoding inserted by magic_encoding gem', ruby: 1.9 do
45
+ inspect_source(cop, ['# -*- encoding : utf-8 -*-',
46
+ 'def foo() end'])
47
+
48
+ expect(cop.messages).to be_empty
49
+ end
50
+
51
+ it 'accepts vim-style encoding comments', ruby: 1.9 do
52
+ inspect_source(cop, ['# vim:fileencoding=utf-8',
53
+ 'def foo() end'])
54
+ expect(cop.messages).to be_empty
55
+ end
56
+ end
@@ -0,0 +1,13 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::EndBlock do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'reports an offence for an END block' do
9
+ src = ['END { test }']
10
+ inspect_source(cop, src)
11
+ expect(cop.offences.size).to eq(1)
12
+ end
13
+ end
@@ -0,0 +1,47 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+ require 'tempfile'
5
+
6
+ describe Rubocop::Cop::Style::EndOfLine do
7
+ subject(:cop) { described_class.new }
8
+
9
+ it 'registers an offence for CR+LF' do
10
+ inspect_source_file(cop, ['x=0', '', "y=1\r"])
11
+ expect(cop.messages).to eq(['Carriage return character detected.'])
12
+ end
13
+
14
+ it 'highlights the whole offendng line' do
15
+ inspect_source_file(cop, ['x=0', '', "y=1\r"])
16
+ expect(cop.highlights).to eq(["y=1\r"])
17
+ end
18
+
19
+ it 'registers an offence for CR at end of file' do
20
+ inspect_source_file(cop, ["x=0\r"])
21
+ expect(cop.messages).to eq(['Carriage return character detected.'])
22
+ end
23
+
24
+ context 'when there are many lines ending with CR+LF' do
25
+ it 'registers only one offence' do
26
+ inspect_source_file(cop, ['x=0', '', 'y=1'].join("\r\n"))
27
+ expect(cop.messages.size).to eq(1)
28
+ end
29
+ end
30
+
31
+ context 'when the default external encoding is US_ASCII' do
32
+ before(:each) do
33
+ @orig_encoding = Encoding.default_external
34
+ Encoding.default_external = Encoding::US_ASCII
35
+ end
36
+ after(:each) { Encoding.default_external = @orig_encoding }
37
+
38
+ it 'does not crash on UTF-8 encoded non-ascii characters' do
39
+ inspect_source_file(cop,
40
+ ['# encoding: UTF-8',
41
+ 'class Epd::ReportsController < EpdAreaController',
42
+ " 'terecht bij uw ROM-coördinator.'",
43
+ 'end'].join("\n"))
44
+ expect(cop.offences).to be_empty
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,75 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::EvenOdd do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for x % 2 == 0' do
9
+ inspect_source(cop,
10
+ ['x % 2 == 0'])
11
+ expect(cop.offences.size).to eq(1)
12
+ expect(cop.messages).to eq(['Use Fixnum.even?'])
13
+ end
14
+
15
+ it 'registers an offence for x % 2 != 0' do
16
+ inspect_source(cop,
17
+ ['x % 2 != 0'])
18
+ expect(cop.offences.size).to eq(1)
19
+ expect(cop.messages).to eq(['Use Fixnum.odd?'])
20
+ end
21
+
22
+ it 'registers an offence for (x % 2) == 0' do
23
+ inspect_source(cop,
24
+ ['(x % 2) == 0'])
25
+ expect(cop.offences.size).to eq(1)
26
+ expect(cop.messages).to eq(['Use Fixnum.even?'])
27
+ end
28
+
29
+ it 'registers an offence for (x % 2) != 0' do
30
+ inspect_source(cop,
31
+ ['(x % 2) != 0'])
32
+ expect(cop.offences.size).to eq(1)
33
+ expect(cop.messages).to eq(['Use Fixnum.odd?'])
34
+ end
35
+
36
+ it 'registers an offence for x % 2 == 1' do
37
+ inspect_source(cop,
38
+ ['x % 2 == 1'])
39
+ expect(cop.offences.size).to eq(1)
40
+ expect(cop.messages).to eq(['Use Fixnum.odd?'])
41
+ end
42
+
43
+ it 'registers an offence for x % 2 != 1' do
44
+ inspect_source(cop,
45
+ ['x % 2 != 1'])
46
+ expect(cop.offences.size).to eq(1)
47
+ expect(cop.messages).to eq(['Use Fixnum.even?'])
48
+ end
49
+
50
+ it 'registers an offence for (x % 2) == 1' do
51
+ inspect_source(cop,
52
+ ['(x % 2) == 1'])
53
+ expect(cop.offences.size).to eq(1)
54
+ expect(cop.messages).to eq(['Use Fixnum.odd?'])
55
+ end
56
+
57
+ it 'registers an offence for (x % 2) != 1' do
58
+ inspect_source(cop,
59
+ ['(x % 2) != 1'])
60
+ expect(cop.offences.size).to eq(1)
61
+ expect(cop.messages).to eq(['Use Fixnum.even?'])
62
+ end
63
+
64
+ it 'accepts x % 3 == 0' do
65
+ inspect_source(cop,
66
+ ['x % 3 == 0'])
67
+ expect(cop.offences).to be_empty
68
+ end
69
+
70
+ it 'accepts x % 3 != 0' do
71
+ inspect_source(cop,
72
+ ['x % 3 != 0'])
73
+ expect(cop.offences).to be_empty
74
+ end
75
+ end
@@ -0,0 +1,31 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::FavorJoin do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for an array followed by string' do
9
+ inspect_source(cop,
10
+ ['%w(one two three) * ", "'])
11
+ expect(cop.offences.size).to eq(1)
12
+ expect(cop.messages)
13
+ .to eq(['Favor Array#join over Array#*.'])
14
+ end
15
+
16
+ it 'does not register an offence for numbers' do
17
+ inspect_source(cop,
18
+ ['%w(one two three) * 4'])
19
+ expect(cop.offences).to be_empty
20
+ end
21
+
22
+ it 'does not register an offence for ambiguous cases' do
23
+ inspect_source(cop,
24
+ ['test * ", "'])
25
+ expect(cop.offences).to be_empty
26
+
27
+ inspect_source(cop,
28
+ ['%w(one two three) * test'])
29
+ expect(cop.offences).to be_empty
30
+ end
31
+ end
@@ -0,0 +1,47 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::FavorSprintf do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for a string followed by something' do
9
+ inspect_source(cop,
10
+ ['puts "%d" % 10'])
11
+ expect(cop.offences.size).to eq(1)
12
+ expect(cop.messages)
13
+ .to eq(['Favor sprintf over String#%.'])
14
+ end
15
+
16
+ it 'registers an offence for something followed by an array' do
17
+ inspect_source(cop,
18
+ ['puts x % [10, 11]'])
19
+ expect(cop.offences.size).to eq(1)
20
+ expect(cop.messages)
21
+ .to eq(['Favor sprintf over String#%.'])
22
+ end
23
+
24
+ it 'does not register an offence for numbers' do
25
+ inspect_source(cop,
26
+ ['puts 10 % 4'])
27
+ expect(cop.offences).to be_empty
28
+ end
29
+
30
+ it 'does not register an offence for ambiguous cases' do
31
+ inspect_source(cop,
32
+ ['puts x % 4'])
33
+ expect(cop.offences).to be_empty
34
+
35
+ inspect_source(cop,
36
+ ['puts x % Y'])
37
+ expect(cop.offences).to be_empty
38
+ end
39
+
40
+ it 'works if the first operand contains embedded expressions' do
41
+ inspect_source(cop,
42
+ ['puts "#{x * 5} %d #{@test}" % 10'])
43
+ expect(cop.offences.size).to eq(1)
44
+ expect(cop.messages)
45
+ .to eq(['Favor sprintf over String#%.'])
46
+ end
47
+ end
@@ -0,0 +1,76 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::FavorUnlessOverNegatedIf do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for if with exclamation point condition' do
9
+ inspect_source(cop,
10
+ ['if !a_condition',
11
+ ' some_method',
12
+ 'end',
13
+ 'some_method if !a_condition'
14
+ ])
15
+ expect(cop.messages).to eq(
16
+ ['Favor unless (or control flow or) over if for negative ' \
17
+ 'conditions.'] * 2)
18
+ end
19
+
20
+ it 'registers an offence for if with "not" condition' do
21
+ inspect_source(cop,
22
+ ['if not a_condition',
23
+ ' some_method',
24
+ 'end',
25
+ 'some_method if not a_condition'])
26
+ expect(cop.messages).to eq(
27
+ ['Favor unless (or control flow or) over if for negative ' \
28
+ 'conditions.'] * 2)
29
+ expect(cop.offences.map(&:line)).to eq([1, 4])
30
+ end
31
+
32
+ it 'accepts an if/else with negative condition' do
33
+ inspect_source(cop,
34
+ ['if !a_condition',
35
+ ' some_method',
36
+ 'else',
37
+ ' something_else',
38
+ 'end',
39
+ 'if not a_condition',
40
+ ' some_method',
41
+ 'elsif other_condition',
42
+ ' something_else',
43
+ 'end'])
44
+ expect(cop.offences).to be_empty
45
+ end
46
+
47
+ it 'accepts an if where only part of the contition is negated' do
48
+ inspect_source(cop,
49
+ ['if !condition && another_condition',
50
+ ' some_method',
51
+ 'end',
52
+ 'if not condition or another_condition',
53
+ ' some_method',
54
+ 'end',
55
+ 'some_method if not condition or another_condition'])
56
+ expect(cop.offences).to be_empty
57
+ end
58
+
59
+ it 'is not confused by negated elsif' do
60
+ inspect_source(cop,
61
+ ['if test.is_a?(String)',
62
+ ' 3',
63
+ 'elsif test.is_a?(Array)',
64
+ ' 2',
65
+ 'elsif !test.nil?',
66
+ ' 1',
67
+ 'end'])
68
+
69
+ expect(cop.offences).to be_empty
70
+ end
71
+
72
+ it 'does not blow up for ternary ops' do
73
+ inspect_source(cop, 'a ? b : c')
74
+ expect(cop.offences).to be_empty
75
+ end
76
+ end
@@ -0,0 +1,41 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::FavorUntilOverNegatedWhile do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for while with exclamation point condition' do
9
+ inspect_source(cop,
10
+ ['while !a_condition',
11
+ ' some_method',
12
+ 'end',
13
+ 'some_method while !a_condition'
14
+ ])
15
+ expect(cop.messages).to eq(
16
+ ['Favor until over while for negative conditions.'] * 2)
17
+ end
18
+
19
+ it 'registers an offence for while with "not" condition' do
20
+ inspect_source(cop,
21
+ ['while (not a_condition)',
22
+ ' some_method',
23
+ 'end',
24
+ 'some_method while not a_condition'])
25
+ expect(cop.messages).to eq(
26
+ ['Favor until over while for negative conditions.'] * 2)
27
+ expect(cop.offences.map(&:line)).to eq([1, 4])
28
+ end
29
+
30
+ it 'accepts an while where only part of the contition is negated' do
31
+ inspect_source(cop,
32
+ ['while !a_condition && another_condition',
33
+ ' some_method',
34
+ 'end',
35
+ 'while not a_condition or another_condition',
36
+ ' some_method',
37
+ 'end',
38
+ 'some_method while not a_condition or other_cond'])
39
+ expect(cop.messages).to be_empty
40
+ end
41
+ end
@@ -0,0 +1,30 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::FinalNewline do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for missing final newline' do
9
+ source = ['x = 0', 'top']
10
+ inspect_source(cop, source)
11
+ expect(cop.offences.size).to eq(1)
12
+ end
13
+
14
+ it 'accepts a final newline' do
15
+ source = ['x = 0', 'top', '']
16
+ inspect_source(cop, source)
17
+ expect(cop.offences).to be_empty
18
+ end
19
+
20
+ it 'accepts an empty file' do
21
+ source = ['']
22
+ inspect_source(cop, source)
23
+ expect(cop.offences).to be_empty
24
+ end
25
+
26
+ it 'auto-corrects missing newline' do
27
+ new_source = autocorrect_source(cop, ['x = 0'])
28
+ expect(new_source).to eq(['x = 0', ''].join("\n"))
29
+ end
30
+ end
@@ -0,0 +1,23 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::FlipFlop do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for inclusive flip flops' do
9
+ inspect_source(cop,
10
+ ['DATA.each_line do |line|',
11
+ 'print line if (line =~ /begin/)..(line =~ /end/)',
12
+ 'end'])
13
+ expect(cop.offences.size).to eq(1)
14
+ end
15
+
16
+ it 'registers an offence for exclusive flip flops' do
17
+ inspect_source(cop,
18
+ ['DATA.each_line do |line|',
19
+ 'print line if (line =~ /begin/)...(line =~ /end/)',
20
+ 'end'])
21
+ expect(cop.offences.size).to eq(1)
22
+ end
23
+ end