/
constant_definition_in_block_spec.rb
137 lines (119 loc) · 3.26 KB
/
constant_definition_in_block_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
# frozen_string_literal: true
RSpec.describe RuboCop::Cop::Lint::ConstantDefinitionInBlock do
subject(:cop) { described_class.new(config) }
let(:config) { RuboCop::Config.new }
it 'does not register an offense for a top-level constant' do
expect_no_offenses(<<~RUBY)
FOO = 1
RUBY
end
it 'does not register an offense for a top-level constant followed by another statement' do
expect_no_offenses(<<~RUBY)
FOO = 1
bar
RUBY
end
it 'registers an offense for a constant defined within a block' do
expect_offense(<<~RUBY)
describe do
FOO = 1
^^^^^^^ Do not define constants within a block.
end
RUBY
end
it 'registers an offense for a constant defined within a block followed by another statement' do
expect_offense(<<~RUBY)
describe do
FOO = 1
^^^^^^^ Do not define constants within a block.
bar
end
RUBY
end
it 'does not register an offense for a top-level class' do
expect_no_offenses(<<~RUBY)
class Foo; end
RUBY
end
it 'does not register an offense for a top-level class followed by another statement' do
expect_no_offenses(<<~RUBY)
class Foo; end
bar
RUBY
end
it 'registers an offense for a class defined within a block' do
expect_offense(<<~RUBY)
describe do
class Foo; end
^^^^^^^^^^^^^^ Do not define constants within a block.
end
RUBY
end
it 'registers an offense for a class defined within a block followed by another statement' do
expect_offense(<<~RUBY)
describe do
class Foo; end
^^^^^^^^^^^^^^ Do not define constants within a block.
bar
end
RUBY
end
it 'does not register an offense for a top-level module' do
expect_no_offenses(<<~RUBY)
module Foo; end
RUBY
end
it 'does not register an offense for a top-level module followed by another statement' do
expect_no_offenses(<<~RUBY)
module Foo; end
bar
RUBY
end
it 'registers an offense for a module defined within a block' do
expect_offense(<<~RUBY)
describe do
module Foo; end
^^^^^^^^^^^^^^^ Do not define constants within a block.
end
RUBY
end
it 'registers an offense for a module defined within a block followed by another statement' do
expect_offense(<<~RUBY)
describe do
module Foo; end
^^^^^^^^^^^^^^^ Do not define constants within a block.
bar
end
RUBY
end
it 'does not register an offense for a constant with an explicit self scope' do
expect_no_offenses(<<~RUBY)
describe do
self::FOO = 1
end
RUBY
end
it 'does not register an offense for a constant with an explicit self scope followed by another statement' do
expect_no_offenses(<<~RUBY)
describe do
self::FOO = 1
bar
end
RUBY
end
it 'does not register an offense for a constant with an explicit top-level scope' do
expect_no_offenses(<<~RUBY)
describe do
::FOO = 1
end
RUBY
end
it 'does not register an offense for a constant with an explicit top-level scope followed by another statement' do
expect_no_offenses(<<~RUBY)
describe do
::FOO = 1
bar
end
RUBY
end
end