@@ -11,17 +11,15 @@ module Rails
11
11
# assert_equal(a, b)
12
12
# assert_equal a, b, "must be equal"
13
13
# refute_equal(a, b)
14
- #
15
14
# assert_nil a
16
- # refute_nil a
15
+ # refute_empty(b)
17
16
#
18
17
# # good
19
18
# expect(b).to eq(a)
20
19
# expect(b).to(eq(a), "must be equal")
21
20
# expect(b).not_to eq(a)
22
- #
23
21
# expect(a).to eq(nil)
24
- # expect(a).not_to eq(nil)
22
+ # expect(a).not_to be_empty
25
23
#
26
24
class MinitestAssertions < Base
27
25
extend AutoCorrector
@@ -30,66 +28,111 @@ class MinitestAssertions < Base
30
28
RESTRICT_ON_SEND = %i[
31
29
assert_equal
32
30
assert_not_equal
33
- refute_equal
34
31
assert_nil
35
32
assert_not_nil
33
+ assert_empty
34
+ assert_not_empty
35
+ refute_equal
36
36
refute_nil
37
+ refute_empty
37
38
] . freeze
38
39
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
41
42
(send nil? {:assert_equal :assert_not_equal :refute_equal} $_ $_ $_?)
42
43
PATTERN
43
44
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
46
47
(send nil? {:assert_nil :assert_not_nil :refute_nil} $_ $_?)
47
48
PATTERN
48
49
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 ) )
54
59
end
55
60
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 ) )
60
64
end
61
- end
62
65
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
64
71
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 )
68
76
end
69
77
end
70
78
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
78
99
end
79
100
end
80
101
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
88
117
end
89
118
end
90
119
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
93
136
end
94
137
end
95
138
end
0 commit comments