|
5 | 5 | describe RuboCop::Cop::Lint::FormatParameterMismatch do
|
6 | 6 | subject(:cop) { described_class.new }
|
7 | 7 |
|
| 8 | + shared_examples 'variables' do |variable| |
| 9 | + it 'does not register an offense for % called on a variable' do |
| 10 | + inspect_source(cop, ["#{variable} = '%s'", |
| 11 | + "#{variable} % [foo]"]) |
| 12 | + |
| 13 | + expect(cop.messages).to be_empty |
| 14 | + end |
| 15 | + |
| 16 | + it 'does not register an offense for format called on a variable' do |
| 17 | + inspect_source(cop, ["#{variable} = '%s'", |
| 18 | + "format(#{variable}, foo)"]) |
| 19 | + |
| 20 | + expect(cop.messages).to be_empty |
| 21 | + end |
| 22 | + |
| 23 | + it 'does not register an offense for format called on a variable' do |
| 24 | + inspect_source(cop, ["#{variable} = '%s'", |
| 25 | + "sprintf(#{variable}, foo)"]) |
| 26 | + |
| 27 | + expect(cop.messages).to be_empty |
| 28 | + end |
| 29 | + end |
| 30 | + |
| 31 | + it_behaves_like 'variables', 'CONST' |
| 32 | + it_behaves_like 'variables', 'var' |
| 33 | + it_behaves_like 'variables', '@var' |
| 34 | + it_behaves_like 'variables', '@@var' |
| 35 | + it_behaves_like 'variables', '$var' |
| 36 | + |
| 37 | + it 'registers an offense when calling Kernel.format ' \ |
| 38 | + 'and the fields do not match' do |
| 39 | + inspect_source(cop, 'Kernel.format("%s %s", 1)') |
| 40 | + expect(cop.offenses.size).to eq(1) |
| 41 | + |
| 42 | + msg = ['Number arguments (1) to `format` mismatches expected fields (2).'] |
| 43 | + expect(cop.messages).to eq(msg) |
| 44 | + end |
| 45 | + |
| 46 | + it 'registers an offense when calling Kernel.sprintf ' \ |
| 47 | + 'and the fields do not match' do |
| 48 | + inspect_source(cop, 'Kernel.sprintf("%s %s", 1)') |
| 49 | + expect(cop.offenses.size).to eq(1) |
| 50 | + |
| 51 | + msg = ['Number arguments (1) to `sprintf` mismatches expected fields (2).'] |
| 52 | + expect(cop.messages).to eq(msg) |
| 53 | + end |
| 54 | + |
8 | 55 | it 'registers an offense when there are less arguments than expected' do
|
9 | 56 | inspect_source(cop, 'format("%s %s", 1)')
|
10 | 57 | expect(cop.offenses.size).to eq(1)
|
|
38 | 85 | end
|
39 | 86 |
|
40 | 87 | it 'registers offense with sprintf' do
|
41 |
| - inspect_source(cop, 'format("%s %s", 1, 2, 3)') |
| 88 | + inspect_source(cop, 'sprintf("%s %s", 1, 2, 3)') |
42 | 89 | expect(cop.offenses.size).to eq(1)
|
43 | 90 |
|
44 |
| - msg = ['Number arguments (3) to `format` mismatches expected fields (2).'] |
| 91 | + msg = ['Number arguments (3) to `sprintf` mismatches expected fields (2).'] |
45 | 92 | expect(cop.messages).to eq(msg)
|
46 | 93 | end
|
47 | 94 |
|
48 | 95 | it 'correctly parses different sprintf formats' do
|
49 |
| - inspect_source(cop, 'format("%020x%+g:% g %%%#20.8x %#.0e", 1, 2, 3, 4, 5)') |
| 96 | + inspect_source(cop, |
| 97 | + 'sprintf("%020x%+g:% g %%%#20.8x %#.0e", 1, 2, 3, 4, 5)') |
50 | 98 | expect(cop.offenses).to be_empty
|
51 | 99 | end
|
52 | 100 |
|
|
130 | 178 | end
|
131 | 179 |
|
132 | 180 | it 'finds the correct number of fields' do
|
133 |
| - expect(''.scan(cop.fields_regex).size) |
| 181 | + expect(''.scan(described_class::FIELD_REGEX).size) |
134 | 182 | .to eq(0)
|
135 |
| - expect('%s'.scan(cop.fields_regex).size) |
| 183 | + expect('%s'.scan(described_class::FIELD_REGEX).size) |
136 | 184 | .to eq(1)
|
137 |
| - expect('%s %s'.scan(cop.fields_regex).size) |
| 185 | + expect('%s %s'.scan(described_class::FIELD_REGEX).size) |
138 | 186 | .to eq(2)
|
139 |
| - expect('%s %s %%'.scan(cop.fields_regex).size) |
| 187 | + expect('%s %s %%'.scan(described_class::FIELD_REGEX).size) |
140 | 188 | .to eq(3)
|
141 |
| - expect('%s %s %%'.scan(cop.fields_regex).size) |
| 189 | + expect('%s %s %%'.scan(described_class::FIELD_REGEX).size) |
142 | 190 | .to eq(3)
|
143 |
| - expect('% d'.scan(cop.fields_regex).size) |
| 191 | + expect('% d'.scan(described_class::FIELD_REGEX).size) |
144 | 192 | .to eq(1)
|
145 |
| - expect('%+d'.scan(cop.fields_regex).size) |
| 193 | + expect('%+d'.scan(described_class::FIELD_REGEX).size) |
146 | 194 | .to eq(1)
|
147 |
| - expect('%d'.scan(cop.fields_regex).size) |
| 195 | + expect('%d'.scan(described_class::FIELD_REGEX).size) |
148 | 196 | .to eq(1)
|
149 |
| - expect('%+o'.scan(cop.fields_regex).size) |
| 197 | + expect('%+o'.scan(described_class::FIELD_REGEX).size) |
150 | 198 | .to eq(1)
|
151 |
| - expect('%#o'.scan(cop.fields_regex).size) |
| 199 | + expect('%#o'.scan(described_class::FIELD_REGEX).size) |
152 | 200 | .to eq(1)
|
153 |
| - expect('%.0e'.scan(cop.fields_regex).size) |
| 201 | + expect('%.0e'.scan(described_class::FIELD_REGEX).size) |
154 | 202 | .to eq(1)
|
155 |
| - expect('%#.0e'.scan(cop.fields_regex).size) |
| 203 | + expect('%#.0e'.scan(described_class::FIELD_REGEX).size) |
156 | 204 | .to eq(1)
|
157 |
| - expect('% 020d'.scan(cop.fields_regex).size) |
| 205 | + expect('% 020d'.scan(described_class::FIELD_REGEX).size) |
158 | 206 | .to eq(1)
|
159 |
| - expect('%20d'.scan(cop.fields_regex).size) |
| 207 | + expect('%20d'.scan(described_class::FIELD_REGEX).size) |
160 | 208 | .to eq(1)
|
161 |
| - expect('%+20d'.scan(cop.fields_regex).size) |
| 209 | + expect('%+20d'.scan(described_class::FIELD_REGEX).size) |
162 | 210 | .to eq(1)
|
163 |
| - expect('%020d'.scan(cop.fields_regex).size) |
| 211 | + expect('%020d'.scan(described_class::FIELD_REGEX).size) |
164 | 212 | .to eq(1)
|
165 |
| - expect('%+020d'.scan(cop.fields_regex).size) |
| 213 | + expect('%+020d'.scan(described_class::FIELD_REGEX).size) |
166 | 214 | .to eq(1)
|
167 |
| - expect('% 020d'.scan(cop.fields_regex).size) |
| 215 | + expect('% 020d'.scan(described_class::FIELD_REGEX).size) |
168 | 216 | .to eq(1)
|
169 |
| - expect('%-20d'.scan(cop.fields_regex).size) |
| 217 | + expect('%-20d'.scan(described_class::FIELD_REGEX).size) |
170 | 218 | .to eq(1)
|
171 |
| - expect('%-+20d'.scan(cop.fields_regex).size) |
| 219 | + expect('%-+20d'.scan(described_class::FIELD_REGEX).size) |
172 | 220 | .to eq(1)
|
173 |
| - expect('%- 20d'.scan(cop.fields_regex).size) |
| 221 | + expect('%- 20d'.scan(described_class::FIELD_REGEX).size) |
174 | 222 | .to eq(1)
|
175 |
| - expect('%020x'.scan(cop.fields_regex).size) |
| 223 | + expect('%020x'.scan(described_class::FIELD_REGEX).size) |
176 | 224 | .to eq(1)
|
177 |
| - expect('%#20.8x'.scan(cop.fields_regex).size) |
| 225 | + expect('%#20.8x'.scan(described_class::FIELD_REGEX).size) |
178 | 226 | .to eq(1)
|
179 |
| - expect('%+g:% g:%-g'.scan(cop.fields_regex).size) |
| 227 | + expect('%+g:% g:%-g'.scan(described_class::FIELD_REGEX).size) |
180 | 228 | .to eq(3)
|
181 | 229 | end
|
182 | 230 | end
|
0 commit comments