blob: d46dec3b2e33ece3dee7ce25f8eb190bb9aa7f9e (
plain)
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
144
145
146
147
148
149
150
151
152
153
154
155
|
# frozen_string_literal: true
require 'fast_spec_helper'
require_relative '../../../../rubocop/cop/gitlab/module_with_instance_variables'
RSpec.describe RuboCop::Cop::Gitlab::ModuleWithInstanceVariables do
let(:msg) { "Do not use instance variables in a module. [...]" }
subject(:cop) { described_class.new }
shared_examples('registering offense') do
it 'registers an offense when instance variable is used in a module' do
expect_offense(source)
end
end
shared_examples('not registering offense') do
it 'does not register offenses' do
expect_no_offenses(source)
end
end
context 'when source is a regular module' do
it_behaves_like 'registering offense' do
let(:source) do
<<~RUBY
module M
def f
@f = true
^^^^^^^^^ #{msg}
end
end
RUBY
end
end
end
context 'when source is a nested module' do
it_behaves_like 'registering offense' do
let(:source) do
<<~RUBY
module N
module M
def f
@f = true
^^^^^^^^^ #{msg}
end
end
end
RUBY
end
end
end
context 'when source is a nested module with multiple offenses' do
it_behaves_like 'registering offense' do
let(:source) do
<<~RUBY
module N
module M
def f
@f = true
^^^^^^^^^ #{msg}
end
def g
true
end
def h
@h = true
^^^^^^^^^ #{msg}
end
end
end
RUBY
end
end
end
context 'when source is using simple or ivar assignment' do
it_behaves_like 'not registering offense' do
let(:source) do
<<~RUBY
module M
def f
@f ||= true
end
end
RUBY
end
end
end
context 'when source is using simple ivar' do
it_behaves_like 'not registering offense' do
let(:source) do
<<~RUBY
module M
def f?
@f
end
end
RUBY
end
end
end
context 'when source is defining initialize' do
it_behaves_like 'not registering offense' do
let(:source) do
<<~RUBY
module M
def initialize
@a = 1
@b = 2
end
end
RUBY
end
end
end
context 'when source is using simple or ivar assignment with other ivar' do
it_behaves_like 'registering offense' do
let(:source) do
<<~RUBY
module M
def f
@f ||= g(@g)
^^ #{msg}
end
end
RUBY
end
end
end
context 'when source is using or ivar assignment with something else' do
it_behaves_like 'registering offense' do
let(:source) do
<<~RUBY
module M
def f
@f ||= true
^^ #{msg}
@f.to_s
^^ #{msg}
end
end
RUBY
end
end
end
end
|