/
else_layout_spec.rb
143 lines (129 loc) · 2.67 KB
/
else_layout_spec.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
# frozen_string_literal: true
RSpec.describe RuboCop::Cop::Lint::ElseLayout, :config do
it 'registers an offense and corrects for expr on same line as else' do
expect_offense(<<~RUBY)
if something
test
else ala
^^^ Odd `else` layout detected. Did you mean to use `elsif`?
something
test
end
RUBY
expect_correction(<<~RUBY)
if something
test
else
ala
something
test
end
RUBY
end
it 'registers an offense and corrects for the entire else body being on the same line' do
expect_offense(<<~RUBY)
if something
test
else something_else
^^^^^^^^^^^^^^ Odd `else` layout detected. Did you mean to use `elsif`?
end
RUBY
expect_correction(<<~RUBY)
if something
test
else
something_else
end
RUBY
end
it 'accepts proper else' do
expect_no_offenses(<<~RUBY)
if something
test
else
something
test
end
RUBY
end
it 'registers an offense and corrects for elsifs' do
expect_offense(<<~RUBY)
if something
test
elsif something
bala
else ala
^^^ Odd `else` layout detected. Did you mean to use `elsif`?
something
test
end
RUBY
expect_correction(<<~RUBY)
if something
test
elsif something
bala
else
ala
something
test
end
RUBY
end
it 'registers and corrects an offense when using multiple `elsif`s' do
expect_offense(<<~RUBY)
if condition_foo
foo
elsif condition_bar
bar
elsif condition_baz
baz
else qux
^^^ Odd `else` layout detected. Did you mean to use `elsif`?
quux
corge
end
RUBY
expect_correction(<<~RUBY)
if condition_foo
foo
elsif condition_bar
bar
elsif condition_baz
baz
else
qux
quux
corge
end
RUBY
end
it 'accepts ternary ops' do
expect_no_offenses('x ? a : b')
end
it 'accepts modifier forms' do
expect_no_offenses('x if something')
end
it 'accepts empty braces' do
expect_no_offenses(<<~RUBY)
if something
()
else
()
end
RUBY
end
it 'does not register an offense for an elsif with no body' do
expect_no_offenses(<<~RUBY)
if something
foo
elsif something_else
end
RUBY
end
it 'does not register an offense if the entire if is on a single line' do
expect_no_offenses(<<~RUBY)
if a then b else c end
RUBY
end
end