@@ -11,17 +11,15 @@ module Rails
1111 # assert_equal(a, b)
1212 # assert_equal a, b, "must be equal"
1313 # refute_equal(a, b)
14- #
1514 # assert_nil a
16- # refute_nil a
15+ # refute_empty(b)
1716 #
1817 # # good
1918 # expect(b).to eq(a)
2019 # expect(b).to(eq(a), "must be equal")
2120 # expect(b).not_to eq(a)
22- #
2321 # expect(a).to eq(nil)
24- # expect(a).not_to eq(nil)
22+ # expect(a).not_to be_empty
2523 #
2624 class MinitestAssertions < Base
2725 extend AutoCorrector
@@ -30,66 +28,111 @@ class MinitestAssertions < Base
3028 RESTRICT_ON_SEND = %i[
3129 assert_equal
3230 assert_not_equal
33- refute_equal
3431 assert_nil
3532 assert_not_nil
33+ assert_empty
34+ assert_not_empty
35+ refute_equal
3636 refute_nil
37+ refute_empty
3738 ] . freeze
3839
39- # @!method minitest_equal_assertion (node)
40- def_node_matcher :minitest_equal_assertion , <<~PATTERN
40+ # @!method minitest_equal (node)
41+ def_node_matcher :minitest_equal , <<~PATTERN
4142 (send nil? {:assert_equal :assert_not_equal :refute_equal} $_ $_ $_?)
4243 PATTERN
4344
44- # @!method minitest_nil_assertion (node)
45- def_node_matcher :minitest_nil_assertion , <<~PATTERN
45+ # @!method minitest_nil (node)
46+ def_node_matcher :minitest_nil , <<~PATTERN
4647 (send nil? {:assert_nil :assert_not_nil :refute_nil} $_ $_?)
4748 PATTERN
4849
49- def on_send ( node )
50- minitest_equal_assertion ( node ) do |expected , actual , fail_message |
51- prefer = replace_equal_assertion ( node , expected , actual ,
52- fail_message . first )
53- add_an_offense ( node , prefer )
50+ # @!method minitest_empty(node)
51+ def_node_matcher :minitest_empty , <<~PATTERN
52+ (send nil? {:assert_empty :assert_not_empty :refute_empty} $_ $_?)
53+ PATTERN
54+
55+ def on_send ( node ) # rubocop:disable Metrics/MethodLength
56+ minitest_equal ( node ) do |expected , actual , failure_message |
57+ on_assertion ( node , EqualAssertion . new ( expected , actual ,
58+ failure_message . first ) )
5459 end
5560
56- minitest_nil_assertion ( node ) do |actual , fail_message |
57- prefer = replace_nil_assertion ( node , actual ,
58- fail_message . first )
59- add_an_offense ( node , prefer )
61+ minitest_nil ( node ) do |actual , failure_message |
62+ on_assertion ( node , NilAssertion . new ( actual ,
63+ failure_message . first ) )
6064 end
61- end
6265
63- private
66+ minitest_empty ( node ) do |actual , failure_message |
67+ on_assertion ( node , EmptyAssertion . new ( actual ,
68+ failure_message . first ) )
69+ end
70+ end
6471
65- def add_an_offense ( node , prefer )
66- add_offense ( node , message : message ( prefer ) ) do |corrector |
67- corrector . replace ( node , prefer )
72+ def on_assertion ( node , assertion )
73+ preferred = assertion . replaced ( node )
74+ add_offense ( node , message : message ( preferred ) ) do |corrector |
75+ corrector . replace ( node , preferred )
6876 end
6977 end
7078
71- def replace_equal_assertion ( node , expected , actual , failure_message )
72- runner = node . method? ( :assert_equal ) ? 'to' : 'not_to'
73- if failure_message . nil?
74- "expect(#{ actual . source } ).#{ runner } eq(#{ expected . source } )"
75- else
76- "expect(#{ actual . source } ).#{ runner } (eq(#{ expected . source } ), " \
77- "#{ failure_message . source } )"
79+ def message ( preferred )
80+ format ( MSG , prefer : preferred )
81+ end
82+
83+ # :nodoc:
84+ class EqualAssertion
85+ def initialize ( expected , actual , fail_message )
86+ @expected = expected
87+ @actual = actual
88+ @fail_message = fail_message
89+ end
90+
91+ def replaced ( node )
92+ runner = node . method? ( :assert_equal ) ? 'to' : 'not_to'
93+ if @fail_message . nil?
94+ "expect(#{ @actual . source } ).#{ runner } eq(#{ @expected . source } )"
95+ else
96+ "expect(#{ @actual . source } ).#{ runner } (eq(#{ @expected . source } )," \
97+ " #{ @fail_message . source } )"
98+ end
7899 end
79100 end
80101
81- def replace_nil_assertion ( node , actual , failure_message )
82- runner = node . method? ( :assert_nil ) ? 'to' : 'not_to'
83- if failure_message . nil?
84- "expect(#{ actual . source } ).#{ runner } eq(nil)"
85- else
86- "expect(#{ actual . source } ).#{ runner } (eq(nil), " \
87- "#{ failure_message . source } )"
102+ # :nodoc:
103+ class NilAssertion
104+ def initialize ( actual , fail_message )
105+ @actual = actual
106+ @fail_message = fail_message
107+ end
108+
109+ def replaced ( node )
110+ runner = node . method? ( :assert_nil ) ? 'to' : 'not_to'
111+ if @fail_message . nil?
112+ "expect(#{ @actual . source } ).#{ runner } eq(nil)"
113+ else
114+ "expect(#{ @actual . source } ).#{ runner } (eq(nil), " \
115+ "#{ @fail_message . source } )"
116+ end
88117 end
89118 end
90119
91- def message ( prefer )
92- format ( MSG , prefer : prefer )
120+ # :nodoc:
121+ class EmptyAssertion
122+ def initialize ( actual , fail_message )
123+ @actual = actual
124+ @fail_message = fail_message
125+ end
126+
127+ def replaced ( node )
128+ runner = node . method? ( :assert_empty ) ? 'to' : 'not_to'
129+ if @fail_message . nil?
130+ "expect(#{ @actual . source } ).#{ runner } be_empty"
131+ else
132+ "expect(#{ @actual . source } ).#{ runner } (be_empty, " \
133+ "#{ @fail_message . source } )"
134+ end
135+ end
93136 end
94137 end
95138 end
0 commit comments