transpec 1.3.1 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -1
- data/.travis.yml +1 -3
- data/CHANGELOG.md +9 -0
- data/README.md +141 -24
- data/README.md.erb +136 -24
- data/lib/transpec/ast/node.rb +7 -3
- data/lib/transpec/cli.rb +1 -1
- data/lib/transpec/configuration.rb +1 -0
- data/lib/transpec/converter.rb +31 -2
- data/lib/transpec/dynamic_analyzer.rb +1 -1
- data/lib/transpec/option_parser.rb +12 -9
- data/lib/transpec/project.rb +23 -12
- data/lib/transpec/rspec_version.rb +18 -4
- data/lib/transpec/static_context_inspector.rb +0 -15
- data/lib/transpec/syntax/example.rb +83 -0
- data/lib/transpec/syntax/expect.rb +5 -0
- data/lib/transpec/syntax/have.rb +111 -54
- data/lib/transpec/syntax/method_stub.rb +58 -37
- data/lib/transpec/syntax/mixin/allow_no_message.rb +2 -0
- data/lib/transpec/syntax/mixin/any_instance.rb +2 -0
- data/lib/transpec/syntax/mixin/should_base.rb +39 -0
- data/lib/transpec/syntax/oneliner_should.rb +218 -0
- data/lib/transpec/syntax/operator_matcher.rb +1 -0
- data/lib/transpec/syntax/should.rb +3 -30
- data/lib/transpec/util.rb +54 -0
- data/lib/transpec/version.rb +2 -2
- data/spec/support/shared_context.rb +21 -29
- data/spec/transpec/ast/node_spec.rb +1 -1
- data/spec/transpec/commit_message_spec.rb +29 -23
- data/spec/transpec/configuration_spec.rb +1 -0
- data/spec/transpec/converter_spec.rb +208 -5
- data/spec/transpec/dynamic_analyzer_spec.rb +2 -2
- data/spec/transpec/option_parser_spec.rb +1 -0
- data/spec/transpec/project_spec.rb +10 -0
- data/spec/transpec/rspec_version_spec.rb +52 -28
- data/spec/transpec/static_context_inspector_spec.rb +2 -2
- data/spec/transpec/syntax/be_boolean_spec.rb +6 -13
- data/spec/transpec/syntax/be_close_spec.rb +2 -9
- data/spec/transpec/syntax/double_spec.rb +2 -9
- data/spec/transpec/syntax/example_spec.rb +249 -0
- data/spec/transpec/syntax/expect_spec.rb +1 -1
- data/spec/transpec/syntax/have_spec.rb +127 -22
- data/spec/transpec/syntax/its_spec.rb +9 -18
- data/spec/transpec/syntax/method_stub_spec.rb +193 -158
- data/spec/transpec/syntax/oneliner_should_spec.rb +653 -0
- data/spec/transpec/syntax/operator_matcher_spec.rb +7 -8
- data/spec/transpec/syntax/raise_error_spec.rb +6 -13
- data/spec/transpec/syntax/rspec_configure_spec.rb +1 -8
- data/spec/transpec/syntax/should_receive_spec.rb +19 -28
- data/spec/transpec/syntax/should_spec.rb +18 -16
- data/spec/transpec/util_spec.rb +30 -0
- data/transpec.gemspec +8 -7
- metadata +49 -28
@@ -2,14 +2,19 @@
|
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
4
|
require 'transpec/syntax/have'
|
5
|
+
require 'transpec/syntax/should'
|
6
|
+
require 'transpec/syntax/expect'
|
7
|
+
require 'transpec/syntax/oneliner_should'
|
8
|
+
require 'ast'
|
5
9
|
|
6
10
|
module Transpec
|
7
11
|
class Syntax
|
8
12
|
describe Have do
|
9
13
|
include ::AST::Sexp
|
10
14
|
include_context 'parsed objects'
|
11
|
-
include_context '
|
12
|
-
include_context '
|
15
|
+
include_context 'syntax object', Should, :should_object
|
16
|
+
include_context 'syntax object', Expect, :expect_object
|
17
|
+
include_context 'syntax object', OnelinerShould, :oneliner_should_object
|
13
18
|
|
14
19
|
describe '#have_node' do
|
15
20
|
let(:source) do
|
@@ -150,7 +155,7 @@ module Transpec
|
|
150
155
|
rewritten_source.should == expected_source
|
151
156
|
end
|
152
157
|
|
153
|
-
it 'adds record
|
158
|
+
it 'adds record `collection.should have(n).items` -> `collection.size.should == n`' do
|
154
159
|
have_object.convert_to_standard_expectation!
|
155
160
|
record.original_syntax.should == 'collection.should have(n).items'
|
156
161
|
record.converted_syntax.should == 'collection.size.should == n'
|
@@ -178,7 +183,7 @@ module Transpec
|
|
178
183
|
rewritten_source.should == expected_source
|
179
184
|
end
|
180
185
|
|
181
|
-
it 'adds record
|
186
|
+
it 'adds record `collection.should have(n).items` -> `expect(collection.size).to eq(n)`' do
|
182
187
|
record.original_syntax.should == 'collection.should have(n).items'
|
183
188
|
record.converted_syntax.should == 'expect(collection.size).to eq(n)'
|
184
189
|
end
|
@@ -200,7 +205,7 @@ module Transpec
|
|
200
205
|
rewritten_source.should == expected_source
|
201
206
|
end
|
202
207
|
|
203
|
-
it 'adds record
|
208
|
+
it 'adds record `collection.should have(n).items` -> `expect(collection.size).to eq(n)`' do
|
204
209
|
record.original_syntax.should == 'collection.should have(n).items'
|
205
210
|
record.converted_syntax.should == 'expect(collection.size).to eq(n)'
|
206
211
|
end
|
@@ -208,6 +213,41 @@ module Transpec
|
|
208
213
|
end
|
209
214
|
end
|
210
215
|
|
216
|
+
context 'when it is `collection.should_not have(2).items` form' do
|
217
|
+
let(:source) do
|
218
|
+
<<-END
|
219
|
+
describe 'example' do
|
220
|
+
it 'does not 2 items' do
|
221
|
+
collection.should_not have(2).items
|
222
|
+
end
|
223
|
+
end
|
224
|
+
END
|
225
|
+
end
|
226
|
+
|
227
|
+
let(:expected_source) do
|
228
|
+
<<-END
|
229
|
+
describe 'example' do
|
230
|
+
it 'does not 2 items' do
|
231
|
+
collection.size.should_not == 2
|
232
|
+
end
|
233
|
+
end
|
234
|
+
END
|
235
|
+
end
|
236
|
+
|
237
|
+
let(:have_object) { should_object.have_matcher }
|
238
|
+
|
239
|
+
it 'converts into `collection.size.should_not == 2` form' do
|
240
|
+
have_object.convert_to_standard_expectation!
|
241
|
+
rewritten_source.should == expected_source
|
242
|
+
end
|
243
|
+
|
244
|
+
it 'adds record `collection.should_not have(n).items` -> `collection.size.should_not == n`' do
|
245
|
+
have_object.convert_to_standard_expectation!
|
246
|
+
record.original_syntax.should == 'collection.should_not have(n).items'
|
247
|
+
record.converted_syntax.should == 'collection.size.should_not == n'
|
248
|
+
end
|
249
|
+
end
|
250
|
+
|
211
251
|
context 'when it is `collection.should have_at_least(2).items` form' do
|
212
252
|
let(:source) do
|
213
253
|
<<-END
|
@@ -236,7 +276,7 @@ module Transpec
|
|
236
276
|
rewritten_source.should == expected_source
|
237
277
|
end
|
238
278
|
|
239
|
-
it 'adds record
|
279
|
+
it 'adds record `collection.should have_at_least(n).items` -> `collection.size.should >= n`' do
|
240
280
|
have_object.convert_to_standard_expectation!
|
241
281
|
record.original_syntax.should == 'collection.should have_at_least(n).items'
|
242
282
|
record.converted_syntax.should == 'collection.size.should >= n'
|
@@ -271,7 +311,7 @@ module Transpec
|
|
271
311
|
rewritten_source.should == expected_source
|
272
312
|
end
|
273
313
|
|
274
|
-
it 'adds record
|
314
|
+
it 'adds record `collection.should have_at_most(n).items` -> `collection.size.should <= n`' do
|
275
315
|
have_object.convert_to_standard_expectation!
|
276
316
|
record.original_syntax.should == 'collection.should have_at_most(n).items'
|
277
317
|
record.converted_syntax.should == 'collection.size.should <= n'
|
@@ -306,7 +346,7 @@ module Transpec
|
|
306
346
|
rewritten_source.should == expected_source
|
307
347
|
end
|
308
348
|
|
309
|
-
it 'adds record
|
349
|
+
it 'adds record `expect(collection).to have(n).items` -> `expect(collection.size).to eq(n)`' do
|
310
350
|
have_object.convert_to_standard_expectation!
|
311
351
|
record.original_syntax.should == 'expect(collection).to have(n).items'
|
312
352
|
record.converted_syntax.should == 'expect(collection.size).to eq(n)'
|
@@ -353,7 +393,7 @@ module Transpec
|
|
353
393
|
rewritten_source.should == expected_source
|
354
394
|
end
|
355
395
|
|
356
|
-
it 'adds record
|
396
|
+
it 'adds record `expect(collection).to have(n).items` -> `expect(collection.size).to eq(n)`' do
|
357
397
|
have_object.convert_to_standard_expectation!
|
358
398
|
record.original_syntax.should == 'expect(collection).to have(n).items'
|
359
399
|
record.converted_syntax.should == 'expect(collection.size).to eq(n)'
|
@@ -362,6 +402,41 @@ module Transpec
|
|
362
402
|
end
|
363
403
|
end
|
364
404
|
|
405
|
+
context 'when it is `expect(collection).not_to have(2).items` form' do
|
406
|
+
let(:source) do
|
407
|
+
<<-END
|
408
|
+
describe 'example' do
|
409
|
+
it 'does not have 2 items' do
|
410
|
+
expect(collection).not_to have(2).items
|
411
|
+
end
|
412
|
+
end
|
413
|
+
END
|
414
|
+
end
|
415
|
+
|
416
|
+
let(:expected_source) do
|
417
|
+
<<-END
|
418
|
+
describe 'example' do
|
419
|
+
it 'does not have 2 items' do
|
420
|
+
expect(collection.size).not_to eq(2)
|
421
|
+
end
|
422
|
+
end
|
423
|
+
END
|
424
|
+
end
|
425
|
+
|
426
|
+
let(:have_object) { expect_object.have_matcher }
|
427
|
+
|
428
|
+
it 'converts into `expect(collection.size).not_to eq(2)` form' do
|
429
|
+
have_object.convert_to_standard_expectation!
|
430
|
+
rewritten_source.should == expected_source
|
431
|
+
end
|
432
|
+
|
433
|
+
it 'adds record `expect(collection).not_to have(n).items` -> `expect(collection.size).not_to eq(n)`' do
|
434
|
+
have_object.convert_to_standard_expectation!
|
435
|
+
record.original_syntax.should == 'expect(collection).not_to have(n).items'
|
436
|
+
record.converted_syntax.should == 'expect(collection.size).not_to eq(n)'
|
437
|
+
end
|
438
|
+
end
|
439
|
+
|
365
440
|
context 'when it is `expect(collection).to have_at_least(2).items` form' do
|
366
441
|
let(:source) do
|
367
442
|
<<-END
|
@@ -390,7 +465,7 @@ module Transpec
|
|
390
465
|
rewritten_source.should == expected_source
|
391
466
|
end
|
392
467
|
|
393
|
-
it 'adds record
|
468
|
+
it 'adds record `expect(collection).to have_at_least(n).items` -> `expect(collection.size).to be >= n`' do
|
394
469
|
have_object.convert_to_standard_expectation!
|
395
470
|
record.original_syntax.should == 'expect(collection).to have_at_least(n).items'
|
396
471
|
record.converted_syntax.should == 'expect(collection.size).to be >= n'
|
@@ -425,7 +500,7 @@ module Transpec
|
|
425
500
|
rewritten_source.should == expected_source
|
426
501
|
end
|
427
502
|
|
428
|
-
it 'adds record
|
503
|
+
it 'adds record `expect(collection).to have_at_most(n).items` -> `expect(collection.size).to be <= n`' do
|
429
504
|
have_object.convert_to_standard_expectation!
|
430
505
|
record.original_syntax.should == 'expect(collection).to have_at_most(n).items'
|
431
506
|
record.converted_syntax.should == 'expect(collection.size).to be <= n'
|
@@ -477,7 +552,7 @@ module Transpec
|
|
477
552
|
rewritten_source.should == expected_source
|
478
553
|
end
|
479
554
|
|
480
|
-
it 'adds record
|
555
|
+
it 'adds record `expect(obj).to have(n).words` -> `expect(obj.words.size).to eq(n)`' do
|
481
556
|
have_object.convert_to_standard_expectation!
|
482
557
|
record.original_syntax.should == 'expect(obj).to have(n).words'
|
483
558
|
record.converted_syntax.should == 'expect(obj.words.size).to eq(n)'
|
@@ -534,7 +609,7 @@ module Transpec
|
|
534
609
|
rewritten_source.should == expected_source
|
535
610
|
end
|
536
611
|
|
537
|
-
it 'adds record
|
612
|
+
it 'adds record `expect(obj).to have(n).words` -> `expect(obj.words.count).to eq(n)`' do
|
538
613
|
have_object.convert_to_standard_expectation!
|
539
614
|
record.original_syntax.should == 'expect(obj).to have(n).words'
|
540
615
|
record.converted_syntax.should == 'expect(obj.words.count).to eq(n)'
|
@@ -569,7 +644,7 @@ module Transpec
|
|
569
644
|
rewritten_source.should == expected_source
|
570
645
|
end
|
571
646
|
|
572
|
-
it 'adds record
|
647
|
+
it 'adds record `expect(collection).to have(n).items` -> `expect(collection.size).to eq(n)`' do
|
573
648
|
have_object.convert_to_standard_expectation!
|
574
649
|
record.original_syntax.should == 'expect(collection).to have(n).items'
|
575
650
|
record.converted_syntax.should == 'expect(collection.size).to eq(n)'
|
@@ -616,7 +691,7 @@ module Transpec
|
|
616
691
|
rewritten_source.should == expected_source
|
617
692
|
end
|
618
693
|
|
619
|
-
it 'adds record
|
694
|
+
it 'adds record `expect(obj).to have(n).words` -> `expect(obj.send(:words).size).to eq(n)`' do
|
620
695
|
have_object.convert_to_standard_expectation!
|
621
696
|
record.original_syntax.should == 'expect(obj).to have(n).words'
|
622
697
|
record.converted_syntax.should == 'expect(obj.send(:words).size).to eq(n)'
|
@@ -663,7 +738,7 @@ module Transpec
|
|
663
738
|
rewritten_source.should == expected_source
|
664
739
|
end
|
665
740
|
|
666
|
-
it 'adds record
|
741
|
+
it 'adds record `expect(collection).to have(n).items` -> `expect(collection.size).to eq(n)`' do
|
667
742
|
have_object.convert_to_standard_expectation!
|
668
743
|
record.original_syntax.should == 'expect(collection).to have(n).items'
|
669
744
|
record.converted_syntax.should == 'expect(collection.size).to eq(n)'
|
@@ -720,7 +795,7 @@ module Transpec
|
|
720
795
|
rewritten_source.should == expected_source
|
721
796
|
end
|
722
797
|
|
723
|
-
it 'adds record
|
798
|
+
it 'adds record `expect(obj).to have(n).words` -> `expect(obj.words.size).to eq(n)`' do
|
724
799
|
have_object.convert_to_standard_expectation!
|
725
800
|
record.original_syntax.should == 'expect(obj).to have(n).words'
|
726
801
|
record.converted_syntax.should == 'expect(obj.words.size).to eq(n)'
|
@@ -765,7 +840,7 @@ module Transpec
|
|
765
840
|
rewritten_source.should == expected_source
|
766
841
|
end
|
767
842
|
|
768
|
-
it 'adds record
|
843
|
+
it 'adds record `expect(collection).to have(n).items` -> `expect(collection.size).to eq(n)`' do
|
769
844
|
have_object.convert_to_standard_expectation!
|
770
845
|
record.original_syntax.should == 'expect(collection).to have(n).items'
|
771
846
|
record.converted_syntax.should == 'expect(collection.size).to eq(n)'
|
@@ -816,7 +891,7 @@ module Transpec
|
|
816
891
|
rewritten_source.should == expected_source
|
817
892
|
end
|
818
893
|
|
819
|
-
it 'adds record
|
894
|
+
it 'adds record `expect(collection).to have(n).items` -> `expect(collection.size).to eq(n)`' do
|
820
895
|
have_object.convert_to_standard_expectation!
|
821
896
|
record.original_syntax.should == 'expect(collection).to have(n).items'
|
822
897
|
record.converted_syntax.should == 'expect(collection.size).to eq(n)'
|
@@ -869,7 +944,7 @@ module Transpec
|
|
869
944
|
end
|
870
945
|
|
871
946
|
it 'adds record ' +
|
872
|
-
'
|
947
|
+
'`expect(obj).to have(n).errors_on(...)` -> `expect(obj.errors_on(...).size).to eq(n)`' do
|
873
948
|
have_object.convert_to_standard_expectation!
|
874
949
|
record.original_syntax.should == 'expect(obj).to have(n).errors_on(...)'
|
875
950
|
record.converted_syntax.should == 'expect(obj.errors_on(...).size).to eq(n)'
|
@@ -919,7 +994,7 @@ module Transpec
|
|
919
994
|
end
|
920
995
|
|
921
996
|
it 'adds record ' +
|
922
|
-
'
|
997
|
+
'`expect(obj).to have(n).errors_on(...)` -> `expect(obj.send(:errors_on, ...).size).to eq(n)`' do
|
923
998
|
have_object.convert_to_standard_expectation!
|
924
999
|
record.original_syntax.should == 'expect(obj).to have(n).errors_on(...)'
|
925
1000
|
record.converted_syntax.should == 'expect(obj.send(:errors_on, ...).size).to eq(n)'
|
@@ -966,13 +1041,43 @@ module Transpec
|
|
966
1041
|
end
|
967
1042
|
|
968
1043
|
it 'adds record ' +
|
969
|
-
'
|
1044
|
+
'`expect(obj).to have(n).errors_on(...)` -> `expect(obj.errors_on(...).size).to eq(n)`' do
|
970
1045
|
have_object.convert_to_standard_expectation!
|
971
1046
|
record.original_syntax.should == 'expect(obj).to have(n).errors_on(...)'
|
972
1047
|
record.converted_syntax.should == 'expect(obj.errors_on(...).size).to eq(n)'
|
973
1048
|
end
|
974
1049
|
end
|
975
1050
|
end
|
1051
|
+
|
1052
|
+
context 'when it is `it { should have(2).items }` form' do
|
1053
|
+
let(:source) do
|
1054
|
+
<<-END
|
1055
|
+
describe 'example' do
|
1056
|
+
it { should have(2).items }
|
1057
|
+
end
|
1058
|
+
END
|
1059
|
+
end
|
1060
|
+
|
1061
|
+
let(:expected_source) do
|
1062
|
+
<<-END
|
1063
|
+
describe 'example' do
|
1064
|
+
it { should == 2 }
|
1065
|
+
end
|
1066
|
+
END
|
1067
|
+
end
|
1068
|
+
|
1069
|
+
let(:have_object) { oneliner_should_object.have_matcher }
|
1070
|
+
|
1071
|
+
it "converts into `it { should == 2 }` form since there's no subject" do
|
1072
|
+
have_object.convert_to_standard_expectation!
|
1073
|
+
rewritten_source.should == expected_source
|
1074
|
+
end
|
1075
|
+
|
1076
|
+
it 'does not add record' do
|
1077
|
+
have_object.convert_to_standard_expectation!
|
1078
|
+
record.should be_nil
|
1079
|
+
end
|
1080
|
+
end
|
976
1081
|
end
|
977
1082
|
end
|
978
1083
|
end
|
@@ -7,16 +7,7 @@ module Transpec
|
|
7
7
|
class Syntax
|
8
8
|
describe Its do
|
9
9
|
include_context 'parsed objects'
|
10
|
-
|
11
|
-
subject(:its_object) do
|
12
|
-
ast.each_node do |node|
|
13
|
-
next unless Its.target_node?(node)
|
14
|
-
return Its.new(node, source_rewriter, runtime_data)
|
15
|
-
end
|
16
|
-
fail 'No #its node is found!'
|
17
|
-
end
|
18
|
-
|
19
|
-
let(:runtime_data) { nil }
|
10
|
+
include_context 'syntax object', Its, :its_object
|
20
11
|
|
21
12
|
let(:record) { its_object.report.records.last }
|
22
13
|
|
@@ -76,7 +67,7 @@ module Transpec
|
|
76
67
|
rewritten_source.should == expected_source
|
77
68
|
end
|
78
69
|
|
79
|
-
it "adds record
|
70
|
+
it "adds record `its(:attr) { }` -> `describe 'attr' do subject { super().attr }; it { } end`" do
|
80
71
|
record.original_syntax.should == 'its(:attr) { }'
|
81
72
|
record.converted_syntax.should == "describe 'attr' do subject { super().attr }; it { } end"
|
82
73
|
end
|
@@ -173,7 +164,7 @@ module Transpec
|
|
173
164
|
rewritten_source.should == expected_source
|
174
165
|
end
|
175
166
|
|
176
|
-
it "adds record
|
167
|
+
it "adds record `its(:attr) { }` -> `describe 'attr' do subject { super().attr }; it { } end`" do
|
177
168
|
record.original_syntax.should == 'its(:attr) { }'
|
178
169
|
record.converted_syntax.should == "describe 'attr' do subject { super().attr }; it { } end"
|
179
170
|
end
|
@@ -210,7 +201,7 @@ module Transpec
|
|
210
201
|
rewritten_source.should == expected_source
|
211
202
|
end
|
212
203
|
|
213
|
-
it "adds record
|
204
|
+
it "adds record `its(:attr) { }` -> `describe 'attr' do subject { super().attr }; it { } end`" do
|
214
205
|
record.original_syntax.should == 'its(:attr) { }'
|
215
206
|
record.converted_syntax.should == "describe 'attr' do subject { super().attr }; it { } end"
|
216
207
|
end
|
@@ -244,7 +235,7 @@ module Transpec
|
|
244
235
|
rewritten_source.should == expected_source
|
245
236
|
end
|
246
237
|
|
247
|
-
it "adds record
|
238
|
+
it "adds record `its([:key]) { }` -> `describe '[:key]' do subject { super()[:key] }; it { } end`" do
|
248
239
|
record.original_syntax.should == 'its([:key]) { }'
|
249
240
|
record.converted_syntax.should == "describe '[:key]' do subject { super()[:key] }; it { } end"
|
250
241
|
end
|
@@ -278,7 +269,7 @@ module Transpec
|
|
278
269
|
rewritten_source.should == expected_source
|
279
270
|
end
|
280
271
|
|
281
|
-
it "adds record
|
272
|
+
it "adds record `its([:key]) { }` -> `describe '[:key]' do subject { super()[:key] }; it { } end`" do
|
282
273
|
record.original_syntax.should == 'its([:key]) { }'
|
283
274
|
record.converted_syntax.should == "describe '[:key]' do subject { super()[:key] }; it { } end"
|
284
275
|
end
|
@@ -312,7 +303,7 @@ module Transpec
|
|
312
303
|
rewritten_source.should == expected_source
|
313
304
|
end
|
314
305
|
|
315
|
-
it "adds record
|
306
|
+
it "adds record `its([:key]) { }` -> `describe '[:key]' do subject { super()[:key] }; it { } end`" do
|
316
307
|
record.original_syntax.should == 'its([:key]) { }'
|
317
308
|
record.converted_syntax.should == "describe '[:key]' do subject { super()[:key] }; it { } end"
|
318
309
|
end
|
@@ -356,7 +347,7 @@ module Transpec
|
|
356
347
|
rewritten_source.should == expected_source
|
357
348
|
end
|
358
349
|
|
359
|
-
it "adds record
|
350
|
+
it "adds record `its(:attr) { }` -> `describe 'attr' do subject { super().attr }; it { } end`" do
|
360
351
|
record.original_syntax.should == 'its(:attr) { }'
|
361
352
|
record.converted_syntax.should == "describe 'attr' do subject { super().attr }; it { } end"
|
362
353
|
end
|
@@ -400,7 +391,7 @@ module Transpec
|
|
400
391
|
rewritten_source.should == expected_source
|
401
392
|
end
|
402
393
|
|
403
|
-
it "adds record
|
394
|
+
it "adds record `its([:key]) { }` -> `describe '[:key]' do subject { super()[:key] }; it { } end`" do
|
404
395
|
record.original_syntax.should == 'its([:key]) { }'
|
405
396
|
record.converted_syntax.should == "describe '[:key]' do subject { super()[:key] }; it { } end"
|
406
397
|
end
|
@@ -2,21 +2,13 @@
|
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
4
|
require 'transpec/syntax/method_stub'
|
5
|
+
require 'transpec'
|
5
6
|
|
6
7
|
module Transpec
|
7
8
|
class Syntax
|
8
9
|
describe MethodStub do
|
9
10
|
include_context 'parsed objects'
|
10
|
-
|
11
|
-
subject(:method_stub_object) do
|
12
|
-
ast.each_node do |node|
|
13
|
-
next unless MethodStub.target_node?(node)
|
14
|
-
return MethodStub.new(node, source_rewriter, runtime_data)
|
15
|
-
end
|
16
|
-
fail 'No method stub node is found!'
|
17
|
-
end
|
18
|
-
|
19
|
-
let(:runtime_data) { nil }
|
11
|
+
include_context 'syntax object', MethodStub, :method_stub_object
|
20
12
|
|
21
13
|
let(:record) { method_stub_object.report.records.first }
|
22
14
|
|
@@ -106,6 +98,12 @@ module Transpec
|
|
106
98
|
end
|
107
99
|
|
108
100
|
describe '#allowize!' do
|
101
|
+
before do
|
102
|
+
method_stub_object.allowize!(rspec_version) unless example.metadata[:no_before_allowize!]
|
103
|
+
end
|
104
|
+
|
105
|
+
let(:rspec_version) { Transpec.required_rspec_version }
|
106
|
+
|
109
107
|
context 'when it is `subject.stub(:method)` form' do
|
110
108
|
let(:source) do
|
111
109
|
<<-END
|
@@ -128,17 +126,15 @@ module Transpec
|
|
128
126
|
end
|
129
127
|
|
130
128
|
it 'converts into `allow(subject).to receive(:method)` form' do
|
131
|
-
method_stub_object.allowize!
|
132
129
|
rewritten_source.should == expected_source
|
133
130
|
end
|
134
131
|
|
135
|
-
it
|
136
|
-
method_stub_object.allowize!
|
132
|
+
it 'adds record `obj.stub(:message)` -> `allow(obj).to receive(:message)`' do
|
137
133
|
record.original_syntax.should == 'obj.stub(:message)'
|
138
134
|
record.converted_syntax.should == 'allow(obj).to receive(:message)'
|
139
135
|
end
|
140
136
|
|
141
|
-
context 'and #allow and #receive are not available in the context' do
|
137
|
+
context 'and #allow and #receive are not available in the context', :no_before_allowize! do
|
142
138
|
context 'and the context is determinable statically' do
|
143
139
|
let(:source) do
|
144
140
|
<<-END
|
@@ -160,13 +156,15 @@ module Transpec
|
|
160
156
|
include_context 'dynamic analysis objects'
|
161
157
|
|
162
158
|
it 'raises InvalidContextError' do
|
163
|
-
-> { method_stub_object.allowize! }
|
159
|
+
-> { method_stub_object.allowize!(rspec_version) }
|
160
|
+
.should raise_error(InvalidContextError)
|
164
161
|
end
|
165
162
|
end
|
166
163
|
|
167
164
|
context 'without runtime information' do
|
168
165
|
it 'raises InvalidContextError' do
|
169
|
-
-> { method_stub_object.allowize! }
|
166
|
+
-> { method_stub_object.allowize!(rspec_version) }
|
167
|
+
.should raise_error(InvalidContextError)
|
170
168
|
end
|
171
169
|
end
|
172
170
|
end
|
@@ -190,13 +188,15 @@ module Transpec
|
|
190
188
|
include_context 'dynamic analysis objects'
|
191
189
|
|
192
190
|
it 'raises InvalidContextError' do
|
193
|
-
-> { method_stub_object.allowize! }
|
191
|
+
-> { method_stub_object.allowize!(rspec_version) }
|
192
|
+
.should raise_error(InvalidContextError)
|
194
193
|
end
|
195
194
|
end
|
196
195
|
|
197
196
|
context 'without runtime information' do
|
198
197
|
it 'does not raise InvalidContextError' do
|
199
|
-
-> { method_stub_object.allowize! }
|
198
|
+
-> { method_stub_object.allowize!(rspec_version) }
|
199
|
+
.should_not raise_error
|
200
200
|
end
|
201
201
|
end
|
202
202
|
end
|
@@ -225,12 +225,10 @@ module Transpec
|
|
225
225
|
end
|
226
226
|
|
227
227
|
it 'converts into `allow(subject).to receive(:method)` form' do
|
228
|
-
method_stub_object.allowize!
|
229
228
|
rewritten_source.should == expected_source
|
230
229
|
end
|
231
230
|
|
232
|
-
it
|
233
|
-
method_stub_object.allowize!
|
231
|
+
it 'adds record `obj.stub!(:message)` -> `allow(obj).to receive(:message)`' do
|
234
232
|
record.original_syntax.should == 'obj.stub!(:message)'
|
235
233
|
record.converted_syntax.should == 'allow(obj).to receive(:message)'
|
236
234
|
end
|
@@ -258,7 +256,6 @@ module Transpec
|
|
258
256
|
end
|
259
257
|
|
260
258
|
it 'converts into `allow(subject).to receive(:method).and_return(value)` form' do
|
261
|
-
method_stub_object.allowize!
|
262
259
|
rewritten_source.should == expected_source
|
263
260
|
end
|
264
261
|
end
|
@@ -285,7 +282,6 @@ module Transpec
|
|
285
282
|
end
|
286
283
|
|
287
284
|
it 'converts into `allow(subject).to receive(:method).and_raise(RuntimeError)` form' do
|
288
|
-
method_stub_object.allowize!
|
289
285
|
rewritten_source.should == expected_source
|
290
286
|
end
|
291
287
|
end
|
@@ -322,13 +318,19 @@ module Transpec
|
|
322
318
|
end
|
323
319
|
|
324
320
|
it 'keeps the style as far as possible' do
|
325
|
-
method_stub_object.allowize!
|
326
321
|
rewritten_source.should == expected_source
|
327
322
|
end
|
328
323
|
end
|
329
324
|
|
330
325
|
context 'when it is `subject.stub(:method => value)` form' do
|
331
326
|
context 'and #receive_messages is available' do
|
327
|
+
# #before here does not work because #allowized! is invoked in super #before.
|
328
|
+
let(:rspec_version) do
|
329
|
+
rspec_version = Transpec.required_rspec_version
|
330
|
+
rspec_version.stub(:receive_messages_available?).and_return(true)
|
331
|
+
rspec_version
|
332
|
+
end
|
333
|
+
|
332
334
|
let(:source) do
|
333
335
|
<<-END
|
334
336
|
describe 'example' do
|
@@ -350,13 +352,11 @@ module Transpec
|
|
350
352
|
end
|
351
353
|
|
352
354
|
it 'converts into `allow(subject).to receive_messages(:method => value)` form' do
|
353
|
-
method_stub_object.allowize!(true)
|
354
355
|
rewritten_source.should == expected_source
|
355
356
|
end
|
356
357
|
|
357
358
|
it 'adds record ' +
|
358
|
-
|
359
|
-
method_stub_object.allowize!(true)
|
359
|
+
'`obj.stub(:message => value)` -> `allow(obj).to receive_messages(:message => value)`' do
|
360
360
|
record.original_syntax.should == 'obj.stub(:message => value)'
|
361
361
|
record.converted_syntax.should == 'allow(obj).to receive_messages(:message => value)'
|
362
362
|
end
|
@@ -384,13 +384,11 @@ module Transpec
|
|
384
384
|
end
|
385
385
|
|
386
386
|
it 'converts into `allow(subject).to receive(:method).and_return(value)` form' do
|
387
|
-
method_stub_object.allowize!
|
388
387
|
rewritten_source.should == expected_source
|
389
388
|
end
|
390
389
|
|
391
390
|
it 'adds record ' +
|
392
|
-
|
393
|
-
method_stub_object.allowize!
|
391
|
+
'`obj.stub(:message => value)` -> `allow(obj).to receive(:message).and_return(value)`' do
|
394
392
|
record.original_syntax.should == 'obj.stub(:message => value)'
|
395
393
|
record.converted_syntax.should == 'allow(obj).to receive(:message).and_return(value)'
|
396
394
|
end
|
@@ -419,13 +417,11 @@ module Transpec
|
|
419
417
|
end
|
420
418
|
|
421
419
|
it 'converts into `allow(subject).to receive(:method).and_return(value)` form' do
|
422
|
-
method_stub_object.allowize!
|
423
420
|
rewritten_source.should == expected_source
|
424
421
|
end
|
425
422
|
|
426
423
|
it 'adds record ' +
|
427
|
-
|
428
|
-
method_stub_object.allowize!
|
424
|
+
'`obj.stub(:message => value)` -> `allow(obj).to receive(:message).and_return(value)`' do
|
429
425
|
record.original_syntax.should == 'obj.stub(:message => value)'
|
430
426
|
record.converted_syntax.should == 'allow(obj).to receive(:message).and_return(value)'
|
431
427
|
end
|
@@ -455,19 +451,24 @@ module Transpec
|
|
455
451
|
|
456
452
|
it 'converts into `allow(subject).to receive(:a_method).and_return(a_value)` ' +
|
457
453
|
'and `allow(subject).to receive(:b_method).and_return(b_value)` form' do
|
458
|
-
method_stub_object.allowize!
|
459
454
|
rewritten_source.should == expected_source
|
460
455
|
end
|
461
456
|
|
462
457
|
it 'adds record ' +
|
463
|
-
|
464
|
-
method_stub_object.allowize!
|
458
|
+
'`obj.stub(:message => value)` -> `allow(obj).to receive(:message).and_return(value)`' do
|
465
459
|
record.original_syntax.should == 'obj.stub(:message => value)'
|
466
460
|
record.converted_syntax.should == 'allow(obj).to receive(:message).and_return(value)'
|
467
461
|
end
|
468
462
|
|
469
463
|
context 'when the statement continues over multi lines' do
|
470
464
|
context 'and #receive_messages is available' do
|
465
|
+
# #before here does not work because #allowized! is invoked in super #before.
|
466
|
+
let(:rspec_version) do
|
467
|
+
rspec_version = Transpec.required_rspec_version
|
468
|
+
rspec_version.stub(:receive_messages_available?).and_return(true)
|
469
|
+
rspec_version
|
470
|
+
end
|
471
|
+
|
471
472
|
let(:source) do
|
472
473
|
<<-END
|
473
474
|
describe 'example' do
|
@@ -497,7 +498,6 @@ module Transpec
|
|
497
498
|
end
|
498
499
|
|
499
500
|
it 'keeps the style' do
|
500
|
-
method_stub_object.allowize!(true)
|
501
501
|
rewritten_source.should == expected_source
|
502
502
|
end
|
503
503
|
end
|
@@ -531,84 +531,87 @@ module Transpec
|
|
531
531
|
end
|
532
532
|
|
533
533
|
it 'keeps the style except around the hash' do
|
534
|
-
method_stub_object.allowize!
|
535
534
|
rewritten_source.should == expected_source
|
536
535
|
end
|
537
536
|
end
|
538
537
|
end
|
539
538
|
end
|
540
|
-
end
|
541
539
|
|
542
|
-
|
543
|
-
context "when it is `subject.#{method}(:method)` form" do
|
540
|
+
context 'when it is `subject.stub_chain(:foo, :bar => value)` form' do
|
544
541
|
let(:source) do
|
545
542
|
<<-END
|
546
543
|
describe 'example' do
|
547
|
-
it '
|
548
|
-
subject
|
544
|
+
it 'responds to .foo.bar and returns 1' do
|
545
|
+
subject.stub_chain(:foo, :bar => 1)
|
549
546
|
end
|
550
547
|
end
|
551
548
|
END
|
552
549
|
end
|
553
550
|
|
554
|
-
|
555
|
-
|
556
|
-
|
551
|
+
let(:expected_source) do
|
552
|
+
<<-END
|
553
|
+
describe 'example' do
|
554
|
+
it 'responds to .foo.bar and returns 1' do
|
555
|
+
allow(subject).to receive_message_chain(:foo, :bar => 1)
|
556
|
+
end
|
557
|
+
end
|
558
|
+
END
|
557
559
|
end
|
558
560
|
|
559
|
-
|
560
|
-
|
561
|
-
|
561
|
+
context 'and #receive_message_chain is available' do
|
562
|
+
# #before here does not work because #allowized! is invoked in super #before.
|
563
|
+
let(:rspec_version) do
|
564
|
+
rspec_version = Transpec.required_rspec_version
|
565
|
+
rspec_version.stub(:receive_message_chain_available?).and_return(true)
|
566
|
+
rspec_version
|
567
|
+
end
|
568
|
+
|
569
|
+
it 'converts into `allow(subject).to receive_message_chain(:foo, :bar => value)` form' do
|
570
|
+
rewritten_source.should == expected_source
|
571
|
+
end
|
572
|
+
|
573
|
+
it "adds record `obj.stub_chain(:message1, :message2)` -> ' +
|
574
|
+
'`allow(obj).to receive_message_chain(:message1, :message2)`" do
|
575
|
+
record.original_syntax.should == 'obj.stub_chain(:message1, :message2)'
|
576
|
+
record.converted_syntax.should == 'allow(obj).to receive_message_chain(:message1, :message2)'
|
577
|
+
end
|
562
578
|
end
|
563
|
-
end
|
564
|
-
end
|
565
579
|
|
566
|
-
|
567
|
-
|
568
|
-
|
569
|
-
describe 'example' do
|
570
|
-
it 'responds to #foo' do
|
571
|
-
Klass.any_instance.stub(:foo)
|
572
|
-
end
|
580
|
+
context 'and #receive_message_chain is not available' do
|
581
|
+
it 'does nothing' do
|
582
|
+
rewritten_source.should == source
|
573
583
|
end
|
574
|
-
|
584
|
+
end
|
575
585
|
end
|
576
586
|
|
577
|
-
|
578
|
-
|
579
|
-
|
580
|
-
|
581
|
-
|
582
|
-
|
587
|
+
[:unstub, :unstub!].each do |method|
|
588
|
+
context "when it is `subject.#{method}(:method)` form" do
|
589
|
+
let(:source) do
|
590
|
+
<<-END
|
591
|
+
describe 'example' do
|
592
|
+
it 'does not respond to #foo' do
|
593
|
+
subject.#{method}(:foo)
|
594
|
+
end
|
595
|
+
end
|
596
|
+
END
|
583
597
|
end
|
584
|
-
END
|
585
|
-
end
|
586
598
|
|
587
|
-
|
588
|
-
|
589
|
-
|
590
|
-
end
|
599
|
+
it 'does nothing' do
|
600
|
+
rewritten_source.should == source
|
601
|
+
end
|
591
602
|
|
592
|
-
|
593
|
-
|
594
|
-
|
595
|
-
|
596
|
-
record.converted_syntax.should == 'allow_any_instance_of(Klass).to receive(:message)'
|
603
|
+
it 'reports nothing' do
|
604
|
+
method_stub_object.report.records.should be_empty
|
605
|
+
end
|
606
|
+
end
|
597
607
|
end
|
598
608
|
|
599
|
-
context 'when
|
609
|
+
context 'when it is `Klass.any_instance.stub(:method)` form' do
|
600
610
|
let(:source) do
|
601
611
|
<<-END
|
602
612
|
describe 'example' do
|
603
|
-
it 'responds to #foo
|
604
|
-
Klass
|
605
|
-
.any_instance
|
606
|
-
.stub(
|
607
|
-
:foo
|
608
|
-
).
|
609
|
-
and_return(
|
610
|
-
1
|
611
|
-
)
|
613
|
+
it 'responds to #foo' do
|
614
|
+
Klass.any_instance.stub(:foo)
|
612
615
|
end
|
613
616
|
end
|
614
617
|
END
|
@@ -617,71 +620,69 @@ module Transpec
|
|
617
620
|
let(:expected_source) do
|
618
621
|
<<-END
|
619
622
|
describe 'example' do
|
620
|
-
it 'responds to #foo
|
621
|
-
allow_any_instance_of(Klass)
|
622
|
-
.to receive(
|
623
|
-
:foo
|
624
|
-
).
|
625
|
-
and_return(
|
626
|
-
1
|
627
|
-
)
|
623
|
+
it 'responds to #foo' do
|
624
|
+
allow_any_instance_of(Klass).to receive(:foo)
|
628
625
|
end
|
629
626
|
end
|
630
627
|
END
|
631
628
|
end
|
632
629
|
|
633
|
-
it '
|
634
|
-
method_stub_object.allowize!
|
630
|
+
it 'converts into `allow_any_instance_of(Klass).to receive(:method)` form' do
|
635
631
|
rewritten_source.should == expected_source
|
636
632
|
end
|
637
|
-
end
|
638
|
-
end
|
639
633
|
|
640
|
-
|
641
|
-
|
642
|
-
|
643
|
-
|
644
|
-
|
645
|
-
described_class.any_instance.stub(:foo)
|
646
|
-
end
|
647
|
-
end
|
648
|
-
END
|
649
|
-
end
|
634
|
+
it 'adds record `Klass.any_instance.stub(:message)` ' +
|
635
|
+
'-> `allow_any_instance_of(obj).to receive(:message)`' do
|
636
|
+
record.original_syntax.should == 'Klass.any_instance.stub(:message)'
|
637
|
+
record.converted_syntax.should == 'allow_any_instance_of(Klass).to receive(:message)'
|
638
|
+
end
|
650
639
|
|
651
|
-
|
652
|
-
|
653
|
-
|
654
|
-
|
655
|
-
|
656
|
-
|
640
|
+
context 'when the statement continues over multi lines' do
|
641
|
+
let(:source) do
|
642
|
+
<<-END
|
643
|
+
describe 'example' do
|
644
|
+
it 'responds to #foo and returns 1' do
|
645
|
+
Klass
|
646
|
+
.any_instance
|
647
|
+
.stub(
|
648
|
+
:foo
|
649
|
+
).
|
650
|
+
and_return(
|
651
|
+
1
|
652
|
+
)
|
653
|
+
end
|
654
|
+
end
|
655
|
+
END
|
657
656
|
end
|
658
|
-
END
|
659
|
-
end
|
660
657
|
|
661
|
-
|
662
|
-
|
663
|
-
|
664
|
-
|
658
|
+
let(:expected_source) do
|
659
|
+
<<-END
|
660
|
+
describe 'example' do
|
661
|
+
it 'responds to #foo and returns 1' do
|
662
|
+
allow_any_instance_of(Klass)
|
663
|
+
.to receive(
|
664
|
+
:foo
|
665
|
+
).
|
666
|
+
and_return(
|
667
|
+
1
|
668
|
+
)
|
669
|
+
end
|
670
|
+
end
|
671
|
+
END
|
672
|
+
end
|
665
673
|
|
666
|
-
|
667
|
-
|
668
|
-
|
669
|
-
|
670
|
-
record.converted_syntax.should == 'allow_any_instance_of(Klass).to receive(:message)'
|
674
|
+
it 'keeps the style as far as possible' do
|
675
|
+
rewritten_source.should == expected_source
|
676
|
+
end
|
677
|
+
end
|
671
678
|
end
|
672
|
-
end
|
673
|
-
|
674
|
-
context 'when it is `variable.any_instance.stub(:method)` form ' +
|
675
|
-
'and the variable is an AnyInstance::Recorder' do
|
676
|
-
context 'with runtime information' do
|
677
|
-
include_context 'dynamic analysis objects'
|
678
679
|
|
680
|
+
context 'when it is `described_class.any_instance.stub(:method)` form' do
|
679
681
|
let(:source) do
|
680
682
|
<<-END
|
681
683
|
describe 'example' do
|
682
684
|
it 'responds to #foo' do
|
683
|
-
|
684
|
-
variable.stub(:foo)
|
685
|
+
described_class.any_instance.stub(:foo)
|
685
686
|
end
|
686
687
|
end
|
687
688
|
END
|
@@ -691,47 +692,81 @@ module Transpec
|
|
691
692
|
<<-END
|
692
693
|
describe 'example' do
|
693
694
|
it 'responds to #foo' do
|
694
|
-
|
695
|
-
allow_any_instance_of(String).to receive(:foo)
|
695
|
+
allow_any_instance_of(described_class).to receive(:foo)
|
696
696
|
end
|
697
697
|
end
|
698
698
|
END
|
699
699
|
end
|
700
700
|
|
701
|
-
it 'converts into `allow_any_instance_of(
|
702
|
-
method_stub_object.allowize!
|
701
|
+
it 'converts into `allow_any_instance_of(described_class).to receive(:method)` form' do
|
703
702
|
rewritten_source.should == expected_source
|
704
703
|
end
|
705
704
|
|
706
|
-
it
|
707
|
-
'-> `allow_any_instance_of(obj).to receive(:message)`
|
708
|
-
method_stub_object.allowize!
|
705
|
+
it 'adds record `Klass.any_instance.stub(:message)` ' +
|
706
|
+
'-> `allow_any_instance_of(obj).to receive(:message)`' do
|
709
707
|
record.original_syntax.should == 'Klass.any_instance.stub(:message)'
|
710
708
|
record.converted_syntax.should == 'allow_any_instance_of(Klass).to receive(:message)'
|
711
709
|
end
|
712
710
|
end
|
713
|
-
end
|
714
711
|
|
715
|
-
|
716
|
-
|
717
|
-
|
718
|
-
|
719
|
-
|
720
|
-
|
721
|
-
|
712
|
+
context 'when it is `variable.any_instance.stub(:method)` form ' +
|
713
|
+
'and the variable is an AnyInstance::Recorder' do
|
714
|
+
context 'with runtime information' do
|
715
|
+
include_context 'dynamic analysis objects'
|
716
|
+
|
717
|
+
let(:source) do
|
718
|
+
<<-END
|
719
|
+
describe 'example' do
|
720
|
+
it 'responds to #foo' do
|
721
|
+
variable = String.any_instance
|
722
|
+
variable.stub(:foo)
|
723
|
+
end
|
722
724
|
end
|
723
|
-
|
724
|
-
|
725
|
-
end
|
725
|
+
END
|
726
|
+
end
|
726
727
|
|
727
|
-
|
728
|
-
|
729
|
-
|
728
|
+
let(:expected_source) do
|
729
|
+
<<-END
|
730
|
+
describe 'example' do
|
731
|
+
it 'responds to #foo' do
|
732
|
+
variable = String.any_instance
|
733
|
+
allow_any_instance_of(String).to receive(:foo)
|
734
|
+
end
|
735
|
+
end
|
736
|
+
END
|
737
|
+
end
|
738
|
+
|
739
|
+
it 'converts into `allow_any_instance_of(Klass).to receive(:method)` form' do
|
740
|
+
rewritten_source.should == expected_source
|
741
|
+
end
|
742
|
+
|
743
|
+
it 'adds record `Klass.any_instance.stub(:message)` ' +
|
744
|
+
'-> `allow_any_instance_of(obj).to receive(:message)`' do
|
745
|
+
record.original_syntax.should == 'Klass.any_instance.stub(:message)'
|
746
|
+
record.converted_syntax.should == 'allow_any_instance_of(Klass).to receive(:message)'
|
747
|
+
end
|
730
748
|
end
|
749
|
+
end
|
731
750
|
|
732
|
-
|
733
|
-
|
734
|
-
|
751
|
+
[:unstub, :unstub!].each do |method|
|
752
|
+
context "when it is `Klass.any_instance.#{method}(:method)` form" do
|
753
|
+
let(:source) do
|
754
|
+
<<-END
|
755
|
+
describe 'example' do
|
756
|
+
it 'does not respond to #foo' do
|
757
|
+
Klass.any_instance.#{method}(:foo)
|
758
|
+
end
|
759
|
+
end
|
760
|
+
END
|
761
|
+
end
|
762
|
+
|
763
|
+
it 'does nothing' do
|
764
|
+
rewritten_source.should == source
|
765
|
+
end
|
766
|
+
|
767
|
+
it 'reports nothing' do
|
768
|
+
method_stub_object.report.records.should be_empty
|
769
|
+
end
|
735
770
|
end
|
736
771
|
end
|
737
772
|
end
|
@@ -771,7 +806,7 @@ module Transpec
|
|
771
806
|
end
|
772
807
|
|
773
808
|
it 'adds record ' +
|
774
|
-
"
|
809
|
+
"`obj.#{method}(:message)` -> `obj.#{replacement_method}(:message)`" do
|
775
810
|
record.original_syntax.should == "obj.#{method}(:message)"
|
776
811
|
record.converted_syntax.should == "obj.#{replacement_method}(:message)"
|
777
812
|
end
|