rubocop-minitest 0.3.0 → 0.4.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6971c190fb9bb75de58013b61826afebf8ff0213d6b4a82e215704baa655014d
4
- data.tar.gz: 2a1abf652db222f834a3e400240d99e01edca9539de7024220598e03e75cea26
3
+ metadata.gz: '06679af4eeb82332ac490d8aceb5cd0668cb3686e1bf7f7d8fb83d1bc6d99f50'
4
+ data.tar.gz: f967a4cff6cfdc23182befb62fbc4363197213065acb21da6fc99e62d685951d
5
5
  SHA512:
6
- metadata.gz: 8bc4d5b65791a48ffc5cfe2256b7496d6b99d750b331640bd8e2406c0cc030af2a9daf4a32671c81727a200ce6ba0d7601ab5752b84887d239f35204a8974a0d
7
- data.tar.gz: 0b58903c1bf5ab77e2a5d27c0b318d4d917ab78bbebe9a42f5f8432e2116bce9ceec6c5efc09dc640cd6efc1399fab17ed65422ef0fbce6de3ab82fb99d2c84c
6
+ metadata.gz: 3b2bbdefbd8de0346adb4b06884ab674ed88588bfaf8550ebcbadcd8f07be0199a0270c50ac15a9f36f607e157b3edde095db6e7caf3814cd8ff9ecc7350b9f3
7
+ data.tar.gz: 0f45beaa717b0d0135dd41462d372a794a66aea60e700f6cd942b79cd01a61f69914d45ad83ccad26ca95aa88b681d20f04b6b2b2e0a5278464399ef1a8ee47c
data/CHANGELOG.md CHANGED
@@ -2,6 +2,19 @@
2
2
 
3
3
  ## master (unreleased)
4
4
 
5
+ ## 0.4.0 (2019-11-07)
6
+
7
+ ### New features
8
+
9
+ * [#29](https://github.com/rubocop-hq/rubocop-minitest/pull/29): Add new `Minitest/RefuteRespondTo` cop. ([@herwinw][])
10
+ * [#31](https://github.com/rubocop-hq/rubocop-minitest/pull/31): Add new `Minitest/AssertEqual` cop. ([@herwinw][])
11
+ * [#34](https://github.com/rubocop-hq/rubocop-minitest/pull/34): Add new `Minitest/AssertInstanceOf` cop. ([@abhaynikam][])
12
+ * [#35](https://github.com/rubocop-hq/rubocop-minitest/pull/35): Add new `Minitest/RefuteInstanceOf` cop. ([@abhaynikam][])
13
+
14
+ ### Bug fixes
15
+
16
+ * [#25](https://github.com/rubocop-hq/rubocop-minitest/issues/25): Add `Enabled: true` to `Minitest` department config to suppress `Warning: Minitest does not support Enabled parameter`. ([@koic][])
17
+
5
18
  ## 0.3.0 (2019-10-13)
6
19
 
7
20
  ### New features
@@ -42,3 +55,4 @@
42
55
  [@duduribeiro]: https://github.com/duduribeiro
43
56
  [@tejasbubane]: https://github.com/tejasbubane
44
57
  [@abhaynikam]: https://github.com/abhaynikam
58
+ [@herwinw]: https://github.com/herwinw
data/Gemfile CHANGED
@@ -6,6 +6,7 @@ git_source(:github) { |repo| "https://github.com/#{repo}.git" }
6
6
 
7
7
  gemspec
8
8
 
9
+ gem 'bump', require: false
9
10
  gem 'rake'
10
11
  gem 'rubocop', github: 'rubocop-hq/rubocop'
11
12
  gem 'rubocop-performance', '~> 1.4.0'
data/README.md CHANGED
@@ -4,6 +4,7 @@
4
4
  [![CircleCI](https://circleci.com/gh/rubocop-hq/rubocop-minitest.svg?style=svg)](https://circleci.com/gh/rubocop-hq/rubocop-minitest)
5
5
 
6
6
  A [RuboCop](https://github.com/rubocop-hq/rubocop) extension focused on enforcing Minitest best practices and coding conventions.
7
+ The library is based on the guidelines outlined in the community [Minitest Style Guide](https://minitest.rubystyle.guide).
7
8
 
8
9
  ## Installation
9
10
 
@@ -61,7 +62,7 @@ end
61
62
 
62
63
  All cops are located under
63
64
  [`lib/rubocop/cop/minitest`](lib/rubocop/cop/minitest), and contain
64
- examples/documentation.
65
+ examples/documentation. The documentation is published [here](https://docs.rubocop.org/projects/minitest).
65
66
 
66
67
  In your `.rubocop.yml`, you may treat the Minitest cops just like any other
67
68
  cop. For example:
data/config/default.yml CHANGED
@@ -1,25 +1,38 @@
1
1
  Minitest:
2
+ Enabled: true
2
3
  Include:
3
4
  - '**/test/**/*'
4
5
 
5
- Minitest/AssertNil:
6
- Description: 'This cop enforces the test to use `assert_nil` instead of using `assert_equal(nil, something)`.'
7
- StyleGuide: 'https://github.com/rubocop-hq/minitest-style-guide#assert-nil'
8
- Enabled: true
9
- VersionAdded: '0.1'
10
-
11
6
  Minitest/AssertEmpty:
12
7
  Description: 'This cop enforces the test to use `assert_empty` instead of using `assert(object.empty?)`.'
13
8
  StyleGuide: 'https://github.com/rubocop-hq/minitest-style-guide#assert-empty'
14
9
  Enabled: true
15
10
  VersionAdded: '0.2'
16
11
 
12
+ Minitest/AssertEqual:
13
+ Description: 'This cop enforces the test to use `assert_equal` instead of using `assert(expected == actual)`.'
14
+ StyleGuide: 'https://github.com/rubocop-hq/minitest-style-guide#assert-equal-arguments-order'
15
+ Enabled: true
16
+ VersionAdded: '0.4'
17
+
17
18
  Minitest/AssertIncludes:
18
19
  Description: 'This cop enforces the test to use `assert_includes` instead of using `assert(collection.include?(object))`.'
19
20
  StyleGuide: 'https://github.com/rubocop-hq/minitest-style-guide#assert-includes'
20
21
  Enabled: true
21
22
  VersionAdded: '0.2'
22
23
 
24
+ Minitest/AssertInstanceOf:
25
+ Description: 'This cop enforces the test to use `assert_instance_of(Class, object)` over `assert(object.instance_of?(Class))`'
26
+ StyleGuide: 'https://github.com/rubocop-hq/minitest-style-guide#assert-instance-of'
27
+ Enabled: true
28
+ VersionAdded: '0.4'
29
+
30
+ Minitest/AssertNil:
31
+ Description: 'This cop enforces the test to use `assert_nil` instead of using `assert_equal(nil, something)`.'
32
+ StyleGuide: 'https://github.com/rubocop-hq/minitest-style-guide#assert-nil'
33
+ Enabled: true
34
+ VersionAdded: '0.1'
35
+
23
36
  Minitest/AssertRespondTo:
24
37
  Description: 'This cop enforces the test to use `assert_respond_to(object, :some_method)` over `assert(object.respond_to?(:some_method))`.'
25
38
  StyleGuide: 'https://github.com/rubocop-hq/minitest-style-guide#assert-responds-to-method'
@@ -32,21 +45,21 @@ Minitest/AssertTruthy:
32
45
  Enabled: true
33
46
  VersionAdded: '0.2'
34
47
 
48
+ Minitest/RefuteEmpty:
49
+ Description: 'This cop enforces to use `refute_empty` instead of using `refute(object.empty?)`.'
50
+ StyleGuide: 'https://github.com/rubocop-hq/minitest-style-guide#refute-empty'
51
+ Enabled: true
52
+ VersionAdded: '0.3'
53
+
35
54
  Minitest/RefuteEqual:
36
55
  Description: 'Check if your test uses `refute_equal` instead of `assert(expected != object)` or `assert(! expected == object))`.'
37
56
  StyleGuide: 'https://github.com/rubocop-hq/minitest-style-guide#refute-equal'
38
57
  Enabled: true
39
58
  VersionAdded: '0.3'
40
59
 
41
- Minitest/RefuteNil:
42
- Description: 'This cop enforces the test to use `refute_nil` instead of using `refute_equal(nil, something)`.'
43
- StyleGuide: 'https://github.com/rubocop-hq/minitest-style-guide#refute-nil'
44
- Enabled: true
45
- VersionAdded: '0.2'
46
-
47
- Minitest/RefuteEmpty:
48
- Description: 'This cop enforces to use `refute_empty` instead of using `refute(object.empty?)`.'
49
- StyleGuide: 'https://github.com/rubocop-hq/minitest-style-guide#refute-empty'
60
+ Minitest/RefuteFalse:
61
+ Description: 'Check if your test uses `refute(actual)` instead of `assert_equal(false, actual)`.'
62
+ StyleGuide: 'https://github.com/rubocop-hq/minitest-style-guide#refute-false'
50
63
  Enabled: true
51
64
  VersionAdded: '0.3'
52
65
 
@@ -56,8 +69,20 @@ Minitest/RefuteIncludes:
56
69
  Enabled: true
57
70
  VersionAdded: '0.3'
58
71
 
59
- Minitest/RefuteFalse:
60
- Description: 'Check if your test uses `refute(actual)` instead of `assert_equal(false, actual)`.'
61
- StyleGuide: 'https://github.com/rubocop-hq/minitest-style-guide#refute-false'
72
+ Minitest/RefuteInstanceOf:
73
+ Description: 'This cop enforces the test to use `refute_instance_of(Class, object)` over `refute(object.instance_of?(Class))`.'
74
+ StyleGuide: 'https://github.com/rubocop-hq/minitest-style-guide#refute-instance-of'
62
75
  Enabled: true
63
- VersionAdded: '0.3'
76
+ VersionAdded: '0.4'
77
+
78
+ Minitest/RefuteNil:
79
+ Description: 'This cop enforces the test to use `refute_nil` instead of using `refute_equal(nil, something)`.'
80
+ StyleGuide: 'https://github.com/rubocop-hq/minitest-style-guide#refute-nil'
81
+ Enabled: true
82
+ VersionAdded: '0.2'
83
+
84
+ Minitest/RefuteRespondTo:
85
+ Description: 'This cop enforces the test to use `refute_respond_to(object, :some_method)` over `refute(object.respond_to?(:some_method))`.'
86
+ StyleGuide: 'https://github.com/rubocop-hq/minitest-style-guide#refute-respond-to'
87
+ Enabled: true
88
+ VersionAdded: '0.4'
@@ -1,8 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'pathname'
4
- require 'yaml'
5
-
6
3
  require 'rubocop'
7
4
 
8
5
  require_relative 'rubocop/minitest'
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Minitest
6
+ # This cop enforces the use of `assert_equal(expected, actual)`
7
+ # over `assert(expected == actual)`.
8
+ #
9
+ # @example
10
+ # # bad
11
+ # assert("rubocop-minitest" == actual)
12
+ #
13
+ # # good
14
+ # assert_equal("rubocop-minitest", actual)
15
+ #
16
+ class AssertEqual < Cop
17
+ MSG = 'Prefer using `assert_equal(%<preferred>s)` over ' \
18
+ '`assert(%<over>s)`.'
19
+
20
+ def_node_matcher :assert_equal, <<~PATTERN
21
+ (send nil? :assert $(send $_ :== $_) $...)
22
+ PATTERN
23
+
24
+ def on_send(node)
25
+ assert_equal(node) do
26
+ |first_receiver_arg, expected, actual, rest_receiver_arg|
27
+
28
+ message = rest_receiver_arg.first
29
+ preferred = [expected.source, actual.source, message&.source]
30
+ .compact.join(', ')
31
+ over = [first_receiver_arg.source, message&.source].compact.join(', ')
32
+
33
+ offense_message = format(MSG, preferred: preferred, over: over)
34
+
35
+ add_offense(node, message: offense_message)
36
+ end
37
+ end
38
+
39
+ def autocorrect(node)
40
+ lambda do |corrector|
41
+ assert_equal(node) do |_receiver, expected, actual, rest_receiver_arg|
42
+ message = rest_receiver_arg.first
43
+ replacement = node_arguments(expected, actual, message)
44
+ corrector.replace(node.loc.expression, "assert_equal(#{replacement})")
45
+ end
46
+ end
47
+ end
48
+
49
+ private
50
+
51
+ def node_arguments(expected, actual, message)
52
+ [expected.source, actual.source, message&.source].compact.join(', ')
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Minitest
6
+ # This cop enforces the test to use `assert_instance_of(Class, object)`
7
+ # over `assert(object.instance_of?(Class))`.
8
+ #
9
+ # @example
10
+ # # bad
11
+ # assert(object.instance_of?(Class))
12
+ # assert(object.instance_of?(Class), 'the message')
13
+ #
14
+ # # good
15
+ # assert_instance_of(Class, object)
16
+ # assert_instance_of(Class, object, 'the message')
17
+ #
18
+ class AssertInstanceOf < Cop
19
+ MSG = 'Prefer using `assert_instance_of(%<arguments>s)` over ' \
20
+ '`assert(%<receiver>s)`.'
21
+
22
+ def_node_matcher :assert_with_instance_of, <<~PATTERN
23
+ (send nil? :assert $(send $_ :instance_of? $_) $...)
24
+ PATTERN
25
+
26
+ def on_send(node)
27
+ assert_with_instance_of(node) do
28
+ |first_receiver_arg, object, method, rest_args|
29
+
30
+ message = rest_args.first
31
+ arguments = node_arguments(object, method, message)
32
+ receiver = [first_receiver_arg.source, message&.source].compact.join(', ')
33
+
34
+ offense_message = format(MSG, arguments: arguments, receiver: receiver)
35
+
36
+ add_offense(node, message: offense_message)
37
+ end
38
+ end
39
+
40
+ def autocorrect(node)
41
+ lambda do |corrector|
42
+ assert_with_instance_of(node) do |_, object, method, rest_args|
43
+ message = rest_args.first
44
+ arguments = node_arguments(object, method, message)
45
+
46
+ replacement = "assert_instance_of(#{arguments})"
47
+ corrector.replace(node.loc.expression, replacement)
48
+ end
49
+ end
50
+ end
51
+
52
+ private
53
+
54
+ def node_arguments(object, method, message)
55
+ [method, object, message].compact.map(&:source).join(', ')
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -4,7 +4,7 @@ module RuboCop
4
4
  module Cop
5
5
  module Minitest
6
6
  # This cop enforces the use of `refute_equal(expected, object)`
7
- # over `assert_equal(expected != actual)` or `assert(! expected -= actual)`.
7
+ # over `assert_equal(expected != actual)` or `assert(! expected == actual)`.
8
8
  #
9
9
  # @example
10
10
  # # bad
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Minitest
6
+ # This cop enforces the use of `refute_instance_of(Class, object)`
7
+ # over `refute(object.instance_of?(Class))`.
8
+ #
9
+ # @example
10
+ # # bad
11
+ # refute(object.instance_of?(Class))
12
+ # refute(object.instance_of?(Class), 'the message')
13
+ #
14
+ # # good
15
+ # refute_instance_of(Class, object)
16
+ # refute_instance_of(Class, object, 'the message')
17
+ #
18
+ class RefuteInstanceOf < Cop
19
+ MSG = 'Prefer using `refute_instance_of(%<arguments>s)` over ' \
20
+ '`refute(%<receiver>s)`.'
21
+
22
+ def_node_matcher :refute_with_instance_of, <<~PATTERN
23
+ (send nil? :refute $(send $_ :instance_of? $_) $...)
24
+ PATTERN
25
+
26
+ def on_send(node)
27
+ refute_with_instance_of(node) do
28
+ |first_receiver_arg, object, method, rest_args|
29
+
30
+ message = rest_args.first
31
+ arguments = node_arguments(object, method, message)
32
+ receiver = [first_receiver_arg.source, message&.source].compact.join(', ')
33
+
34
+ offense_message = format(MSG, arguments: arguments, receiver: receiver)
35
+
36
+ add_offense(node, message: offense_message)
37
+ end
38
+ end
39
+
40
+ def autocorrect(node)
41
+ lambda do |corrector|
42
+ refute_with_instance_of(node) do |_, object, method, rest_args|
43
+ message = rest_args.first
44
+ arguments = node_arguments(object, method, message)
45
+
46
+ replacement = "refute_instance_of(#{arguments})"
47
+ corrector.replace(node.loc.expression, replacement)
48
+ end
49
+ end
50
+ end
51
+
52
+ private
53
+
54
+ def node_arguments(object, method, message)
55
+ [method, object, message].compact.map(&:source).join(', ')
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Minitest
6
+ # This cop enforces the test to use `refute_respond_to(object, :some_method)`
7
+ # over `refute(object.respond_to?(:some_method))`.
8
+ #
9
+ # @example
10
+ # # bad
11
+ # refute(object.respond_to?(:some_method))
12
+ # refute(object.respond_to?(:some_method), 'the message')
13
+ #
14
+ # # good
15
+ # refute_respond_to(object, :some_method)
16
+ # refute_respond_to(object, :some_method, 'the message')
17
+ #
18
+ class RefuteRespondTo < Cop
19
+ MSG = 'Prefer using `refute_respond_to(%<preferred>s)` over ' \
20
+ '`refute(%<over>s)`.'
21
+
22
+ def_node_matcher :refute_with_respond_to, <<~PATTERN
23
+ (send nil? :refute $(send $_ :respond_to? $_) $...)
24
+ PATTERN
25
+
26
+ def on_send(node)
27
+ refute_with_respond_to(node) do |over, object, method, rest_args|
28
+ custom_message = rest_args.first
29
+ preferred = [object, method, custom_message]
30
+ .compact.map(&:source).join(', ')
31
+ over = [over, custom_message].compact.map(&:source).join(', ')
32
+ message = format(MSG, preferred: preferred, over: over)
33
+ add_offense(node, message: message)
34
+ end
35
+ end
36
+
37
+ def autocorrect(node)
38
+ lambda do |corrector|
39
+ refute_with_respond_to(node) do |_, object, method, rest_args|
40
+ custom_message = rest_args.first
41
+ preferred = [object, method, custom_message]
42
+ .compact.map(&:source).join(', ')
43
+ replacement = "refute_respond_to(#{preferred})"
44
+ corrector.replace(node.loc.expression, replacement)
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -1,8 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative 'minitest/assert_empty'
4
+ require_relative 'minitest/assert_equal'
4
5
  require_relative 'minitest/assert_nil'
5
6
  require_relative 'minitest/assert_includes'
7
+ require_relative 'minitest/assert_instance_of'
6
8
  require_relative 'minitest/assert_respond_to'
7
9
  require_relative 'minitest/assert_truthy'
8
10
  require_relative 'minitest/refute_empty'
@@ -10,3 +12,5 @@ require_relative 'minitest/refute_false'
10
12
  require_relative 'minitest/refute_equal'
11
13
  require_relative 'minitest/refute_nil'
12
14
  require_relative 'minitest/refute_includes'
15
+ require_relative 'minitest/refute_instance_of'
16
+ require_relative 'minitest/refute_respond_to'
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RuboCop
4
4
  module Minitest
5
- VERSION = '0.3.0'
5
+ VERSION = '0.4.0'
6
6
  end
7
7
  end
data/manual/cops.md CHANGED
@@ -2,7 +2,9 @@
2
2
  #### Department [Minitest](cops_minitest.md)
3
3
 
4
4
  * [Minitest/AssertEmpty](cops_minitest.md#minitestassertempty)
5
+ * [Minitest/AssertEqual](cops_minitest.md#minitestassertequal)
5
6
  * [Minitest/AssertIncludes](cops_minitest.md#minitestassertincludes)
7
+ * [Minitest/AssertInstanceOf](cops_minitest.md#minitestassertinstanceof)
6
8
  * [Minitest/AssertNil](cops_minitest.md#minitestassertnil)
7
9
  * [Minitest/AssertRespondTo](cops_minitest.md#minitestassertrespondto)
8
10
  * [Minitest/AssertTruthy](cops_minitest.md#minitestasserttruthy)
@@ -10,6 +12,8 @@
10
12
  * [Minitest/RefuteEqual](cops_minitest.md#minitestrefuteequal)
11
13
  * [Minitest/RefuteFalse](cops_minitest.md#minitestrefutefalse)
12
14
  * [Minitest/RefuteIncludes](cops_minitest.md#minitestrefuteincludes)
15
+ * [Minitest/RefuteInstanceOf](cops_minitest.md#minitestrefuteinstanceof)
13
16
  * [Minitest/RefuteNil](cops_minitest.md#minitestrefutenil)
17
+ * [Minitest/RefuteRespondTo](cops_minitest.md#minitestrefuterespondto)
14
18
 
15
19
  <!-- END_COP_LIST -->
@@ -25,6 +25,29 @@ assert_empty(object, 'the message')
25
25
 
26
26
  * [https://github.com/rubocop-hq/minitest-style-guide#assert-empty](https://github.com/rubocop-hq/minitest-style-guide#assert-empty)
27
27
 
28
+ ## Minitest/AssertEqual
29
+
30
+ Enabled by default | Safe | Supports autocorrection | VersionAdded | VersionChanged
31
+ --- | --- | --- | --- | ---
32
+ Enabled | Yes | Yes | 0.4 | -
33
+
34
+ This cop enforces the use of `assert_equal(expected, actual)`
35
+ over `assert(expected == actual)`.
36
+
37
+ ### Examples
38
+
39
+ ```ruby
40
+ # bad
41
+ assert("rubocop-minitest" == actual)
42
+
43
+ # good
44
+ assert_equal("rubocop-minitest", actual)
45
+ ```
46
+
47
+ ### References
48
+
49
+ * [https://github.com/rubocop-hq/minitest-style-guide#assert-equal-arguments-order](https://github.com/rubocop-hq/minitest-style-guide#assert-equal-arguments-order)
50
+
28
51
  ## Minitest/AssertIncludes
29
52
 
30
53
  Enabled by default | Safe | Supports autocorrection | VersionAdded | VersionChanged
@@ -50,6 +73,31 @@ assert_includes(collection, object, 'the message')
50
73
 
51
74
  * [https://github.com/rubocop-hq/minitest-style-guide#assert-includes](https://github.com/rubocop-hq/minitest-style-guide#assert-includes)
52
75
 
76
+ ## Minitest/AssertInstanceOf
77
+
78
+ Enabled by default | Safe | Supports autocorrection | VersionAdded | VersionChanged
79
+ --- | --- | --- | --- | ---
80
+ Enabled | Yes | Yes | 0.4 | -
81
+
82
+ This cop enforces the test to use `assert_instance_of(Class, object)`
83
+ over `assert(object.instance_of?(Class))`.
84
+
85
+ ### Examples
86
+
87
+ ```ruby
88
+ # bad
89
+ assert(object.instance_of?(Class))
90
+ assert(object.instance_of?(Class), 'the message')
91
+
92
+ # good
93
+ assert_instance_of(Class, object)
94
+ assert_instance_of(Class, object, 'the message')
95
+ ```
96
+
97
+ ### References
98
+
99
+ * [https://github.com/rubocop-hq/minitest-style-guide#assert-instance-of](https://github.com/rubocop-hq/minitest-style-guide#assert-instance-of)
100
+
53
101
  ## Minitest/AssertNil
54
102
 
55
103
  Enabled by default | Safe | Supports autocorrection | VersionAdded | VersionChanged
@@ -157,7 +205,7 @@ Enabled by default | Safe | Supports autocorrection | VersionAdded | VersionChan
157
205
  Enabled | Yes | Yes | 0.3 | -
158
206
 
159
207
  This cop enforces the use of `refute_equal(expected, object)`
160
- over `assert_equal(expected != actual)` or `assert(! expected -= actual)`.
208
+ over `assert_equal(expected != actual)` or `assert(! expected == actual)`.
161
209
 
162
210
  ### Examples
163
211
 
@@ -224,6 +272,31 @@ refute_includes(collection, object, 'the message')
224
272
 
225
273
  * [https://github.com/rubocop-hq/minitest-style-guide#refute-includes](https://github.com/rubocop-hq/minitest-style-guide#refute-includes)
226
274
 
275
+ ## Minitest/RefuteInstanceOf
276
+
277
+ Enabled by default | Safe | Supports autocorrection | VersionAdded | VersionChanged
278
+ --- | --- | --- | --- | ---
279
+ Enabled | Yes | Yes | 0.4 | -
280
+
281
+ This cop enforces the use of `refute_instance_of(Class, object)`
282
+ over `refute(object.instance_of?(Class))`.
283
+
284
+ ### Examples
285
+
286
+ ```ruby
287
+ # bad
288
+ refute(object.instance_of?(Class))
289
+ refute(object.instance_of?(Class), 'the message')
290
+
291
+ # good
292
+ refute_instance_of(Class, object)
293
+ refute_instance_of(Class, object, 'the message')
294
+ ```
295
+
296
+ ### References
297
+
298
+ * [https://github.com/rubocop-hq/minitest-style-guide#refute-instance-of](https://github.com/rubocop-hq/minitest-style-guide#refute-instance-of)
299
+
227
300
  ## Minitest/RefuteNil
228
301
 
229
302
  Enabled by default | Safe | Supports autocorrection | VersionAdded | VersionChanged
@@ -248,3 +321,28 @@ refute_nil(actual, 'the message')
248
321
  ### References
249
322
 
250
323
  * [https://github.com/rubocop-hq/minitest-style-guide#refute-nil](https://github.com/rubocop-hq/minitest-style-guide#refute-nil)
324
+
325
+ ## Minitest/RefuteRespondTo
326
+
327
+ Enabled by default | Safe | Supports autocorrection | VersionAdded | VersionChanged
328
+ --- | --- | --- | --- | ---
329
+ Enabled | Yes | Yes | 0.4 | -
330
+
331
+ This cop enforces the test to use `refute_respond_to(object, :some_method)`
332
+ over `refute(object.respond_to?(:some_method))`.
333
+
334
+ ### Examples
335
+
336
+ ```ruby
337
+ # bad
338
+ refute(object.respond_to?(:some_method))
339
+ refute(object.respond_to?(:some_method), 'the message')
340
+
341
+ # good
342
+ refute_respond_to(object, :some_method)
343
+ refute_respond_to(object, :some_method, 'the message')
344
+ ```
345
+
346
+ ### References
347
+
348
+ * [https://github.com/rubocop-hq/minitest-style-guide#refute-respond-to](https://github.com/rubocop-hq/minitest-style-guide#refute-respond-to)
@@ -0,0 +1,7 @@
1
+ ### New features
2
+
3
+ * Create RuboCop Minitest gem. ([@koic][])
4
+ * [#6](https://github.com/rubocop-hq/rubocop-minitest/pull/6): Add new `Minitest/AssertNil` cop. ([@duduribeiro ][])
5
+
6
+ [@koic]: https://github.com/koic
7
+ [@duduribeiro]: https://github.com/duduribeiro
@@ -0,0 +1,9 @@
1
+ ### New features
2
+
3
+ * [#11](https://github.com/rubocop-hq/rubocop-minitest/pull/11): Add new `Minitest/RefuteNil` cop. ([@tejasbubane ][])
4
+ * [#8](https://github.com/rubocop-hq/rubocop-minitest/pull/8): Add new `Minitest/AssertTruthy` cop. ([@abhaynikam ][])
5
+ * [#9](https://github.com/rubocop-hq/rubocop-minitest/pull/9): Add new `Minitest/AssertIncludes` cop. ([@abhaynikam ][])
6
+ * [#10](https://github.com/rubocop-hq/rubocop-minitest/pull/10): Add new `Minitest/AssertEmpty` cop. ([@abhaynikam ][])
7
+
8
+ [@tejasbubane]: https://github.com/tejasbubane
9
+ [@abhaynikam]: https://github.com/abhaynikam
@@ -0,0 +1,5 @@
1
+ ### Bug fixes
2
+
3
+ * [#13](https://github.com/rubocop-hq/rubocop-minitest/issues/13): Fix the execution target specified in `Include` parameter. ([@koic][])
4
+
5
+ [@koic]: https://github.com/koic
@@ -0,0 +1,16 @@
1
+ ## 0.3.0 (2019-10-13)
2
+
3
+ ### New features
4
+
5
+ * [#15](https://github.com/rubocop-hq/rubocop-minitest/pull/15): Add new `Minitest/RefuteIncludes` cop. ([@abhaynikam][])
6
+ * [#18](https://github.com/rubocop-hq/rubocop-minitest/pull/18): Add new `Minitest/RefuteFalse` cop. ([@duduribeiro][])
7
+ * [#20](https://github.com/rubocop-hq/rubocop-minitest/pull/20): Add new `Minitest/RefuteEmpty` cop. ([@abhaynikam][])
8
+ * [#21](https://github.com/rubocop-hq/rubocop-minitest/pull/21): Add new `Minitest/RefuteEqual` cop. ([@duduribeiro][])
9
+ * [#27](https://github.com/rubocop-hq/rubocop-minitest/pull/27): Add new `Minitest/AssertRespondTo` cop. ([@duduribeiro][])
10
+
11
+ ### Bug fixes
12
+
13
+ * [#19](https://github.com/rubocop-hq/rubocop-minitest/pull/19): Fix a false negative for `Minitest/AssertIncludes` when using `include` method in arguments of `assert` method. ([@abhaynikam][])
14
+
15
+ [@abhaynikam]: https://github.com/abhaynikam
16
+ [@duduribeiro]: https://github.com/duduribeiro
@@ -0,0 +1,14 @@
1
+ ### New features
2
+
3
+ * [#29](https://github.com/rubocop-hq/rubocop-minitest/pull/29): Add new `Minitest/RefuteRespondTo` cop. ([@herwinw][])
4
+ * [#31](https://github.com/rubocop-hq/rubocop-minitest/pull/31): Add new `Minitest/AssertEqual` cop. ([@herwinw][])
5
+ * [#34](https://github.com/rubocop-hq/rubocop-minitest/pull/34): Add new `Minitest/AssertInstanceOf` cop. ([@abhaynikam][])
6
+ * [#35](https://github.com/rubocop-hq/rubocop-minitest/pull/35): Add new `Minitest/RefuteInstanceOf` cop. ([@abhaynikam][])
7
+
8
+ ### Bug fixes
9
+
10
+ * [#25](https://github.com/rubocop-hq/rubocop-minitest/issues/25): Add `Enabled: true` to `Minitest` department config to suppress `Warning: Minitest does not support Enabled parameter`. ([@koic][])
11
+
12
+ [@herwinw]: https://github.com/herwinw
13
+ [@abhaynikam]: https://github.com/abhaynikam
14
+ [@koic]: https://github.com/koic
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bump'
4
+
5
+ namespace :cut_release do
6
+ %w[major minor patch pre].each do |release_type|
7
+ desc "Cut a new #{release_type} release, create release notes " \
8
+ 'and update documents.'
9
+ task release_type do
10
+ run(release_type)
11
+ end
12
+ end
13
+
14
+ def add_header_to_changelog(version)
15
+ changelog = File.read('CHANGELOG.md')
16
+ head, tail = changelog.split("## master (unreleased)\n\n", 2)
17
+
18
+ File.open('CHANGELOG.md', 'w') do |f|
19
+ f << head
20
+ f << "## master (unreleased)\n\n"
21
+ f << "## #{version} (#{Time.now.strftime('%F')})\n\n"
22
+ f << tail
23
+ end
24
+ end
25
+
26
+ def create_release_notes(version)
27
+ release_notes = new_version_changes.strip
28
+ contributor_links = user_links(release_notes)
29
+
30
+ File.open("relnotes/v#{version}.md", 'w') do |file|
31
+ file << release_notes
32
+ file << "\n\n"
33
+ file << contributor_links
34
+ file << "\n"
35
+ end
36
+ end
37
+
38
+ def new_version_changes
39
+ changelog = File.read('CHANGELOG.md')
40
+ _, _, new_changes, _older_changes = changelog.split(/^## .*$/, 4)
41
+ new_changes
42
+ end
43
+
44
+ def user_links(text)
45
+ names = text.scan(/\[@(\S+)\]\[\]/).map(&:first).uniq
46
+ names.map { |name| "[@#{name}]: https://github.com/#{name}" }
47
+ .join("\n")
48
+ end
49
+
50
+ def run(release_type)
51
+ old_version = Bump::Bump.current
52
+ Bump::Bump.run(release_type, commit: false, bundle: false, tag: false)
53
+ new_version = Bump::Bump.current
54
+
55
+ add_header_to_changelog(new_version)
56
+ create_release_notes(new_version)
57
+
58
+ puts "Changed version from #{old_version} to #{new_version}."
59
+ end
60
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubocop-minitest
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bozhidar Batsov
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: exe
12
12
  cert_chain: []
13
- date: 2019-10-13 00:00:00.000000000 Z
13
+ date: 2019-11-07 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rubocop
@@ -67,7 +67,9 @@ files:
67
67
  - config/default.yml
68
68
  - lib/rubocop-minitest.rb
69
69
  - lib/rubocop/cop/minitest/assert_empty.rb
70
+ - lib/rubocop/cop/minitest/assert_equal.rb
70
71
  - lib/rubocop/cop/minitest/assert_includes.rb
72
+ - lib/rubocop/cop/minitest/assert_instance_of.rb
71
73
  - lib/rubocop/cop/minitest/assert_nil.rb
72
74
  - lib/rubocop/cop/minitest/assert_respond_to.rb
73
75
  - lib/rubocop/cop/minitest/assert_truthy.rb
@@ -75,7 +77,9 @@ files:
75
77
  - lib/rubocop/cop/minitest/refute_equal.rb
76
78
  - lib/rubocop/cop/minitest/refute_false.rb
77
79
  - lib/rubocop/cop/minitest/refute_includes.rb
80
+ - lib/rubocop/cop/minitest/refute_instance_of.rb
78
81
  - lib/rubocop/cop/minitest/refute_nil.rb
82
+ - lib/rubocop/cop/minitest/refute_respond_to.rb
79
83
  - lib/rubocop/cop/minitest_cops.rb
80
84
  - lib/rubocop/minitest.rb
81
85
  - lib/rubocop/minitest/inject.rb
@@ -87,8 +91,14 @@ files:
87
91
  - manual/usage.md
88
92
  - mkdocs.yml
89
93
  - readthedocs.yml
94
+ - relnotes/v0.1.0.md
95
+ - relnotes/v0.2.0.md
96
+ - relnotes/v0.2.1.md
97
+ - relnotes/v0.3.0.md
98
+ - relnotes/v0.4.0.md
90
99
  - rubocop-minitest.gemspec
91
100
  - tasks/cops_documentation.rake
101
+ - tasks/cut_release.rake
92
102
  homepage:
93
103
  licenses:
94
104
  - MIT