rubocop 0.13.1 → 0.14.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of rubocop might be problematic. Click here for more details.

Files changed (222) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +3 -0
  3. data/CHANGELOG.md +42 -0
  4. data/README.md +59 -54
  5. data/config/default.yml +124 -95
  6. data/config/disabled.yml +4 -0
  7. data/config/enabled.yml +286 -264
  8. data/lib/rubocop.rb +10 -3
  9. data/lib/rubocop/cli.rb +10 -171
  10. data/lib/rubocop/cop/cop.rb +14 -11
  11. data/lib/rubocop/cop/lint/debugger.rb +35 -0
  12. data/lib/rubocop/cop/lint/syntax.rb +34 -0
  13. data/lib/rubocop/cop/offence.rb +15 -23
  14. data/lib/rubocop/cop/style/align_array.rb +1 -10
  15. data/lib/rubocop/cop/style/align_hash.rb +14 -2
  16. data/lib/rubocop/cop/style/align_parameters.rb +1 -11
  17. data/lib/rubocop/cop/style/and_or.rb +13 -11
  18. data/lib/rubocop/cop/style/attr.rb +1 -1
  19. data/lib/rubocop/cop/style/autocorrect_alignment.rb +31 -6
  20. data/lib/rubocop/cop/style/blocks.rb +14 -6
  21. data/lib/rubocop/cop/style/character_literal.rb +1 -1
  22. data/lib/rubocop/cop/style/class_length.rb +38 -0
  23. data/lib/rubocop/cop/style/collection_methods.rb +1 -1
  24. data/lib/rubocop/cop/style/colon_method_call.rb +1 -1
  25. data/lib/rubocop/cop/style/configurable_naming.rb +47 -0
  26. data/lib/rubocop/cop/style/def_parentheses.rb +2 -2
  27. data/lib/rubocop/cop/style/empty_literal.rb +1 -1
  28. data/lib/rubocop/cop/style/even_odd.rb +7 -3
  29. data/lib/rubocop/cop/style/hash_methods.rb +1 -1
  30. data/lib/rubocop/cop/style/hash_syntax.rb +36 -7
  31. data/lib/rubocop/cop/style/lambda_call.rb +36 -11
  32. data/lib/rubocop/cop/style/method_call_parentheses.rb +1 -1
  33. data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +41 -0
  34. data/lib/rubocop/cop/style/method_length.rb +2 -13
  35. data/lib/rubocop/cop/style/method_name.rb +42 -0
  36. data/lib/rubocop/cop/style/numeric_literals.rb +4 -0
  37. data/lib/rubocop/cop/style/perl_backrefs.rb +1 -1
  38. data/lib/rubocop/cop/style/raise_args.rb +60 -0
  39. data/lib/rubocop/cop/style/redundant_exception.rb +32 -0
  40. data/lib/rubocop/cop/style/redundant_return.rb +14 -5
  41. data/lib/rubocop/cop/style/redundant_self.rb +1 -1
  42. data/lib/rubocop/cop/style/semicolon.rb +13 -4
  43. data/lib/rubocop/cop/style/signal_exception.rb +63 -14
  44. data/lib/rubocop/cop/style/special_global_vars.rb +1 -1
  45. data/lib/rubocop/cop/style/string_help.rb +4 -1
  46. data/lib/rubocop/cop/style/string_literals.rb +34 -11
  47. data/lib/rubocop/cop/style/surrounding_space.rb +64 -17
  48. data/lib/rubocop/cop/style/tab.rb +1 -1
  49. data/lib/rubocop/cop/style/variable_name.rb +44 -0
  50. data/lib/rubocop/cop/style/when_then.rb +1 -1
  51. data/lib/rubocop/cop/style/while_until_do.rb +1 -1
  52. data/lib/rubocop/cop/team.rb +4 -7
  53. data/lib/rubocop/cop/util.rb +12 -0
  54. data/lib/rubocop/formatter/clang_style_formatter.rb +1 -1
  55. data/lib/rubocop/formatter/emacs_style_formatter.rb +5 -2
  56. data/lib/rubocop/formatter/json_formatter.rb +1 -0
  57. data/lib/rubocop/formatter/progress_formatter.rb +9 -13
  58. data/lib/rubocop/formatter/simple_text_formatter.rb +63 -15
  59. data/lib/rubocop/options.rb +184 -0
  60. data/lib/rubocop/processed_source.rb +4 -0
  61. data/lib/rubocop/version.rb +1 -1
  62. data/rubocop.gemspec +1 -1
  63. data/spec/rubocop/cli_spec.rb +870 -1001
  64. data/spec/rubocop/config_spec.rb +13 -13
  65. data/spec/rubocop/config_store_spec.rb +38 -37
  66. data/spec/rubocop/cop/commissioner_spec.rb +42 -46
  67. data/spec/rubocop/cop/cop_spec.rb +72 -77
  68. data/spec/rubocop/cop/corrector_spec.rb +51 -55
  69. data/spec/rubocop/cop/lint/assignment_in_condition_spec.rb +100 -106
  70. data/spec/rubocop/cop/lint/block_alignment_spec.rb +403 -409
  71. data/spec/rubocop/cop/lint/debugger_spec.rb +39 -0
  72. data/spec/rubocop/cop/lint/empty_ensure_spec.rb +19 -25
  73. data/spec/rubocop/cop/lint/end_alignment_spec.rb +50 -56
  74. data/spec/rubocop/cop/lint/end_in_method_spec.rb +20 -26
  75. data/spec/rubocop/cop/lint/ensure_return_spec.rb +30 -36
  76. data/spec/rubocop/cop/lint/eval_spec.rb +25 -31
  77. data/spec/rubocop/cop/lint/handle_exceptions_spec.rb +22 -28
  78. data/spec/rubocop/cop/lint/literal_in_condition_spec.rb +51 -57
  79. data/spec/rubocop/cop/lint/loop_spec.rb +17 -23
  80. data/spec/rubocop/cop/lint/parentheses_as_grouped_expression_spec.rb +51 -57
  81. data/spec/rubocop/cop/lint/rescue_exception_spec.rb +105 -111
  82. data/spec/rubocop/cop/lint/shadowing_outer_local_variable_spec.rb +230 -236
  83. data/spec/rubocop/cop/lint/syntax_spec.rb +33 -0
  84. data/spec/rubocop/cop/lint/unreachable_code_spec.rb +51 -57
  85. data/spec/rubocop/cop/lint/useless_assignment_spec.rb +1544 -1550
  86. data/spec/rubocop/cop/lint/useless_comparison_spec.rb +21 -27
  87. data/spec/rubocop/cop/lint/useless_setter_call_spec.rb +119 -125
  88. data/spec/rubocop/cop/lint/void_spec.rb +50 -56
  89. data/spec/rubocop/cop/offence_spec.rb +101 -131
  90. data/spec/rubocop/cop/rails/has_and_belongs_to_many_spec.rb +6 -12
  91. data/spec/rubocop/cop/rails/read_attribute_spec.rb +6 -12
  92. data/spec/rubocop/cop/rails/validation_spec.rb +13 -19
  93. data/spec/rubocop/cop/style/access_control_spec.rb +146 -152
  94. data/spec/rubocop/cop/style/alias_spec.rb +30 -36
  95. data/spec/rubocop/cop/style/align_array_spec.rb +57 -56
  96. data/spec/rubocop/cop/style/align_hash_spec.rb +256 -237
  97. data/spec/rubocop/cop/style/align_parameters_spec.rb +216 -202
  98. data/spec/rubocop/cop/style/and_or_spec.rb +51 -55
  99. data/spec/rubocop/cop/style/ascii_comments_spec.rb +14 -20
  100. data/spec/rubocop/cop/style/ascii_identifiers_spec.rb +26 -32
  101. data/spec/rubocop/cop/style/attr_spec.rb +11 -17
  102. data/spec/rubocop/cop/style/begin_block_spec.rb +6 -12
  103. data/spec/rubocop/cop/style/block_comments_spec.rb +13 -19
  104. data/spec/rubocop/cop/style/block_nesting_spec.rb +134 -140
  105. data/spec/rubocop/cop/style/blocks_spec.rb +81 -84
  106. data/spec/rubocop/cop/style/case_equality_spec.rb +5 -11
  107. data/spec/rubocop/cop/style/case_indentation_spec.rb +71 -77
  108. data/spec/rubocop/cop/style/character_literal_spec.rb +31 -37
  109. data/spec/rubocop/cop/style/class_and_module_camel_case_spec.rb +31 -37
  110. data/spec/rubocop/cop/style/class_length_spec.rb +65 -0
  111. data/spec/rubocop/cop/style/class_methods_spec.rb +35 -41
  112. data/spec/rubocop/cop/style/class_vars_spec.rb +11 -17
  113. data/spec/rubocop/cop/style/collection_methods_spec.rb +41 -47
  114. data/spec/rubocop/cop/style/colon_method_call_spec.rb +45 -51
  115. data/spec/rubocop/cop/style/comment_annotation_spec.rb +79 -85
  116. data/spec/rubocop/cop/style/constant_name_spec.rb +45 -51
  117. data/spec/rubocop/cop/style/def_with_parentheses_spec.rb +28 -34
  118. data/spec/rubocop/cop/style/def_without_parentheses_spec.rb +23 -29
  119. data/spec/rubocop/cop/style/documentation_spec.rb +60 -66
  120. data/spec/rubocop/cop/style/dot_position_spec.rb +50 -56
  121. data/spec/rubocop/cop/style/empty_line_between_defs_spec.rb +109 -110
  122. data/spec/rubocop/cop/style/empty_lines_spec.rb +28 -34
  123. data/spec/rubocop/cop/style/empty_literal_spec.rb +80 -86
  124. data/spec/rubocop/cop/style/encoding_spec.rb +50 -56
  125. data/spec/rubocop/cop/style/end_block_spec.rb +6 -12
  126. data/spec/rubocop/cop/style/end_of_line_spec.rb +13 -19
  127. data/spec/rubocop/cop/style/even_odd_spec.rb +69 -41
  128. data/spec/rubocop/cop/style/favor_join_spec.rb +21 -27
  129. data/spec/rubocop/cop/style/favor_modifier_spec.rb +180 -176
  130. data/spec/rubocop/cop/style/favor_sprintf_spec.rb +41 -47
  131. data/spec/rubocop/cop/style/favor_unless_over_negated_if_spec.rb +63 -69
  132. data/spec/rubocop/cop/style/favor_until_over_negated_while_spec.rb +32 -38
  133. data/spec/rubocop/cop/style/final_newline_spec.rb +16 -22
  134. data/spec/rubocop/cop/style/for_spec.rb +18 -24
  135. data/spec/rubocop/cop/style/global_vars_spec.rb +23 -29
  136. data/spec/rubocop/cop/style/hash_methods_spec.rb +39 -45
  137. data/spec/rubocop/cop/style/hash_syntax_spec.rb +93 -65
  138. data/spec/rubocop/cop/style/if_with_semicolon_spec.rb +11 -17
  139. data/spec/rubocop/cop/style/indentation_width_spec.rb +377 -383
  140. data/spec/rubocop/cop/style/lambda_call_spec.rb +40 -22
  141. data/spec/rubocop/cop/style/lambda_spec.rb +30 -34
  142. data/spec/rubocop/cop/style/leading_comment_space_spec.rb +44 -50
  143. data/spec/rubocop/cop/style/line_length_spec.rb +11 -17
  144. data/spec/rubocop/cop/style/method_call_parentheses_spec.rb +14 -20
  145. data/spec/rubocop/cop/style/method_called_on_do_end_block_spec.rb +60 -0
  146. data/spec/rubocop/cop/style/method_length_spec.rb +127 -133
  147. data/spec/rubocop/cop/style/method_name_spec.rb +103 -0
  148. data/spec/rubocop/cop/style/module_function_spec.rb +16 -22
  149. data/spec/rubocop/cop/style/multiline_block_chain_spec.rb +64 -70
  150. data/spec/rubocop/cop/style/multiline_if_then_spec.rb +74 -80
  151. data/spec/rubocop/cop/style/nil_comparison_spec.rb +20 -26
  152. data/spec/rubocop/cop/style/not_spec.rb +13 -19
  153. data/spec/rubocop/cop/style/numeric_literals_spec.rb +36 -35
  154. data/spec/rubocop/cop/style/one_line_conditional_spec.rb +5 -11
  155. data/spec/rubocop/cop/style/op_method_spec.rb +61 -67
  156. data/spec/rubocop/cop/style/parameter_lists_spec.rb +31 -37
  157. data/spec/rubocop/cop/style/parentheses_around_condition_spec.rb +62 -68
  158. data/spec/rubocop/cop/style/perl_backrefs_spec.rb +9 -15
  159. data/spec/rubocop/cop/style/proc_spec.rb +13 -19
  160. data/spec/rubocop/cop/style/raise_args_spec.rb +55 -0
  161. data/spec/rubocop/cop/style/reduce_arguments_spec.rb +49 -55
  162. data/spec/rubocop/cop/style/redundant_begin_spec.rb +47 -53
  163. data/spec/rubocop/cop/style/redundant_exception_spec.rb +27 -0
  164. data/spec/rubocop/cop/style/redundant_return_spec.rb +164 -72
  165. data/spec/rubocop/cop/style/redundant_self_spec.rb +109 -115
  166. data/spec/rubocop/cop/style/regexp_literal_spec.rb +57 -63
  167. data/spec/rubocop/cop/style/rescue_modifier_spec.rb +99 -105
  168. data/spec/rubocop/cop/style/semicolon_spec.rb +95 -90
  169. data/spec/rubocop/cop/style/signal_exception_spec.rb +248 -95
  170. data/spec/rubocop/cop/style/single_line_methods_spec.rb +45 -51
  171. data/spec/rubocop/cop/style/space_after_colon_spec.rb +14 -20
  172. data/spec/rubocop/cop/style/space_after_comma_spec.rb +16 -22
  173. data/spec/rubocop/cop/style/space_after_control_keyword_spec.rb +48 -54
  174. data/spec/rubocop/cop/style/space_after_method_name_spec.rb +49 -55
  175. data/spec/rubocop/cop/style/space_after_semicolon_spec.rb +10 -16
  176. data/spec/rubocop/cop/style/space_around_block_braces_spec.rb +118 -50
  177. data/spec/rubocop/cop/style/space_around_equals_in_default_parameter_spec.rb +18 -24
  178. data/spec/rubocop/cop/style/space_around_operators_spec.rb +204 -210
  179. data/spec/rubocop/cop/style/space_before_modifier_keyword_spec.rb +36 -42
  180. data/spec/rubocop/cop/style/space_inside_brackets_spec.rb +39 -45
  181. data/spec/rubocop/cop/style/space_inside_hash_literal_braces_spec.rb +62 -68
  182. data/spec/rubocop/cop/style/space_inside_parens_spec.rb +18 -24
  183. data/spec/rubocop/cop/style/special_global_vars_spec.rb +40 -46
  184. data/spec/rubocop/cop/style/string_literals_spec.rb +148 -70
  185. data/spec/rubocop/cop/style/symbol_array_spec.rb +28 -34
  186. data/spec/rubocop/cop/style/symbol_name_spec.rb +132 -138
  187. data/spec/rubocop/cop/style/tab_spec.rb +9 -15
  188. data/spec/rubocop/cop/style/ternary_operator_spec.rb +25 -31
  189. data/spec/rubocop/cop/style/trailing_blank_lines_spec.rb +10 -16
  190. data/spec/rubocop/cop/style/trailing_whitespace_spec.rb +14 -20
  191. data/spec/rubocop/cop/style/trivial_accessors_spec.rb +374 -380
  192. data/spec/rubocop/cop/style/unless_else_spec.rb +17 -23
  193. data/spec/rubocop/cop/style/variable_interpolation_spec.rb +36 -42
  194. data/spec/rubocop/cop/style/variable_name_spec.rb +83 -0
  195. data/spec/rubocop/cop/style/when_then_spec.rb +31 -37
  196. data/spec/rubocop/cop/style/while_until_do_spec.rb +47 -53
  197. data/spec/rubocop/cop/style/word_array_spec.rb +49 -55
  198. data/spec/rubocop/cop/team_spec.rb +125 -127
  199. data/spec/rubocop/cop/variable_inspector/assignment_spec.rb +176 -180
  200. data/spec/rubocop/cop/variable_inspector/locatable_spec.rb +580 -586
  201. data/spec/rubocop/cop/variable_inspector/scope_spec.rb +140 -146
  202. data/spec/rubocop/cop/variable_inspector/variable_spec.rb +52 -58
  203. data/spec/rubocop/cop/variable_inspector/variable_table_spec.rb +217 -223
  204. data/spec/rubocop/cop/variable_inspector_spec.rb +15 -19
  205. data/spec/rubocop/formatter/clang_style_formatter_spec.rb +35 -36
  206. data/spec/rubocop/formatter/disabled_config_formatter_spec.rb +2 -2
  207. data/spec/rubocop/formatter/emacs_style_formatter_spec.rb +24 -1
  208. data/spec/rubocop/formatter/file_list_formatter_spec.rb +1 -1
  209. data/spec/rubocop/formatter/formatter_set_spec.rb +3 -3
  210. data/spec/rubocop/formatter/json_formatter_spec.rb +7 -2
  211. data/spec/rubocop/formatter/offence_count_formatter_spec.rb +1 -1
  212. data/spec/rubocop/formatter/progress_formatter_spec.rb +1 -1
  213. data/spec/rubocop/formatter/simple_text_formatter_spec.rb +55 -6
  214. data/spec/rubocop/options_spec.rb +233 -0
  215. data/spec/rubocop/processed_source_spec.rb +85 -42
  216. data/spec/rubocop/source_parser_spec.rb +108 -110
  217. data/spec/rubocop/target_finder_spec.rb +125 -127
  218. data/spec/rubocop/token_spec.rb +15 -17
  219. metadata +32 -8
  220. data/lib/rubocop/backports/bsearch.rb +0 -39
  221. data/lib/rubocop/cop/style/method_and_variable_snake_case.rb +0 -77
  222. data/spec/rubocop/cop/style/method_and_variable_snake_case_spec.rb +0 -102
@@ -1,95 +1,100 @@
1
- # encoding: utf-8
1
+ # encoding: utf-8
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- module Rubocop
6
- module Cop
7
- module Style
8
- describe Semicolon do
9
- subject(:s) { Semicolon.new }
10
- let(:cop_config) do
11
- {
12
- 'AllowAfterParameterListInOneLineMethods' => false,
13
- 'AllowBeforeEndInOneLineMethods' => true
14
- }
15
- end
16
-
17
- it 'registers an offence for a single expression' do
18
- inspect_source(s,
19
- ['puts "this is a test";'])
20
- expect(s.offences.size).to eq(1)
21
- end
22
-
23
- it 'registers an offence for several expressions' do
24
- inspect_source(s,
25
- ['puts "this is a test"; puts "So is this"'])
26
- expect(s.offences.size).to eq(1)
27
- end
28
-
29
- it 'registers an offence for one line method with two statements' do
30
- inspect_source(s,
31
- ['def foo(a) x(1); y(2); z(3); end'])
32
- expect(s.offences.size).to eq(1)
33
- end
34
-
35
- it 'accepts semicolon before end if so configured' do
36
- inspect_source(s,
37
- ['def foo(a) z(3); end'])
38
- expect(s.offences).to be_empty
39
- end
40
-
41
- it 'accepts semicolon after params if so configured' do
42
- inspect_source(s,
43
- ['def foo(a); z(3) end'])
44
- expect(s.offences).to be_empty
45
- end
46
-
47
- it 'accepts one line method definitions' do
48
- inspect_source(s,
49
- ['def foo1; x(3) end',
50
- 'def initialize(*_); end',
51
- 'def foo2() x(3); end',
52
- 'def foo3; x(3); end'])
53
- expect(s.offences).to be_empty
54
- end
55
-
56
- it 'accepts one line empty class definitions' do
57
- inspect_source(s,
58
- ['# Prefer a single-line format for class ...',
59
- 'class Foo < Exception; end',
60
- '',
61
- 'class Bar; end'])
62
- expect(s.offences).to be_empty
63
- end
64
-
65
- it 'accepts one line empty method definitions' do
66
- inspect_source(s,
67
- ['# One exception to the rule are empty-body methods',
68
- 'def no_op; end',
69
- '',
70
- 'def foo; end'])
71
- expect(s.offences).to be_empty
72
- end
73
-
74
- it 'accepts one line empty module definitions' do
75
- inspect_source(s,
76
- ['module Foo; end'])
77
- expect(s.offences).to be_empty
78
- end
79
-
80
- it 'registers an offence for semicolon at the end no matter what' do
81
- inspect_source(s,
82
- ['module Foo; end;'])
83
- expect(s.offences.size).to eq(1)
84
- end
85
-
86
- it 'accept semicolons inside strings' do
87
- inspect_source(s,
88
- ['string = ";',
89
- 'multi-line string"'])
90
- expect(s.offences).to be_empty
91
- end
92
- end
93
- end
5
+ describe Rubocop::Cop::Style::Semicolon, :config do
6
+ subject(:cop) { described_class.new(config) }
7
+ let(:cop_config) { { 'AllowAsExpressionSeparator' => false } }
8
+
9
+ it 'registers an offence for a single expression' do
10
+ inspect_source(cop,
11
+ ['puts "this is a test";'])
12
+ expect(cop.offences.size).to eq(1)
13
+ end
14
+
15
+ it 'registers an offence for several expressions' do
16
+ inspect_source(cop,
17
+ ['puts "this is a test"; puts "So is this"'])
18
+ expect(cop.offences.size).to eq(1)
19
+ end
20
+
21
+ it 'registers an offence for one line method with two statements' do
22
+ inspect_source(cop,
23
+ ['def foo(a) x(1); y(2); z(3); end'])
24
+ expect(cop.offences.size).to eq(1)
25
+ end
26
+
27
+ it 'accepts semicolon before end if so configured' do
28
+ inspect_source(cop,
29
+ ['def foo(a) z(3); end'])
30
+ expect(cop.offences).to be_empty
31
+ end
32
+
33
+ it 'accepts semicolon after params if so configured' do
34
+ inspect_source(cop,
35
+ ['def foo(a); z(3) end'])
36
+ expect(cop.offences).to be_empty
37
+ end
38
+
39
+ it 'accepts one line method definitions' do
40
+ inspect_source(cop,
41
+ ['def foo1; x(3) end',
42
+ 'def initialize(*_); end',
43
+ 'def foo2() x(3); end',
44
+ 'def foo3; x(3); end'])
45
+ expect(cop.offences).to be_empty
46
+ end
47
+
48
+ it 'accepts one line empty class definitions' do
49
+ inspect_source(cop,
50
+ ['# Prefer a single-line format for class ...',
51
+ 'class Foo < Exception; end',
52
+ '',
53
+ 'class Bar; end'])
54
+ expect(cop.offences).to be_empty
55
+ end
56
+
57
+ it 'accepts one line empty method definitions' do
58
+ inspect_source(cop,
59
+ ['# One exception to the rule are empty-body methods',
60
+ 'def no_op; end',
61
+ '',
62
+ 'def foo; end'])
63
+ expect(cop.offences).to be_empty
64
+ end
65
+
66
+ it 'accepts one line empty module definitions' do
67
+ inspect_source(cop,
68
+ ['module Foo; end'])
69
+ expect(cop.offences).to be_empty
70
+ end
71
+
72
+ it 'registers an offence for semicolon at the end no matter what' do
73
+ inspect_source(cop,
74
+ ['module Foo; end;'])
75
+ expect(cop.offences.size).to eq(1)
76
+ end
77
+
78
+ it 'accept semicolons inside strings' do
79
+ inspect_source(cop,
80
+ ['string = ";',
81
+ 'multi-line string"'])
82
+ expect(cop.offences).to be_empty
94
83
  end
84
+
85
+ context 'when AllowAsExpressionSeparator is true' do
86
+ let(:cop_config) { { 'AllowAsExpressionSeparator' => true } }
87
+
88
+ it 'accepts several expressions' do
89
+ inspect_source(cop,
90
+ ['puts "this is a test"; puts "So is this"'])
91
+ expect(cop.offences).to be_empty
92
+ end
93
+
94
+ it 'accepts one line method with two statements' do
95
+ inspect_source(cop,
96
+ ['def foo(a) x(1); y(2); z(3); end'])
97
+ expect(cop.offences).to be_empty
98
+ end
99
+ end
95
100
  end
@@ -2,101 +2,254 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- module Rubocop
6
- module Cop
7
- module Style
8
- describe SignalException do
9
- subject(:cop) { described_class.new }
10
-
11
- it 'registers an offence for raise in begin section' do
12
- inspect_source(cop,
13
- ['begin',
14
- ' raise',
15
- 'rescue Exception',
16
- ' #do nothing',
17
- 'end'])
18
- expect(cop.offences.size).to eq(1)
19
- expect(cop.messages).to eq([SignalException::FAIL_MSG])
20
- end
21
-
22
- it 'registers an offence for raise in def body' do
23
- inspect_source(cop,
24
- ['def test',
25
- ' raise',
26
- 'rescue Exception',
27
- ' #do nothing',
28
- 'end'])
29
- expect(cop.offences.size).to eq(1)
30
- expect(cop.messages).to eq([SignalException::FAIL_MSG])
31
- end
32
-
33
- it 'registers an offence for fail in rescue section' do
34
- inspect_source(cop,
35
- ['begin',
36
- ' fail',
37
- 'rescue Exception',
38
- ' fail',
39
- 'end'])
40
- expect(cop.offences.size).to eq(1)
41
- expect(cop.messages).to eq([SignalException::RAISE_MSG])
42
- end
43
-
44
- it 'registers an offence for fail def rescue section' do
45
- inspect_source(cop,
46
- ['def test',
47
- ' fail',
48
- 'rescue Exception',
49
- ' fail',
50
- 'end'])
51
- expect(cop.offences.size).to eq(1)
52
- expect(cop.messages).to eq([SignalException::RAISE_MSG])
53
- end
54
-
55
- it 'is not confused by nested begin/rescue' do
56
- inspect_source(cop,
57
- ['begin',
58
- ' raise',
59
- ' begin',
60
- ' raise',
61
- ' rescue',
62
- ' fail',
63
- ' end',
64
- 'rescue Exception',
65
- ' #do nothing',
66
- 'end'])
67
- expect(cop.offences.size).to eq(3)
68
- expect(cop.messages).to eq([SignalException::FAIL_MSG] * 2 +
69
- [SignalException::RAISE_MSG])
70
- end
71
-
72
- it 'auto-corrects raise to fail when appropriate' do
73
- new_source = autocorrect_source(cop,
74
- ['begin',
75
- ' raise',
76
- 'rescue Exception',
77
- ' raise',
78
- 'end'])
79
- expect(new_source).to eq(['begin',
80
- ' fail',
81
- 'rescue Exception',
82
- ' raise',
83
- 'end'].join("\n"))
84
- end
85
-
86
- it 'auto-corrects fail to raise when appropriate' do
87
- new_source = autocorrect_source(cop,
88
- ['begin',
89
- ' fail',
90
- 'rescue Exception',
91
- ' fail',
92
- 'end'])
93
- expect(new_source).to eq(['begin',
94
- ' fail',
95
- 'rescue Exception',
96
- ' raise',
97
- 'end'].join("\n"))
98
- end
99
- end
5
+ describe Rubocop::Cop::Style::SignalException, :config do
6
+ subject(:cop) { described_class.new(config) }
7
+
8
+ context 'when enforced style is `semantic`' do
9
+ let(:cop_config) { { 'EnforcedStyle' => 'semantic' } }
10
+
11
+ it 'registers an offence for raise in begin section' do
12
+ inspect_source(cop,
13
+ ['begin',
14
+ ' raise',
15
+ 'rescue Exception',
16
+ ' #do nothing',
17
+ 'end'])
18
+ expect(cop.offences.size).to eq(1)
19
+ expect(cop.messages)
20
+ .to eq(['Use `fail` instead of `raise` to signal exceptions.'])
21
+ end
22
+
23
+ it 'registers an offence for raise in def body' do
24
+ inspect_source(cop,
25
+ ['def test',
26
+ ' raise',
27
+ 'rescue Exception',
28
+ ' #do nothing',
29
+ 'end'])
30
+ expect(cop.offences.size).to eq(1)
31
+ expect(cop.messages)
32
+ .to eq(['Use `fail` instead of `raise` to signal exceptions.'])
33
+ end
34
+
35
+ it 'registers an offence for fail in rescue section' do
36
+ inspect_source(cop,
37
+ ['begin',
38
+ ' fail',
39
+ 'rescue Exception',
40
+ ' fail',
41
+ 'end'])
42
+ expect(cop.offences.size).to eq(1)
43
+ expect(cop.messages)
44
+ .to eq(['Use `raise` instead of `fail` to rethrow exceptions.'])
45
+ end
46
+
47
+ it 'accepts raise in rescue section' do
48
+ inspect_source(cop,
49
+ ['begin',
50
+ ' fail',
51
+ 'rescue Exception',
52
+ ' raise RuntimeError',
53
+ 'end'])
54
+ expect(cop.offences).to be_empty
55
+ end
56
+
57
+ it 'registers an offence for fail in def rescue section' do
58
+ inspect_source(cop,
59
+ ['def test',
60
+ ' fail',
61
+ 'rescue Exception',
62
+ ' fail',
63
+ 'end'])
64
+ expect(cop.offences.size).to eq(1)
65
+ expect(cop.messages)
66
+ .to eq(['Use `raise` instead of `fail` to rethrow exceptions.'])
67
+ end
68
+
69
+ it 'accepts raise in def rescue section' do
70
+ inspect_source(cop,
71
+ ['def test',
72
+ ' fail',
73
+ 'rescue Exception',
74
+ ' raise',
75
+ 'end'])
76
+ expect(cop.offences).to be_empty
77
+ end
78
+
79
+ it 'registers an offence for raise not in a begin/rescue/end' do
80
+ inspect_source(cop,
81
+ ["case cop_config['EnforcedStyle']",
82
+ "when 'single_quotes' then true",
83
+ "when 'double_quotes' then false",
84
+ "else raise 'Unknown StringLiterals style'",
85
+ 'end'])
86
+ expect(cop.offences.size).to eq(1)
87
+ expect(cop.messages)
88
+ .to eq(['Use `fail` instead of `raise` to signal exceptions.'])
89
+ end
90
+
91
+ it 'registers one offence for each raise' do
92
+ inspect_source(cop,
93
+ ['cop.stub(:on_def) { raise RuntimeError }',
94
+ 'cop.stub(:on_def) { raise RuntimeError }'])
95
+ expect(cop.offences.size).to eq(2)
96
+ expect(cop.messages)
97
+ .to eq(['Use `fail` instead of `raise` to signal exceptions.'] * 2)
98
+ end
99
+
100
+ it 'is not confused by nested begin/rescue' do
101
+ inspect_source(cop,
102
+ ['begin',
103
+ ' raise',
104
+ ' begin',
105
+ ' raise',
106
+ ' rescue',
107
+ ' fail',
108
+ ' end',
109
+ 'rescue Exception',
110
+ ' #do nothing',
111
+ 'end'])
112
+ expect(cop.offences.size).to eq(3)
113
+ expect(cop.messages)
114
+ .to eq(['Use `fail` instead of `raise` to signal exceptions.'] * 2 +
115
+ ['Use `raise` instead of `fail` to rethrow exceptions.'])
116
+ end
117
+
118
+ it 'auto-corrects raise to fail when appropriate' do
119
+ new_source = autocorrect_source(cop,
120
+ ['begin',
121
+ ' raise',
122
+ 'rescue Exception',
123
+ ' raise',
124
+ 'end'])
125
+ expect(new_source).to eq(['begin',
126
+ ' fail',
127
+ 'rescue Exception',
128
+ ' raise',
129
+ 'end'].join("\n"))
130
+ end
131
+
132
+ it 'auto-corrects fail to raise when appropriate' do
133
+ new_source = autocorrect_source(cop,
134
+ ['begin',
135
+ ' fail',
136
+ 'rescue Exception',
137
+ ' fail',
138
+ 'end'])
139
+ expect(new_source).to eq(['begin',
140
+ ' fail',
141
+ 'rescue Exception',
142
+ ' raise',
143
+ 'end'].join("\n"))
144
+ end
145
+ end
146
+
147
+ context 'when enforced style is `raise`' do
148
+ let(:cop_config) { { 'EnforcedStyle' => 'only_raise' } }
149
+
150
+ it 'registers an offence for fail in begin section' do
151
+ inspect_source(cop,
152
+ ['begin',
153
+ ' fail',
154
+ 'rescue Exception',
155
+ ' #do nothing',
156
+ 'end'])
157
+ expect(cop.offences.size).to eq(1)
158
+ expect(cop.messages)
159
+ .to eq(['Always use `raise` to signal exceptions.'])
160
+ end
161
+
162
+ it 'registers an offence for fail in def body' do
163
+ inspect_source(cop,
164
+ ['def test',
165
+ ' fail',
166
+ 'rescue Exception',
167
+ ' #do nothing',
168
+ 'end'])
169
+ expect(cop.offences.size).to eq(1)
170
+ expect(cop.messages)
171
+ .to eq(['Always use `raise` to signal exceptions.'])
172
+ end
173
+
174
+ it 'registers an offence for fail in rescue section' do
175
+ inspect_source(cop,
176
+ ['begin',
177
+ ' raise',
178
+ 'rescue Exception',
179
+ ' fail',
180
+ 'end'])
181
+ expect(cop.offences.size).to eq(1)
182
+ expect(cop.messages)
183
+ .to eq(['Always use `raise` to signal exceptions.'])
184
+ end
185
+
186
+ it 'auto-corrects fail to raise always' do
187
+ new_source = autocorrect_source(cop,
188
+ ['begin',
189
+ ' fail',
190
+ 'rescue Exception',
191
+ ' fail',
192
+ 'end'])
193
+ expect(new_source).to eq(['begin',
194
+ ' raise',
195
+ 'rescue Exception',
196
+ ' raise',
197
+ 'end'].join("\n"))
198
+ end
199
+
200
+ end
201
+
202
+ context 'when enforced style is `fail`' do
203
+ let(:cop_config) { { 'EnforcedStyle' => 'only_fail' } }
204
+
205
+ it 'registers an offence for raise in begin section' do
206
+ inspect_source(cop,
207
+ ['begin',
208
+ ' raise',
209
+ 'rescue Exception',
210
+ ' #do nothing',
211
+ 'end'])
212
+ expect(cop.offences.size).to eq(1)
213
+ expect(cop.messages)
214
+ .to eq(['Always use `fail` to signal exceptions.'])
215
+ end
216
+
217
+ it 'registers an offence for raise in def body' do
218
+ inspect_source(cop,
219
+ ['def test',
220
+ ' raise',
221
+ 'rescue Exception',
222
+ ' #do nothing',
223
+ 'end'])
224
+ expect(cop.offences.size).to eq(1)
225
+ expect(cop.messages)
226
+ .to eq(['Always use `fail` to signal exceptions.'])
227
+ end
228
+
229
+ it 'registers an offence for raise in rescue section' do
230
+ inspect_source(cop,
231
+ ['begin',
232
+ ' fail',
233
+ 'rescue Exception',
234
+ ' raise',
235
+ 'end'])
236
+ expect(cop.offences.size).to eq(1)
237
+ expect(cop.messages)
238
+ .to eq(['Always use `fail` to signal exceptions.'])
239
+ end
240
+
241
+ it 'auto-corrects raise to fail always' do
242
+ new_source = autocorrect_source(cop,
243
+ ['begin',
244
+ ' raise',
245
+ 'rescue Exception',
246
+ ' raise',
247
+ 'end'])
248
+ expect(new_source).to eq(['begin',
249
+ ' fail',
250
+ 'rescue Exception',
251
+ ' fail',
252
+ 'end'].join("\n"))
100
253
  end
101
254
  end
102
255
  end