/
in_pattern_then_spec.rb
88 lines (77 loc) · 1.88 KB
/
in_pattern_then_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
# frozen_string_literal: true
RSpec.describe RuboCop::Cop::Style::InPatternThen, :config do
context '>= Ruby 2.7', :ruby27 do
it 'registers an offense for `in b;`' do
expect_offense(<<~RUBY)
case a
in b; c
^ Do not use `in b;`. Use `in b then` instead.
end
RUBY
expect_correction(<<~RUBY)
case a
in b then c
end
RUBY
end
it 'registers an offense for `in b, c, d;` (array pattern)' do
expect_offense(<<~RUBY)
case a
in b, c, d; e
^ Do not use `in b, c, d;`. Use `in b, c, d then` instead.
end
RUBY
expect_correction(<<~RUBY)
case a
in b, c, d then e
end
RUBY
end
it 'registers an offense for `in b | c | d;` (alternative pattern)' do
expect_offense(<<~RUBY)
case a
in b | c | d; e
^ Do not use `in b | c | d;`. Use `in b | c | d then` instead.
end
RUBY
expect_correction(<<~RUBY)
case a
in b | c | d then e
end
RUBY
end
it 'registers an offense for `in b, c | d;`' do
expect_offense(<<~RUBY)
case a
in b, c | d; e
^ Do not use `in b, c | d;`. Use `in b, c | d then` instead.
end
RUBY
expect_correction(<<~RUBY)
case a
in b, c | d then e
end
RUBY
end
it 'accepts `;` separating statements in the body of `in`' do
expect_no_offenses(<<~RUBY)
case a
in b then c; d
end
case e
in f
g; h
end
RUBY
end
context 'when inspecting a case statement with an empty branch' do
it 'does not register an offense' do
expect_no_offenses(<<~RUBY)
case condition
in pattern
end
RUBY
end
end
end
end