unparser 0.3.0 → 0.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/.circleci/config.yml +32 -8
- data/Changelog.md +5 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +26 -20
- data/README.md +21 -21
- data/config/flay.yml +1 -1
- data/config/reek.yml +9 -48
- data/lib/unparser.rb +62 -2
- data/lib/unparser/ast.rb +1 -1
- data/lib/unparser/cli/differ.rb +1 -1
- data/lib/unparser/cli/source.rb +2 -15
- data/lib/unparser/constants.rb +4 -2
- data/lib/unparser/emitter.rb +0 -14
- data/lib/unparser/emitter/argument.rb +62 -0
- data/lib/unparser/emitter/assignment.rb +4 -16
- data/lib/unparser/emitter/block.rb +29 -4
- data/lib/unparser/emitter/hookexe.rb +1 -1
- data/lib/unparser/emitter/index.rb +136 -0
- data/lib/unparser/emitter/lambda.rb +25 -0
- data/lib/unparser/emitter/literal/array.rb +1 -4
- data/lib/unparser/emitter/meta.rb +2 -2
- data/lib/unparser/emitter/rescue.rb +1 -1
- data/lib/unparser/emitter/send.rb +14 -28
- data/lib/unparser/emitter/send/attribute_assignment.rb +10 -24
- data/spec/spec_helper.rb +0 -11
- data/spec/unit/unparser/comments/consume_spec.rb +1 -1
- data/spec/unit/unparser/comments/take_all_spec.rb +1 -1
- data/spec/unit/unparser/comments/take_before_spec.rb +2 -2
- data/spec/unit/unparser/comments/take_eol_comments_spec.rb +6 -6
- data/spec/unit/unparser_spec.rb +365 -248
- data/unparser.gemspec +1 -1
- metadata +5 -6
- data/lib/unparser/emitter/send/index.rb +0 -127
- data/spec/support/parser_class_generator.rb +0 -21
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Unparser
|
4
|
+
class Emitter
|
5
|
+
# Emitter for lambda nodes
|
6
|
+
class Lambda < self
|
7
|
+
include Terminated
|
8
|
+
|
9
|
+
handle :lambda
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
# Perform dispatch
|
14
|
+
#
|
15
|
+
# @return [undefined]
|
16
|
+
#
|
17
|
+
# @api private
|
18
|
+
#
|
19
|
+
def dispatch
|
20
|
+
write('->')
|
21
|
+
end
|
22
|
+
|
23
|
+
end # Lambda
|
24
|
+
end # Emitter
|
25
|
+
end # Unparser
|
@@ -6,9 +6,6 @@ module Unparser
|
|
6
6
|
|
7
7
|
# Array literal emitter
|
8
8
|
class Array < self
|
9
|
-
OPEN = '['.freeze
|
10
|
-
CLOSE = ']'.freeze
|
11
|
-
|
12
9
|
handle :array
|
13
10
|
|
14
11
|
private
|
@@ -20,7 +17,7 @@ module Unparser
|
|
20
17
|
# @api private
|
21
18
|
#
|
22
19
|
def dispatch
|
23
|
-
parentheses(
|
20
|
+
parentheses(*BRACKETS_SQUARE) do
|
24
21
|
delimited(children)
|
25
22
|
end
|
26
23
|
end
|
@@ -6,10 +6,10 @@ module Unparser
|
|
6
6
|
class Meta < self
|
7
7
|
include Terminated
|
8
8
|
|
9
|
-
handle(:__FILE__, :__LINE__)
|
9
|
+
handle(:__ENCODING__, :__FILE__, :__LINE__)
|
10
10
|
|
11
11
|
def dispatch
|
12
|
-
write(node.type.to_s)
|
12
|
+
write(node.type.to_s)
|
13
13
|
end
|
14
14
|
end # Meta
|
15
15
|
end # Emitter
|
@@ -12,7 +12,7 @@ module Unparser
|
|
12
12
|
|
13
13
|
define_group :rescue_bodies, 1..-2
|
14
14
|
|
15
|
-
EMBEDDED_TYPES = %i[def defs kwbegin ensure].to_set.freeze
|
15
|
+
EMBEDDED_TYPES = %i[block def defs kwbegin ensure].to_set.freeze
|
16
16
|
|
17
17
|
NOINDENT_STANDALONE_RESCUE = %i[root begin pair_rocket pair_colon lvasgn ivasgn].to_set.freeze
|
18
18
|
|
@@ -8,12 +8,10 @@ module Unparser
|
|
8
8
|
|
9
9
|
handle :send
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
INDEX_ASSIGN = :'[]='
|
16
|
-
ASSIGN_SUFFIX = '='.freeze
|
11
|
+
ASSIGN_SUFFIX = '='.freeze
|
12
|
+
INDEX_ASSIGN = :'[]='
|
13
|
+
INDEX_REFERENCE = :'[]'
|
14
|
+
NON_ASSIGN_RANGE = (0..-2).freeze
|
17
15
|
|
18
16
|
children :receiver, :selector
|
19
17
|
|
@@ -50,23 +48,6 @@ module Unparser
|
|
50
48
|
# @api private
|
51
49
|
#
|
52
50
|
def effective_emitter_class
|
53
|
-
case selector
|
54
|
-
when INDEX_REFERENCE
|
55
|
-
Index::Reference
|
56
|
-
when INDEX_ASSIGN
|
57
|
-
Index::Assign
|
58
|
-
else
|
59
|
-
non_index_emitter
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
# Return non index emitter
|
64
|
-
#
|
65
|
-
# @return [Class:Emitter]
|
66
|
-
#
|
67
|
-
# @api private
|
68
|
-
#
|
69
|
-
def non_index_emitter
|
70
51
|
if binary_operator?
|
71
52
|
Binary
|
72
53
|
elsif unary_operator?
|
@@ -115,11 +96,7 @@ module Unparser
|
|
115
96
|
# @api private
|
116
97
|
#
|
117
98
|
def emit_selector
|
118
|
-
|
119
|
-
if mlhs?
|
120
|
-
name = name[0..-2]
|
121
|
-
end
|
122
|
-
write(name)
|
99
|
+
write(mlhs? ? non_assignment_selector : string_selector)
|
123
100
|
end
|
124
101
|
|
125
102
|
# Test for mlhs
|
@@ -199,6 +176,15 @@ module Unparser
|
|
199
176
|
local_variable_scope.local_variable_defined_for_node?(node, selector)
|
200
177
|
end
|
201
178
|
|
179
|
+
# The non assignment selector
|
180
|
+
#
|
181
|
+
# @return [String]
|
182
|
+
#
|
183
|
+
# @api private
|
184
|
+
def non_assignment_selector
|
185
|
+
string_selector[NON_ASSIGN_RANGE]
|
186
|
+
end
|
187
|
+
|
202
188
|
end # Send
|
203
189
|
end # Emitter
|
204
190
|
end # Unparser
|
@@ -7,6 +7,8 @@ module Unparser
|
|
7
7
|
class AttributeAssignment < self
|
8
8
|
include Unterminated
|
9
9
|
|
10
|
+
children :receiver, :selector, :first_argument
|
11
|
+
|
10
12
|
# Perform regular dispatch
|
11
13
|
#
|
12
14
|
# @return [undefined]
|
@@ -16,8 +18,13 @@ module Unparser
|
|
16
18
|
def dispatch
|
17
19
|
emit_receiver
|
18
20
|
emit_attribute
|
19
|
-
|
20
|
-
|
21
|
+
write(T_ASN)
|
22
|
+
|
23
|
+
if arguments.one?
|
24
|
+
visit(first_argument)
|
25
|
+
else
|
26
|
+
parentheses { delimited(arguments) }
|
27
|
+
end
|
21
28
|
end
|
22
29
|
|
23
30
|
private
|
@@ -40,29 +47,8 @@ module Unparser
|
|
40
47
|
# @api private
|
41
48
|
#
|
42
49
|
def emit_attribute
|
43
|
-
write(
|
44
|
-
end
|
45
|
-
|
46
|
-
# Emit assignment operator
|
47
|
-
#
|
48
|
-
# @return [undefined]
|
49
|
-
#
|
50
|
-
# @api private
|
51
|
-
#
|
52
|
-
def emit_operator
|
53
|
-
write(WS, T_ASN, WS)
|
54
|
-
end
|
55
|
-
|
56
|
-
# Return attribute name
|
57
|
-
#
|
58
|
-
# @return [String]
|
59
|
-
#
|
60
|
-
# @api private
|
61
|
-
#
|
62
|
-
def attribute_name
|
63
|
-
string_selector[0..-2]
|
50
|
+
write(non_assignment_selector)
|
64
51
|
end
|
65
|
-
|
66
52
|
end # AttributeAssignment
|
67
53
|
end # Send
|
68
54
|
end # Emitter
|
data/spec/spec_helper.rb
CHANGED
@@ -6,22 +6,11 @@ require 'morpher'
|
|
6
6
|
require 'devtools/spec_helper'
|
7
7
|
|
8
8
|
require 'parser/current'
|
9
|
-
require 'parser/ruby19'
|
10
|
-
require 'parser/ruby20'
|
11
|
-
require 'parser/ruby21'
|
12
|
-
require 'parser/ruby22'
|
13
9
|
|
14
10
|
module SpecHelper
|
15
11
|
def s(type, *children)
|
16
12
|
Parser::AST::Node.new(type, children)
|
17
13
|
end
|
18
|
-
|
19
|
-
def strip(source)
|
20
|
-
source = source.rstrip
|
21
|
-
indent = source.scan(/^\s*/).min_by(&:length)
|
22
|
-
source.gsub(/^#{indent}/, '')
|
23
|
-
end
|
24
|
-
|
25
14
|
end
|
26
15
|
|
27
16
|
RSpec.configure do |config|
|
@@ -9,7 +9,7 @@ describe Unparser::Comments, '#take_before' do
|
|
9
9
|
context 'usual case' do
|
10
10
|
|
11
11
|
let(:ast_and_comments) do
|
12
|
-
|
12
|
+
Unparser.parse_with_comments(<<~'RUBY')
|
13
13
|
def hi # EOL 1
|
14
14
|
# comment
|
15
15
|
end # EOL 2
|
@@ -29,7 +29,7 @@ describe Unparser::Comments, '#take_before' do
|
|
29
29
|
context 'when node does not respond to source part' do
|
30
30
|
|
31
31
|
let(:ast_and_comments) do
|
32
|
-
|
32
|
+
Unparser.parse_with_comments(<<~'RUBY')
|
33
33
|
expression ? :foo : :bar # EOL 1
|
34
34
|
# EOL 2
|
35
35
|
RUBY
|
@@ -3,12 +3,12 @@ require 'spec_helper'
|
|
3
3
|
describe Unparser::Comments, '#take_eol_comments' do
|
4
4
|
|
5
5
|
let(:ast_and_comments) do
|
6
|
-
|
7
|
-
def hi # EOL 1
|
8
|
-
=begin
|
9
|
-
doc comment
|
10
|
-
=end
|
11
|
-
end # EOL 2
|
6
|
+
Unparser.parse_with_comments(<<~'RUBY')
|
7
|
+
def hi # EOL 1
|
8
|
+
=begin
|
9
|
+
doc comment
|
10
|
+
=end
|
11
|
+
end # EOL 2
|
12
12
|
RUBY
|
13
13
|
end
|
14
14
|
let(:ast) { ast_and_comments[0] }
|
data/spec/unit/unparser_spec.rb
CHANGED
@@ -1,95 +1,114 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
-
require 'parser/all'
|
3
|
-
require 'support/parser_class_generator'
|
4
2
|
|
5
3
|
describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
6
|
-
describe '.
|
7
|
-
|
8
|
-
RUBY_VERSION_PARSERS = IceNine.deep_freeze(
|
9
|
-
'2.5' => Parser::Ruby25
|
10
|
-
)
|
4
|
+
describe '.buffer' do
|
5
|
+
let(:source) { 'a + b' }
|
11
6
|
|
12
|
-
|
13
|
-
|
14
|
-
def self.builder_options
|
15
|
-
@builder_options ||= {}
|
7
|
+
def apply
|
8
|
+
described_class.buffer(source)
|
16
9
|
end
|
17
10
|
|
18
|
-
|
19
|
-
|
11
|
+
it 'returns parser buffer with expected name' do
|
12
|
+
expect(apply.name).to eql('(string)')
|
20
13
|
end
|
21
14
|
|
22
|
-
|
23
|
-
|
15
|
+
it 'returns parser buffer with pre-filled source' do
|
16
|
+
expect(apply.source).to eql(source)
|
24
17
|
end
|
18
|
+
end
|
25
19
|
|
26
|
-
|
27
|
-
|
20
|
+
describe '.parser' do
|
21
|
+
let(:invalid_source_buffer) { Unparser.buffer('a +') }
|
22
|
+
|
23
|
+
def apply
|
24
|
+
described_class.parser
|
28
25
|
end
|
29
26
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
else
|
35
|
-
if ending_at
|
36
|
-
idx = ruby_versions.index(ending_at) || fail('Invalid Ruby specified')
|
37
|
-
self.ruby_versions = ruby_versions[0..idx]
|
38
|
-
end
|
39
|
-
if beginning_at
|
40
|
-
idx = ruby_versions.index(beginning_at) || fail('Invalid Ruby specified')
|
41
|
-
self.ruby_versions = ruby_versions[idx..-1]
|
27
|
+
context 'failure' do
|
28
|
+
def apply
|
29
|
+
super.tap do |parser|
|
30
|
+
parser.diagnostics.consumer = ->(_) {}
|
42
31
|
end
|
43
32
|
end
|
44
33
|
|
45
|
-
|
34
|
+
it 'returns a parser that fails with syntax error' do
|
35
|
+
expect { apply.parse(invalid_source_buffer) }
|
36
|
+
.to raise_error(Parser::SyntaxError)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
context 'warnings' do
|
41
|
+
before do
|
42
|
+
allow(Kernel).to receive(:warn)
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'returns a parser that warns on diagnostics' do
|
46
|
+
expect { apply.parse(invalid_source_buffer) }
|
47
|
+
.to raise_error(Parser::SyntaxError)
|
48
|
+
|
49
|
+
expect(Kernel).to have_received(:warn)
|
50
|
+
.with([
|
51
|
+
"(string):1:4: error: unexpected token $end",
|
52
|
+
"(string):1: a +", "(string):1: "
|
53
|
+
])
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe '.parse' do
|
59
|
+
def apply
|
60
|
+
described_class.parse('self[1]=2')
|
61
|
+
end
|
46
62
|
|
47
|
-
|
63
|
+
it 'returns expected AST' do
|
64
|
+
expect(apply).to eql(s(:indexasgn, s(:self), s(:int, 1), s(:int, 2)))
|
48
65
|
end
|
66
|
+
end
|
49
67
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
68
|
+
describe '.unparse' do
|
69
|
+
let(:builder_options) { {} }
|
70
|
+
|
71
|
+
def parser
|
72
|
+
Unparser.parser.tap do |parser|
|
73
|
+
builder_options.each do |name, value|
|
74
|
+
parser.builder.public_send(:"#{name}=", value)
|
56
75
|
end
|
57
76
|
end
|
58
77
|
end
|
59
78
|
|
60
|
-
def
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
yield
|
79
|
+
def buffer(input)
|
80
|
+
Unparser.buffer(input)
|
81
|
+
end
|
65
82
|
|
66
|
-
|
83
|
+
def parse_with_comments(string)
|
84
|
+
parser.parse_with_comments(buffer(string))
|
67
85
|
end
|
68
86
|
|
69
|
-
def self.
|
70
|
-
|
71
|
-
|
87
|
+
def self.with_builder_options(options, &block)
|
88
|
+
context "with #{options}" do
|
89
|
+
let(:builder_options) { options }
|
90
|
+
|
91
|
+
class_eval(&block)
|
72
92
|
end
|
73
93
|
end
|
74
94
|
|
75
|
-
def assert_round_trip(
|
76
|
-
ast, comments =
|
95
|
+
def assert_round_trip(string, parser)
|
96
|
+
ast, comments = parse_with_comments(string)
|
77
97
|
generated = Unparser.unparse(ast, comments)
|
78
|
-
expect(generated).to eql(
|
79
|
-
generated_ast, _comments =
|
98
|
+
expect(generated).to eql(string.chomp)
|
99
|
+
generated_ast, _comments = parse_with_comments(generated)
|
80
100
|
expect(ast == generated_ast).to be(true)
|
81
101
|
end
|
82
102
|
|
83
103
|
def assert_generates_from_string(parser, string, expected)
|
84
|
-
|
85
|
-
ast_with_comments
|
86
|
-
assert_generates_from_ast(parser, ast_with_comments, expected)
|
104
|
+
ast_with_comments = parse_with_comments(string)
|
105
|
+
assert_generates_from_ast(parser, ast_with_comments, expected.chomp)
|
87
106
|
end
|
88
107
|
|
89
108
|
def assert_generates_from_ast(parser, ast_with_comments, expected)
|
90
109
|
generated = Unparser.unparse(*ast_with_comments)
|
91
110
|
expect(generated).to eql(expected)
|
92
|
-
ast, comments =
|
111
|
+
ast, comments = parse_with_comments(generated)
|
93
112
|
expect(Unparser.unparse(ast, comments)).to eql(expected)
|
94
113
|
end
|
95
114
|
|
@@ -104,42 +123,37 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
104
123
|
assert_source("#{expression}.foo")
|
105
124
|
end
|
106
125
|
|
107
|
-
def self.assert_generates(
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
else
|
114
|
-
assert_generates_from_ast(parser, [ast_or_string, []], expected)
|
115
|
-
end
|
126
|
+
def self.assert_generates(input, expected)
|
127
|
+
it "should generate #{input} as #{expected}" do
|
128
|
+
if input.is_a?(String)
|
129
|
+
assert_generates_from_string(parser, input, expected)
|
130
|
+
else
|
131
|
+
assert_generates_from_ast(parser, [input, []], expected)
|
116
132
|
end
|
117
133
|
end
|
118
134
|
end
|
119
135
|
|
120
136
|
def self.assert_round_trip(input)
|
121
|
-
|
122
|
-
|
123
|
-
assert_round_trip(input, parser)
|
124
|
-
end
|
137
|
+
it "should round trip #{input}" do
|
138
|
+
assert_round_trip(input, parser)
|
125
139
|
end
|
126
140
|
end
|
127
141
|
|
128
142
|
def self.assert_source(input)
|
129
|
-
assert_round_trip(
|
143
|
+
assert_round_trip(input)
|
130
144
|
end
|
131
145
|
|
132
146
|
context 'kwargs' do
|
133
|
-
assert_source
|
147
|
+
assert_source <<~RUBY
|
134
148
|
def foo(bar:, baz:)
|
135
149
|
end
|
136
150
|
RUBY
|
137
151
|
|
138
|
-
assert_source
|
152
|
+
assert_source <<~RUBY
|
139
153
|
foo(**bar)
|
140
154
|
RUBY
|
141
155
|
|
142
|
-
assert_source
|
156
|
+
assert_source <<~RUBY
|
143
157
|
def foo(bar:, baz: "value")
|
144
158
|
end
|
145
159
|
RUBY
|
@@ -193,7 +207,7 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
193
207
|
assert_terminated '"foo bar"'
|
194
208
|
assert_terminated '"foo\nbar"'
|
195
209
|
# Within indentation
|
196
|
-
assert_generates
|
210
|
+
assert_generates <<~'RUBY', <<~'RUBY'
|
197
211
|
if foo
|
198
212
|
"
|
199
213
|
#{foo}
|
@@ -233,7 +247,7 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
233
247
|
assert_terminated '/\n/'
|
234
248
|
assert_terminated "/\n/x"
|
235
249
|
# Within indentation
|
236
|
-
assert_source
|
250
|
+
assert_source <<~RUBY
|
237
251
|
if foo
|
238
252
|
/
|
239
253
|
/
|
@@ -320,7 +334,7 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
320
334
|
end
|
321
335
|
|
322
336
|
context 'magic keywords' do
|
323
|
-
|
337
|
+
assert_source '__ENCODING__'
|
324
338
|
|
325
339
|
# These two assertions don't actually need to be wrapped in this block since `true` is the default,
|
326
340
|
# but it is helpful to contrast with the assertions farther down.
|
@@ -353,7 +367,7 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
353
367
|
context 'lvar introduction from condition' do
|
354
368
|
assert_source 'foo = bar while foo'
|
355
369
|
assert_source 'foo = bar until foo'
|
356
|
-
assert_source
|
370
|
+
assert_source <<~'RUBY'
|
357
371
|
foo = exp
|
358
372
|
while foo
|
359
373
|
foo = bar
|
@@ -366,7 +380,7 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
366
380
|
# pair = :foo
|
367
381
|
# foo
|
368
382
|
# end
|
369
|
-
assert_source
|
383
|
+
assert_source <<~'RUBY'
|
370
384
|
if foo do |pair|
|
371
385
|
pair
|
372
386
|
end
|
@@ -375,13 +389,13 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
375
389
|
end
|
376
390
|
RUBY
|
377
391
|
|
378
|
-
assert_source
|
392
|
+
assert_source <<~'RUBY'
|
379
393
|
while foo
|
380
394
|
foo = bar
|
381
395
|
end
|
382
396
|
RUBY
|
383
397
|
|
384
|
-
assert_source
|
398
|
+
assert_source <<~'RUBY'
|
385
399
|
each do |bar|
|
386
400
|
while foo
|
387
401
|
foo = bar
|
@@ -389,13 +403,13 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
389
403
|
end
|
390
404
|
RUBY
|
391
405
|
|
392
|
-
assert_source
|
406
|
+
assert_source <<~'RUBY'
|
393
407
|
def foo
|
394
408
|
foo = bar while foo != baz
|
395
409
|
end
|
396
410
|
RUBY
|
397
411
|
|
398
|
-
assert_source
|
412
|
+
assert_source <<~'RUBY'
|
399
413
|
each do |baz|
|
400
414
|
while foo
|
401
415
|
foo = bar
|
@@ -403,7 +417,7 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
403
417
|
end
|
404
418
|
RUBY
|
405
419
|
|
406
|
-
assert_source
|
420
|
+
assert_source <<~'RUBY'
|
407
421
|
each do |foo|
|
408
422
|
while foo
|
409
423
|
foo = bar
|
@@ -441,7 +455,7 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
441
455
|
assert_unterminated "#{keyword} *nil"
|
442
456
|
assert_unterminated "#{keyword} *foo, bar"
|
443
457
|
|
444
|
-
assert_generates
|
458
|
+
assert_generates <<~RUBY, <<~RUBY
|
445
459
|
foo do |bar|
|
446
460
|
bar =~ // || #{keyword}
|
447
461
|
baz
|
@@ -453,7 +467,7 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
453
467
|
end
|
454
468
|
RUBY
|
455
469
|
|
456
|
-
assert_generates
|
470
|
+
assert_generates <<~RUBY, <<~RUBY
|
457
471
|
#{keyword}(a ? b : c)
|
458
472
|
RUBY
|
459
473
|
#{keyword} (if a
|
@@ -484,91 +498,101 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
484
498
|
assert_terminated 'foo(&(foo || bar))'
|
485
499
|
assert_terminated 'foo(*arguments)'
|
486
500
|
assert_terminated 'foo(*arguments)'
|
487
|
-
|
501
|
+
|
502
|
+
assert_source <<~'RUBY'
|
488
503
|
foo do
|
489
504
|
end
|
490
505
|
RUBY
|
491
506
|
|
492
|
-
assert_source
|
493
|
-
foo
|
494
|
-
nil
|
507
|
+
assert_source <<~'RUBY'
|
508
|
+
foo do |a|
|
495
509
|
end
|
496
510
|
RUBY
|
497
511
|
|
498
|
-
assert_source
|
512
|
+
assert_source <<~'RUBY'
|
513
|
+
foo do |a, |
|
514
|
+
end
|
515
|
+
RUBY
|
516
|
+
|
517
|
+
assert_source <<~'RUBY'
|
499
518
|
foo do |a, b|
|
519
|
+
end
|
520
|
+
RUBY
|
521
|
+
|
522
|
+
assert_source <<~'RUBY'
|
523
|
+
foo(1) do
|
500
524
|
nil
|
501
525
|
end
|
502
526
|
RUBY
|
503
527
|
|
504
|
-
assert_source
|
528
|
+
assert_source <<~'RUBY'
|
505
529
|
foo do |a, *b|
|
506
530
|
nil
|
507
531
|
end
|
508
532
|
RUBY
|
509
533
|
|
510
|
-
assert_source
|
534
|
+
assert_source <<~'RUBY'
|
511
535
|
foo do |a, *|
|
512
536
|
nil
|
513
537
|
end
|
514
538
|
RUBY
|
515
539
|
|
516
|
-
assert_source
|
540
|
+
assert_source <<~'RUBY'
|
517
541
|
foo do
|
518
542
|
bar
|
519
543
|
end
|
520
544
|
RUBY
|
521
545
|
|
522
|
-
assert_source
|
546
|
+
assert_source <<~'RUBY'
|
523
547
|
foo.bar(*args)
|
524
548
|
RUBY
|
525
549
|
|
526
|
-
assert_source
|
550
|
+
assert_source <<~'RUBY'
|
527
551
|
foo.bar do |(a)|
|
528
552
|
d
|
529
553
|
end
|
530
554
|
RUBY
|
531
555
|
|
532
|
-
assert_source
|
556
|
+
assert_source <<~'RUBY'
|
533
557
|
foo.bar do |(a, b), c|
|
534
558
|
d
|
535
559
|
end
|
536
560
|
RUBY
|
537
561
|
|
538
|
-
assert_source
|
562
|
+
assert_source <<~'RUBY'
|
539
563
|
foo.bar do |*a; b|
|
540
564
|
end
|
541
565
|
RUBY
|
542
566
|
|
543
|
-
assert_source
|
567
|
+
assert_source <<~'RUBY'
|
544
568
|
foo.bar do |a; b|
|
545
569
|
end
|
546
570
|
RUBY
|
547
571
|
|
548
|
-
assert_source
|
572
|
+
assert_source <<~'RUBY'
|
549
573
|
foo.bar do |; a, b|
|
550
574
|
end
|
551
575
|
RUBY
|
552
576
|
|
553
|
-
assert_source
|
577
|
+
assert_source <<~'RUBY'
|
554
578
|
foo.bar do |((*))|
|
555
579
|
d
|
556
580
|
end
|
557
581
|
RUBY
|
558
582
|
|
559
|
-
assert_source
|
583
|
+
assert_source <<~'RUBY'
|
560
584
|
foo.bar do |(a, (*))|
|
561
585
|
d
|
562
586
|
end
|
563
587
|
RUBY
|
564
588
|
|
565
|
-
assert_source
|
589
|
+
assert_source <<~'RUBY'
|
566
590
|
foo.bar do |(a, b)|
|
567
591
|
d
|
568
592
|
end
|
569
593
|
RUBY
|
570
594
|
|
571
|
-
assert_source
|
595
|
+
assert_source <<~'RUBY'
|
572
596
|
foo.bar do
|
573
597
|
end.baz
|
574
598
|
RUBY
|
@@ -578,17 +602,17 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
578
602
|
assert_unterminated 'a || return'
|
579
603
|
assert_unterminated 'foo << (bar * baz)'
|
580
604
|
|
581
|
-
assert_source
|
605
|
+
assert_source <<~'RUBY'
|
582
606
|
foo ||= (a, _ = b)
|
583
607
|
RUBY
|
584
608
|
|
585
|
-
assert_source
|
609
|
+
assert_source <<~'RUBY'
|
586
610
|
begin
|
587
611
|
rescue
|
588
612
|
end.bar
|
589
613
|
RUBY
|
590
614
|
|
591
|
-
assert_source
|
615
|
+
assert_source <<~'RUBY'
|
592
616
|
case (def foo
|
593
617
|
end
|
594
618
|
:bar)
|
@@ -596,58 +620,58 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
596
620
|
end.baz
|
597
621
|
RUBY
|
598
622
|
|
599
|
-
assert_source
|
623
|
+
assert_source <<~'RUBY'
|
600
624
|
case foo
|
601
625
|
when bar
|
602
626
|
end.baz
|
603
627
|
RUBY
|
604
628
|
|
605
|
-
assert_source
|
629
|
+
assert_source <<~'RUBY'
|
606
630
|
class << self
|
607
631
|
end.bar
|
608
632
|
RUBY
|
609
633
|
|
610
|
-
assert_source
|
634
|
+
assert_source <<~'RUBY'
|
611
635
|
def self.foo
|
612
636
|
end.bar
|
613
637
|
RUBY
|
614
638
|
|
615
|
-
assert_source
|
639
|
+
assert_source <<~'RUBY'
|
616
640
|
def foo
|
617
641
|
end.bar
|
618
642
|
RUBY
|
619
643
|
|
620
|
-
assert_source
|
644
|
+
assert_source <<~'RUBY'
|
621
645
|
until foo
|
622
646
|
end.bar
|
623
647
|
RUBY
|
624
648
|
|
625
|
-
assert_source
|
649
|
+
assert_source <<~'RUBY'
|
626
650
|
while foo
|
627
651
|
end.bar
|
628
652
|
RUBY
|
629
653
|
|
630
|
-
assert_source
|
654
|
+
assert_source <<~'RUBY'
|
631
655
|
loop do
|
632
656
|
end.bar
|
633
657
|
RUBY
|
634
658
|
|
635
|
-
assert_source
|
659
|
+
assert_source <<~'RUBY'
|
636
660
|
class Foo
|
637
661
|
end.bar
|
638
662
|
RUBY
|
639
663
|
|
640
|
-
assert_source
|
664
|
+
assert_source <<~'RUBY'
|
641
665
|
module Foo
|
642
666
|
end.bar
|
643
667
|
RUBY
|
644
668
|
|
645
|
-
assert_source
|
669
|
+
assert_source <<~'RUBY'
|
646
670
|
if foo
|
647
671
|
end.baz
|
648
672
|
RUBY
|
649
673
|
|
650
|
-
assert_source
|
674
|
+
assert_source <<~'RUBY'
|
651
675
|
local = 1
|
652
676
|
local.bar
|
653
677
|
RUBY
|
@@ -657,15 +681,16 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
657
681
|
assert_terminated 'foo.bar(*args, foo)'
|
658
682
|
assert_terminated 'foo.bar(foo, *args)'
|
659
683
|
assert_terminated 'foo.bar(foo, *args, &block)'
|
660
|
-
assert_source
|
684
|
+
assert_source <<~'RUBY'
|
661
685
|
foo(bar, *args)
|
662
686
|
RUBY
|
663
687
|
|
664
688
|
assert_terminated 'foo(*args, &block)'
|
665
689
|
assert_terminated 'foo.bar(&baz)'
|
666
690
|
assert_terminated 'foo.bar(:baz, &baz)'
|
667
|
-
assert_terminated 'foo.bar
|
668
|
-
|
691
|
+
assert_terminated 'foo.bar=:baz'
|
692
|
+
|
693
|
+
assert_unterminated 'self.foo=:bar'
|
669
694
|
|
670
695
|
assert_terminated 'foo.bar(baz: boz)'
|
671
696
|
assert_terminated 'foo.bar(foo, "baz" => boz)'
|
@@ -676,17 +701,17 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
676
701
|
context 'begin; end' do
|
677
702
|
assert_generates s(:begin), ''
|
678
703
|
|
679
|
-
assert_source
|
704
|
+
assert_source <<~'RUBY'
|
680
705
|
begin
|
681
706
|
end
|
682
707
|
RUBY
|
683
708
|
|
684
|
-
assert_source
|
709
|
+
assert_source <<~'RUBY'
|
685
710
|
foo
|
686
711
|
bar
|
687
712
|
RUBY
|
688
713
|
|
689
|
-
assert_source
|
714
|
+
assert_source <<~'RUBY'
|
690
715
|
begin
|
691
716
|
foo
|
692
717
|
bar
|
@@ -695,7 +720,7 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
695
720
|
end
|
696
721
|
|
697
722
|
context 'begin / rescue / ensure' do
|
698
|
-
assert_source
|
723
|
+
assert_source <<~'RUBY'
|
699
724
|
begin
|
700
725
|
foo
|
701
726
|
ensure
|
@@ -704,7 +729,7 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
704
729
|
end
|
705
730
|
RUBY
|
706
731
|
|
707
|
-
assert_source
|
732
|
+
assert_source <<~'RUBY'
|
708
733
|
begin
|
709
734
|
foo
|
710
735
|
rescue
|
@@ -712,7 +737,7 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
712
737
|
end
|
713
738
|
RUBY
|
714
739
|
|
715
|
-
assert_source
|
740
|
+
assert_source <<~'RUBY'
|
716
741
|
begin
|
717
742
|
begin
|
718
743
|
foo
|
@@ -725,14 +750,14 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
725
750
|
end
|
726
751
|
RUBY
|
727
752
|
|
728
|
-
assert_source
|
753
|
+
assert_source <<~'RUBY'
|
729
754
|
begin
|
730
755
|
raise(Exception) rescue foo = bar
|
731
756
|
rescue Exception
|
732
757
|
end
|
733
758
|
RUBY
|
734
759
|
|
735
|
-
assert_source
|
760
|
+
assert_source <<~'RUBY'
|
736
761
|
begin
|
737
762
|
foo
|
738
763
|
bar
|
@@ -742,7 +767,7 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
742
767
|
end
|
743
768
|
RUBY
|
744
769
|
|
745
|
-
assert_source
|
770
|
+
assert_source <<~'RUBY'
|
746
771
|
begin
|
747
772
|
foo
|
748
773
|
rescue Exception
|
@@ -750,7 +775,7 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
750
775
|
end
|
751
776
|
RUBY
|
752
777
|
|
753
|
-
assert_source
|
778
|
+
assert_source <<~'RUBY'
|
754
779
|
begin
|
755
780
|
foo
|
756
781
|
rescue => bar
|
@@ -758,7 +783,7 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
758
783
|
end
|
759
784
|
RUBY
|
760
785
|
|
761
|
-
assert_source
|
786
|
+
assert_source <<~'RUBY'
|
762
787
|
begin
|
763
788
|
foo
|
764
789
|
rescue Exception, Other => bar
|
@@ -766,44 +791,44 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
766
791
|
end
|
767
792
|
RUBY
|
768
793
|
|
769
|
-
assert_source
|
794
|
+
assert_source <<~'RUBY'
|
770
795
|
class << self
|
771
796
|
undef :bar rescue nil
|
772
797
|
end
|
773
798
|
RUBY
|
774
799
|
|
775
|
-
assert_source
|
800
|
+
assert_source <<~'RUBY'
|
776
801
|
module Foo
|
777
802
|
undef :bar rescue nil
|
778
803
|
end
|
779
804
|
RUBY
|
780
805
|
|
781
|
-
assert_source
|
806
|
+
assert_source <<~'RUBY'
|
782
807
|
class Foo
|
783
808
|
undef :bar rescue nil
|
784
809
|
end
|
785
810
|
RUBY
|
786
811
|
|
787
|
-
assert_source
|
812
|
+
assert_source <<~'RUBY'
|
788
813
|
begin
|
789
814
|
rescue Exception => e
|
790
815
|
end
|
791
816
|
RUBY
|
792
817
|
|
793
|
-
assert_source
|
818
|
+
assert_source <<~'RUBY'
|
794
819
|
begin
|
795
820
|
ensure
|
796
821
|
end
|
797
822
|
RUBY
|
798
823
|
|
799
|
-
assert_source
|
824
|
+
assert_source <<~'RUBY'
|
800
825
|
begin
|
801
826
|
rescue
|
802
827
|
ensure
|
803
828
|
end
|
804
829
|
RUBY
|
805
830
|
|
806
|
-
assert_source
|
831
|
+
assert_source <<~'RUBY'
|
807
832
|
begin
|
808
833
|
foo
|
809
834
|
rescue Exception => bar
|
@@ -811,7 +836,7 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
811
836
|
end
|
812
837
|
RUBY
|
813
838
|
|
814
|
-
assert_source
|
839
|
+
assert_source <<~'RUBY'
|
815
840
|
begin
|
816
841
|
bar
|
817
842
|
rescue SomeError, *bar
|
@@ -819,7 +844,7 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
819
844
|
end
|
820
845
|
RUBY
|
821
846
|
|
822
|
-
assert_source
|
847
|
+
assert_source <<~'RUBY'
|
823
848
|
begin
|
824
849
|
bar
|
825
850
|
rescue SomeError, *bar => exception
|
@@ -827,7 +852,7 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
827
852
|
end
|
828
853
|
RUBY
|
829
854
|
|
830
|
-
assert_source
|
855
|
+
assert_source <<~'RUBY'
|
831
856
|
begin
|
832
857
|
bar
|
833
858
|
rescue *bar
|
@@ -835,14 +860,14 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
835
860
|
end
|
836
861
|
RUBY
|
837
862
|
|
838
|
-
assert_source
|
863
|
+
assert_source <<~'RUBY'
|
839
864
|
begin
|
840
865
|
bar
|
841
866
|
rescue LoadError
|
842
867
|
end
|
843
868
|
RUBY
|
844
869
|
|
845
|
-
assert_source
|
870
|
+
assert_source <<~'RUBY'
|
846
871
|
begin
|
847
872
|
bar
|
848
873
|
rescue
|
@@ -851,7 +876,7 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
851
876
|
end
|
852
877
|
RUBY
|
853
878
|
|
854
|
-
assert_source
|
879
|
+
assert_source <<~'RUBY'
|
855
880
|
begin
|
856
881
|
bar
|
857
882
|
rescue *bar => exception
|
@@ -859,19 +884,94 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
859
884
|
end
|
860
885
|
RUBY
|
861
886
|
|
887
|
+
assert_source <<~'RUBY'
|
888
|
+
m do
|
889
|
+
rescue Exception => e
|
890
|
+
end
|
891
|
+
RUBY
|
892
|
+
|
893
|
+
assert_source <<~'RUBY'
|
894
|
+
m do
|
895
|
+
ensure
|
896
|
+
end
|
897
|
+
RUBY
|
898
|
+
|
899
|
+
assert_source <<~'RUBY'
|
900
|
+
m do
|
901
|
+
rescue
|
902
|
+
ensure
|
903
|
+
end
|
904
|
+
RUBY
|
905
|
+
|
906
|
+
assert_source <<~'RUBY'
|
907
|
+
m do
|
908
|
+
foo
|
909
|
+
rescue Exception => bar
|
910
|
+
bar
|
911
|
+
end
|
912
|
+
RUBY
|
913
|
+
|
914
|
+
assert_source <<~'RUBY'
|
915
|
+
m do
|
916
|
+
bar
|
917
|
+
rescue SomeError, *bar
|
918
|
+
baz
|
919
|
+
end
|
920
|
+
RUBY
|
921
|
+
|
922
|
+
assert_source <<~'RUBY'
|
923
|
+
m do
|
924
|
+
bar
|
925
|
+
rescue SomeError, *bar => exception
|
926
|
+
baz
|
927
|
+
end
|
928
|
+
RUBY
|
929
|
+
|
930
|
+
assert_source <<~'RUBY'
|
931
|
+
m do
|
932
|
+
bar
|
933
|
+
rescue *bar
|
934
|
+
baz
|
935
|
+
end
|
936
|
+
RUBY
|
937
|
+
|
938
|
+
assert_source <<~'RUBY'
|
939
|
+
m do
|
940
|
+
bar
|
941
|
+
rescue LoadError
|
942
|
+
end
|
943
|
+
RUBY
|
944
|
+
|
945
|
+
assert_source <<~'RUBY'
|
946
|
+
m do
|
947
|
+
bar
|
948
|
+
rescue
|
949
|
+
else
|
950
|
+
baz
|
951
|
+
end
|
952
|
+
RUBY
|
953
|
+
|
954
|
+
assert_source <<~'RUBY'
|
955
|
+
m do
|
956
|
+
bar
|
957
|
+
rescue *bar => exception
|
958
|
+
baz
|
959
|
+
end
|
960
|
+
RUBY
|
961
|
+
|
862
962
|
assert_source 'foo rescue bar'
|
863
963
|
assert_source 'foo rescue return bar'
|
864
964
|
assert_source 'x = (foo rescue return bar)'
|
865
965
|
|
866
966
|
%w(while until if).each do |keyword|
|
867
|
-
assert_source
|
967
|
+
assert_source <<~RUBY
|
868
968
|
#{keyword} (
|
869
969
|
foo rescue false
|
870
970
|
)
|
871
971
|
end
|
872
972
|
RUBY
|
873
973
|
|
874
|
-
assert_generates
|
974
|
+
assert_generates <<~RUBY, <<~GENERATED
|
875
975
|
foo rescue false #{keyword} true
|
876
976
|
RUBY
|
877
977
|
#{keyword} true
|
@@ -880,7 +980,7 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
880
980
|
GENERATED
|
881
981
|
end
|
882
982
|
|
883
|
-
assert_generates
|
983
|
+
assert_generates <<~'RUBY', <<~GENERATED
|
884
984
|
case (foo rescue false)
|
885
985
|
when true
|
886
986
|
end
|
@@ -902,31 +1002,31 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
902
1002
|
assert_source 'super(&block)'
|
903
1003
|
assert_source 'super(a, &block)'
|
904
1004
|
|
905
|
-
assert_source
|
1005
|
+
assert_source <<~'RUBY'
|
906
1006
|
super(a do
|
907
1007
|
foo
|
908
1008
|
end)
|
909
1009
|
RUBY
|
910
1010
|
|
911
|
-
assert_source
|
1011
|
+
assert_source <<~'RUBY'
|
912
1012
|
super do
|
913
1013
|
foo
|
914
1014
|
end
|
915
1015
|
RUBY
|
916
1016
|
|
917
|
-
assert_source
|
1017
|
+
assert_source <<~'RUBY'
|
918
1018
|
super(a) do
|
919
1019
|
foo
|
920
1020
|
end
|
921
1021
|
RUBY
|
922
1022
|
|
923
|
-
assert_source
|
1023
|
+
assert_source <<~'RUBY'
|
924
1024
|
super() do
|
925
1025
|
foo
|
926
1026
|
end
|
927
1027
|
RUBY
|
928
1028
|
|
929
|
-
assert_source
|
1029
|
+
assert_source <<~'RUBY'
|
930
1030
|
super(a, b) do
|
931
1031
|
foo
|
932
1032
|
end
|
@@ -940,7 +1040,7 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
940
1040
|
end
|
941
1041
|
|
942
1042
|
context 'BEGIN' do
|
943
|
-
assert_source
|
1043
|
+
assert_source <<~'RUBY'
|
944
1044
|
BEGIN {
|
945
1045
|
foo
|
946
1046
|
}
|
@@ -948,7 +1048,7 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
948
1048
|
end
|
949
1049
|
|
950
1050
|
context 'END' do
|
951
|
-
assert_source
|
1051
|
+
assert_source <<~'RUBY'
|
952
1052
|
END {
|
953
1053
|
foo
|
954
1054
|
}
|
@@ -956,11 +1056,11 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
956
1056
|
end
|
957
1057
|
|
958
1058
|
context 'alias' do
|
959
|
-
assert_source
|
1059
|
+
assert_source <<~'RUBY'
|
960
1060
|
alias $foo $bar
|
961
1061
|
RUBY
|
962
1062
|
|
963
|
-
assert_source
|
1063
|
+
assert_source <<~'RUBY'
|
964
1064
|
alias :foo :bar
|
965
1065
|
RUBY
|
966
1066
|
end
|
@@ -980,19 +1080,19 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
980
1080
|
end
|
981
1081
|
|
982
1082
|
context 'if statement' do
|
983
|
-
assert_source
|
1083
|
+
assert_source <<~'RUBY'
|
984
1084
|
if /foo/
|
985
1085
|
bar
|
986
1086
|
end
|
987
1087
|
RUBY
|
988
1088
|
|
989
|
-
assert_source
|
1089
|
+
assert_source <<~'RUBY'
|
990
1090
|
if 3
|
991
1091
|
9
|
992
1092
|
end
|
993
1093
|
RUBY
|
994
1094
|
|
995
|
-
assert_source
|
1095
|
+
assert_source <<~'RUBY'
|
996
1096
|
if 4
|
997
1097
|
5
|
998
1098
|
else
|
@@ -1000,32 +1100,32 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
1000
1100
|
end
|
1001
1101
|
RUBY
|
1002
1102
|
|
1003
|
-
assert_source
|
1103
|
+
assert_source <<~'RUBY'
|
1004
1104
|
unless 3
|
1005
1105
|
nil
|
1006
1106
|
end
|
1007
1107
|
RUBY
|
1008
1108
|
|
1009
|
-
assert_source
|
1109
|
+
assert_source <<~'RUBY'
|
1010
1110
|
unless 3
|
1011
1111
|
9
|
1012
1112
|
end
|
1013
1113
|
RUBY
|
1014
1114
|
|
1015
|
-
assert_source
|
1115
|
+
assert_source <<~'RUBY'
|
1016
1116
|
if foo
|
1017
1117
|
end
|
1018
1118
|
RUBY
|
1019
1119
|
|
1020
|
-
assert_source
|
1120
|
+
assert_source <<~'RUBY'
|
1021
1121
|
foo = bar if foo
|
1022
1122
|
RUBY
|
1023
1123
|
|
1024
|
-
assert_source
|
1124
|
+
assert_source <<~'RUBY'
|
1025
1125
|
foo = bar unless foo
|
1026
1126
|
RUBY
|
1027
1127
|
|
1028
|
-
assert_source
|
1128
|
+
assert_source <<~'RUBY'
|
1029
1129
|
def foo(*foo)
|
1030
1130
|
unless foo
|
1031
1131
|
foo = bar
|
@@ -1033,7 +1133,7 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
1033
1133
|
end
|
1034
1134
|
RUBY
|
1035
1135
|
|
1036
|
-
assert_source
|
1136
|
+
assert_source <<~'RUBY'
|
1037
1137
|
each do |foo|
|
1038
1138
|
unless foo
|
1039
1139
|
foo = bar
|
@@ -1045,18 +1145,18 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
1045
1145
|
context 'def' do
|
1046
1146
|
context 'on instance' do
|
1047
1147
|
|
1048
|
-
assert_source
|
1148
|
+
assert_source <<~'RUBY'
|
1049
1149
|
def foo
|
1050
1150
|
end
|
1051
1151
|
RUBY
|
1052
1152
|
|
1053
|
-
assert_source
|
1153
|
+
assert_source <<~'RUBY'
|
1054
1154
|
def foo
|
1055
1155
|
bar
|
1056
1156
|
end
|
1057
1157
|
RUBY
|
1058
1158
|
|
1059
|
-
assert_source
|
1159
|
+
assert_source <<~'RUBY'
|
1060
1160
|
def foo
|
1061
1161
|
foo
|
1062
1162
|
rescue
|
@@ -1066,7 +1166,7 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
1066
1166
|
end
|
1067
1167
|
RUBY
|
1068
1168
|
|
1069
|
-
assert_source
|
1169
|
+
assert_source <<~'RUBY'
|
1070
1170
|
begin
|
1071
1171
|
foo
|
1072
1172
|
ensure
|
@@ -1074,7 +1174,7 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
1074
1174
|
end
|
1075
1175
|
RUBY
|
1076
1176
|
|
1077
|
-
assert_source
|
1177
|
+
assert_source <<~'RUBY'
|
1078
1178
|
def foo
|
1079
1179
|
bar
|
1080
1180
|
ensure
|
@@ -1082,7 +1182,7 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
1082
1182
|
end
|
1083
1183
|
RUBY
|
1084
1184
|
|
1085
|
-
assert_source
|
1185
|
+
assert_source <<~'RUBY'
|
1086
1186
|
def self.foo
|
1087
1187
|
bar
|
1088
1188
|
rescue
|
@@ -1090,7 +1190,7 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
1090
1190
|
end
|
1091
1191
|
RUBY
|
1092
1192
|
|
1093
|
-
assert_source
|
1193
|
+
assert_source <<~'RUBY'
|
1094
1194
|
def foo
|
1095
1195
|
bar
|
1096
1196
|
rescue
|
@@ -1098,134 +1198,134 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
1098
1198
|
end
|
1099
1199
|
RUBY
|
1100
1200
|
|
1101
|
-
assert_source
|
1201
|
+
assert_source <<~'RUBY'
|
1102
1202
|
def foo(bar)
|
1103
1203
|
bar
|
1104
1204
|
end
|
1105
1205
|
RUBY
|
1106
1206
|
|
1107
|
-
assert_source
|
1207
|
+
assert_source <<~'RUBY'
|
1108
1208
|
def foo(bar, baz)
|
1109
1209
|
bar
|
1110
1210
|
end
|
1111
1211
|
RUBY
|
1112
1212
|
|
1113
|
-
assert_source
|
1213
|
+
assert_source <<~'RUBY'
|
1114
1214
|
def foo(bar = ())
|
1115
1215
|
bar
|
1116
1216
|
end
|
1117
1217
|
RUBY
|
1118
1218
|
|
1119
|
-
assert_source
|
1219
|
+
assert_source <<~'RUBY'
|
1120
1220
|
def foo(bar = (baz
|
1121
1221
|
nil))
|
1122
1222
|
end
|
1123
1223
|
RUBY
|
1124
1224
|
|
1125
|
-
assert_source
|
1225
|
+
assert_source <<~'RUBY'
|
1126
1226
|
def foo(bar = true)
|
1127
1227
|
bar
|
1128
1228
|
end
|
1129
1229
|
RUBY
|
1130
1230
|
|
1131
|
-
assert_source
|
1231
|
+
assert_source <<~'RUBY'
|
1132
1232
|
def foo(bar, baz = true)
|
1133
1233
|
bar
|
1134
1234
|
end
|
1135
1235
|
RUBY
|
1136
1236
|
|
1137
|
-
assert_source
|
1237
|
+
assert_source <<~'RUBY'
|
1138
1238
|
def foo(bar: 1)
|
1139
1239
|
end
|
1140
1240
|
RUBY
|
1141
1241
|
|
1142
|
-
assert_source
|
1242
|
+
assert_source <<~'RUBY'
|
1143
1243
|
def foo(*)
|
1144
1244
|
bar
|
1145
1245
|
end
|
1146
1246
|
RUBY
|
1147
1247
|
|
1148
|
-
assert_source
|
1248
|
+
assert_source <<~'RUBY'
|
1149
1249
|
def foo(*bar)
|
1150
1250
|
bar
|
1151
1251
|
end
|
1152
1252
|
RUBY
|
1153
1253
|
|
1154
|
-
assert_source
|
1254
|
+
assert_source <<~'RUBY'
|
1155
1255
|
def foo(bar, *baz)
|
1156
1256
|
bar
|
1157
1257
|
end
|
1158
1258
|
RUBY
|
1159
1259
|
|
1160
|
-
assert_source
|
1260
|
+
assert_source <<~'RUBY'
|
1161
1261
|
def foo(baz = true, *bor)
|
1162
1262
|
bar
|
1163
1263
|
end
|
1164
1264
|
RUBY
|
1165
1265
|
|
1166
|
-
assert_source
|
1266
|
+
assert_source <<~'RUBY'
|
1167
1267
|
def foo(baz = true, *bor, &block)
|
1168
1268
|
bar
|
1169
1269
|
end
|
1170
1270
|
RUBY
|
1171
1271
|
|
1172
|
-
assert_source
|
1272
|
+
assert_source <<~'RUBY'
|
1173
1273
|
def foo(bar, baz = true, *bor)
|
1174
1274
|
bar
|
1175
1275
|
end
|
1176
1276
|
RUBY
|
1177
1277
|
|
1178
|
-
assert_source
|
1278
|
+
assert_source <<~'RUBY'
|
1179
1279
|
def foo(&block)
|
1180
1280
|
bar
|
1181
1281
|
end
|
1182
1282
|
RUBY
|
1183
1283
|
|
1184
|
-
assert_source
|
1284
|
+
assert_source <<~'RUBY'
|
1185
1285
|
def foo(bar, &block)
|
1186
1286
|
bar
|
1187
1287
|
end
|
1188
1288
|
RUBY
|
1189
1289
|
|
1190
|
-
assert_source
|
1290
|
+
assert_source <<~'RUBY'
|
1191
1291
|
def foo
|
1192
1292
|
bar
|
1193
1293
|
baz
|
1194
1294
|
end
|
1195
1295
|
RUBY
|
1196
1296
|
|
1197
|
-
assert_source
|
1297
|
+
assert_source <<~'RUBY'
|
1198
1298
|
def (foo do |bar|
|
1199
1299
|
end).bar
|
1200
1300
|
bar
|
1201
1301
|
end
|
1202
1302
|
RUBY
|
1203
1303
|
|
1204
|
-
assert_source
|
1304
|
+
assert_source <<~'RUBY'
|
1205
1305
|
def (foo(1)).bar
|
1206
1306
|
bar
|
1207
1307
|
end
|
1208
1308
|
RUBY
|
1209
1309
|
|
1210
|
-
assert_source
|
1310
|
+
assert_source <<~'RUBY'
|
1211
1311
|
def (Foo::Bar.baz).bar
|
1212
1312
|
baz
|
1213
1313
|
end
|
1214
1314
|
RUBY
|
1215
1315
|
|
1216
|
-
assert_source
|
1316
|
+
assert_source <<~'RUBY'
|
1217
1317
|
def (Foo::Bar).bar
|
1218
1318
|
baz
|
1219
1319
|
end
|
1220
1320
|
RUBY
|
1221
1321
|
|
1222
|
-
assert_source
|
1322
|
+
assert_source <<~'RUBY'
|
1223
1323
|
def Foo.bar
|
1224
1324
|
baz
|
1225
1325
|
end
|
1226
1326
|
RUBY
|
1227
1327
|
|
1228
|
-
assert_source
|
1328
|
+
assert_source <<~'RUBY'
|
1229
1329
|
def foo.bar
|
1230
1330
|
baz
|
1231
1331
|
end
|
@@ -1233,25 +1333,25 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
1233
1333
|
end
|
1234
1334
|
|
1235
1335
|
context 'on singleton' do
|
1236
|
-
assert_source
|
1336
|
+
assert_source <<~'RUBY'
|
1237
1337
|
def self.foo
|
1238
1338
|
end
|
1239
1339
|
RUBY
|
1240
1340
|
|
1241
|
-
assert_source
|
1341
|
+
assert_source <<~'RUBY'
|
1242
1342
|
def self.foo
|
1243
1343
|
bar
|
1244
1344
|
end
|
1245
1345
|
RUBY
|
1246
1346
|
|
1247
|
-
assert_source
|
1347
|
+
assert_source <<~'RUBY'
|
1248
1348
|
def self.foo
|
1249
1349
|
bar
|
1250
1350
|
baz
|
1251
1351
|
end
|
1252
1352
|
RUBY
|
1253
1353
|
|
1254
|
-
assert_source
|
1354
|
+
assert_source <<~'RUBY'
|
1255
1355
|
def Foo.bar
|
1256
1356
|
bar
|
1257
1357
|
end
|
@@ -1260,43 +1360,43 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
1260
1360
|
end
|
1261
1361
|
|
1262
1362
|
context 'class' do
|
1263
|
-
assert_source
|
1363
|
+
assert_source <<~'RUBY'
|
1264
1364
|
class TestClass
|
1265
1365
|
end
|
1266
1366
|
RUBY
|
1267
1367
|
|
1268
|
-
assert_source
|
1368
|
+
assert_source <<~'RUBY'
|
1269
1369
|
class << some_object
|
1270
1370
|
end
|
1271
1371
|
RUBY
|
1272
1372
|
|
1273
|
-
assert_source
|
1373
|
+
assert_source <<~'RUBY'
|
1274
1374
|
class << some_object
|
1275
1375
|
the_body
|
1276
1376
|
end
|
1277
1377
|
RUBY
|
1278
1378
|
|
1279
|
-
assert_source
|
1379
|
+
assert_source <<~'RUBY'
|
1280
1380
|
class SomeNameSpace::TestClass
|
1281
1381
|
end
|
1282
1382
|
RUBY
|
1283
1383
|
|
1284
|
-
assert_source
|
1384
|
+
assert_source <<~'RUBY'
|
1285
1385
|
class Some::Name::Space::TestClass
|
1286
1386
|
end
|
1287
1387
|
RUBY
|
1288
1388
|
|
1289
|
-
assert_source
|
1389
|
+
assert_source <<~'RUBY'
|
1290
1390
|
class TestClass < Object
|
1291
1391
|
end
|
1292
1392
|
RUBY
|
1293
1393
|
|
1294
|
-
assert_source
|
1394
|
+
assert_source <<~'RUBY'
|
1295
1395
|
class TestClass < SomeNameSpace::Object
|
1296
1396
|
end
|
1297
1397
|
RUBY
|
1298
1398
|
|
1299
|
-
assert_source
|
1399
|
+
assert_source <<~'RUBY'
|
1300
1400
|
class TestClass
|
1301
1401
|
def foo
|
1302
1402
|
:bar
|
@@ -1304,7 +1404,7 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
1304
1404
|
end
|
1305
1405
|
RUBY
|
1306
1406
|
|
1307
|
-
assert_source
|
1407
|
+
assert_source <<~'RUBY'
|
1308
1408
|
class ::TestClass
|
1309
1409
|
end
|
1310
1410
|
RUBY
|
@@ -1312,22 +1412,22 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
1312
1412
|
|
1313
1413
|
context 'module' do
|
1314
1414
|
|
1315
|
-
assert_source
|
1415
|
+
assert_source <<~'RUBY'
|
1316
1416
|
module TestModule
|
1317
1417
|
end
|
1318
1418
|
RUBY
|
1319
1419
|
|
1320
|
-
assert_source
|
1420
|
+
assert_source <<~'RUBY'
|
1321
1421
|
module SomeNameSpace::TestModule
|
1322
1422
|
end
|
1323
1423
|
RUBY
|
1324
1424
|
|
1325
|
-
assert_source
|
1425
|
+
assert_source <<~'RUBY'
|
1326
1426
|
module Some::Name::Space::TestModule
|
1327
1427
|
end
|
1328
1428
|
RUBY
|
1329
1429
|
|
1330
|
-
assert_source
|
1430
|
+
assert_source <<~'RUBY'
|
1331
1431
|
module TestModule
|
1332
1432
|
def foo
|
1333
1433
|
:bar
|
@@ -1351,7 +1451,10 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
1351
1451
|
assert_source 'foo[a, b] = value'
|
1352
1452
|
assert_source 'foo[1..2] = value'
|
1353
1453
|
assert_source 'foo.[]=()'
|
1454
|
+
assert_source 'foo.[]=true'
|
1455
|
+
assert_source 'foo.[]=(1, 2)'
|
1354
1456
|
assert_source 'foo[] = 1'
|
1457
|
+
assert_unterminated 'foo[] = 1'
|
1355
1458
|
|
1356
1459
|
%w(+ - * / % & | || &&).each do |operator|
|
1357
1460
|
context "with #{operator}" do
|
@@ -1362,31 +1465,46 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
1362
1465
|
end
|
1363
1466
|
|
1364
1467
|
context 'defined?' do
|
1365
|
-
assert_source
|
1468
|
+
assert_source <<~'RUBY'
|
1366
1469
|
defined?(@foo)
|
1367
1470
|
RUBY
|
1368
1471
|
|
1369
|
-
assert_source
|
1472
|
+
assert_source <<~'RUBY'
|
1370
1473
|
defined?(Foo)
|
1371
1474
|
RUBY
|
1372
1475
|
|
1373
|
-
assert_source
|
1476
|
+
assert_source <<~'RUBY'
|
1374
1477
|
defined?((a, b = [1, 2]))
|
1375
1478
|
RUBY
|
1376
1479
|
end
|
1377
1480
|
end
|
1378
1481
|
|
1379
1482
|
context 'lambda' do
|
1380
|
-
assert_source
|
1483
|
+
assert_source <<~'RUBY'
|
1381
1484
|
lambda do
|
1382
1485
|
end
|
1383
1486
|
RUBY
|
1384
1487
|
|
1385
|
-
assert_source
|
1488
|
+
assert_source <<~'RUBY'
|
1386
1489
|
lambda do |a, b|
|
1387
1490
|
a
|
1388
1491
|
end
|
1389
1492
|
RUBY
|
1493
|
+
|
1494
|
+
assert_source <<~'RUBY'
|
1495
|
+
->() do
|
1496
|
+
end
|
1497
|
+
RUBY
|
1498
|
+
|
1499
|
+
assert_source <<~'RUBY'
|
1500
|
+
->(a) do
|
1501
|
+
end
|
1502
|
+
RUBY
|
1503
|
+
|
1504
|
+
assert_source <<~'RUBY'
|
1505
|
+
->(a, b) do
|
1506
|
+
end
|
1507
|
+
RUBY
|
1390
1508
|
end
|
1391
1509
|
|
1392
1510
|
context 'match operators' do
|
@@ -1450,7 +1568,7 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
1450
1568
|
|
1451
1569
|
context 'flip flops' do
|
1452
1570
|
context 'inclusive' do
|
1453
|
-
assert_source
|
1571
|
+
assert_source <<~'RUBY'
|
1454
1572
|
if ((i == 4)..(i == 4))
|
1455
1573
|
foo
|
1456
1574
|
end
|
@@ -1458,7 +1576,7 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
1458
1576
|
end
|
1459
1577
|
|
1460
1578
|
context 'exclusive' do
|
1461
|
-
assert_source
|
1579
|
+
assert_source <<~'RUBY'
|
1462
1580
|
if ((i == 4)...(i == 4))
|
1463
1581
|
foo
|
1464
1582
|
end
|
@@ -1467,7 +1585,7 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
1467
1585
|
end
|
1468
1586
|
|
1469
1587
|
context 'case statement' do
|
1470
|
-
assert_source
|
1588
|
+
assert_source <<~'RUBY'
|
1471
1589
|
case
|
1472
1590
|
when bar
|
1473
1591
|
baz
|
@@ -1476,7 +1594,7 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
1476
1594
|
end
|
1477
1595
|
RUBY
|
1478
1596
|
|
1479
|
-
assert_source
|
1597
|
+
assert_source <<~'RUBY'
|
1480
1598
|
case foo
|
1481
1599
|
when bar
|
1482
1600
|
when baz
|
@@ -1484,7 +1602,7 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
1484
1602
|
end
|
1485
1603
|
RUBY
|
1486
1604
|
|
1487
|
-
assert_source
|
1605
|
+
assert_source <<~'RUBY'
|
1488
1606
|
case foo
|
1489
1607
|
when bar
|
1490
1608
|
baz
|
@@ -1493,21 +1611,21 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
1493
1611
|
end
|
1494
1612
|
RUBY
|
1495
1613
|
|
1496
|
-
assert_source
|
1614
|
+
assert_source <<~'RUBY'
|
1497
1615
|
case foo
|
1498
1616
|
when bar, baz
|
1499
1617
|
:other
|
1500
1618
|
end
|
1501
1619
|
RUBY
|
1502
1620
|
|
1503
|
-
assert_source
|
1621
|
+
assert_source <<~'RUBY'
|
1504
1622
|
case foo
|
1505
1623
|
when *bar
|
1506
1624
|
:value
|
1507
1625
|
end
|
1508
1626
|
RUBY
|
1509
1627
|
|
1510
|
-
assert_source
|
1628
|
+
assert_source <<~'RUBY'
|
1511
1629
|
case foo
|
1512
1630
|
when bar
|
1513
1631
|
baz
|
@@ -1518,24 +1636,24 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
1518
1636
|
end
|
1519
1637
|
|
1520
1638
|
context 'for' do
|
1521
|
-
assert_source
|
1639
|
+
assert_source <<~'RUBY'
|
1522
1640
|
bar(for a in bar do
|
1523
1641
|
baz
|
1524
1642
|
end)
|
1525
1643
|
RUBY
|
1526
|
-
assert_source
|
1644
|
+
assert_source <<~'RUBY'
|
1527
1645
|
for a in bar do
|
1528
1646
|
baz
|
1529
1647
|
end
|
1530
1648
|
RUBY
|
1531
1649
|
|
1532
|
-
assert_source
|
1650
|
+
assert_source <<~'RUBY'
|
1533
1651
|
for a, *b in bar do
|
1534
1652
|
baz
|
1535
1653
|
end
|
1536
1654
|
RUBY
|
1537
1655
|
|
1538
|
-
assert_source
|
1656
|
+
assert_source <<~'RUBY'
|
1539
1657
|
for a, b in bar do
|
1540
1658
|
baz
|
1541
1659
|
end
|
@@ -1554,7 +1672,7 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
1554
1672
|
end
|
1555
1673
|
|
1556
1674
|
context 'loop' do
|
1557
|
-
assert_source
|
1675
|
+
assert_source <<~'RUBY'
|
1558
1676
|
loop do
|
1559
1677
|
foo
|
1560
1678
|
end
|
@@ -1562,26 +1680,26 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
1562
1680
|
end
|
1563
1681
|
|
1564
1682
|
context 'post conditions' do
|
1565
|
-
assert_source
|
1683
|
+
assert_source <<~'RUBY'
|
1566
1684
|
x = (begin
|
1567
1685
|
foo
|
1568
1686
|
end while baz)
|
1569
1687
|
RUBY
|
1570
1688
|
|
1571
|
-
assert_source
|
1689
|
+
assert_source <<~'RUBY'
|
1572
1690
|
begin
|
1573
1691
|
foo
|
1574
1692
|
end while baz
|
1575
1693
|
RUBY
|
1576
1694
|
|
1577
|
-
assert_source
|
1695
|
+
assert_source <<~'RUBY'
|
1578
1696
|
begin
|
1579
1697
|
foo
|
1580
1698
|
bar
|
1581
1699
|
end until baz
|
1582
1700
|
RUBY
|
1583
1701
|
|
1584
|
-
assert_source
|
1702
|
+
assert_source <<~'RUBY'
|
1585
1703
|
begin
|
1586
1704
|
foo
|
1587
1705
|
bar
|
@@ -1590,18 +1708,18 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
1590
1708
|
end
|
1591
1709
|
|
1592
1710
|
context 'while' do
|
1593
|
-
assert_source
|
1711
|
+
assert_source <<~'RUBY'
|
1594
1712
|
while false
|
1595
1713
|
end
|
1596
1714
|
RUBY
|
1597
1715
|
|
1598
|
-
assert_source
|
1716
|
+
assert_source <<~'RUBY'
|
1599
1717
|
while false
|
1600
1718
|
3
|
1601
1719
|
end
|
1602
1720
|
RUBY
|
1603
1721
|
|
1604
|
-
assert_source
|
1722
|
+
assert_source <<~'RUBY'
|
1605
1723
|
while (foo do
|
1606
1724
|
end)
|
1607
1725
|
:body
|
@@ -1610,18 +1728,18 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
1610
1728
|
end
|
1611
1729
|
|
1612
1730
|
context 'until' do
|
1613
|
-
assert_source
|
1731
|
+
assert_source <<~'RUBY'
|
1614
1732
|
until false
|
1615
1733
|
end
|
1616
1734
|
RUBY
|
1617
1735
|
|
1618
|
-
assert_source
|
1736
|
+
assert_source <<~'RUBY'
|
1619
1737
|
until false
|
1620
1738
|
3
|
1621
1739
|
end
|
1622
1740
|
RUBY
|
1623
1741
|
|
1624
|
-
assert_source
|
1742
|
+
assert_source <<~'RUBY'
|
1625
1743
|
until (foo do
|
1626
1744
|
end)
|
1627
1745
|
:body
|
@@ -1629,16 +1747,16 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
1629
1747
|
RUBY
|
1630
1748
|
end
|
1631
1749
|
|
1632
|
-
assert_source
|
1750
|
+
assert_source <<~'RUBY'
|
1633
1751
|
# comment before
|
1634
1752
|
a_line_of_code
|
1635
1753
|
RUBY
|
1636
1754
|
|
1637
|
-
assert_source
|
1755
|
+
assert_source <<~'RUBY'
|
1638
1756
|
a_line_of_code # comment after
|
1639
1757
|
RUBY
|
1640
1758
|
|
1641
|
-
assert_source
|
1759
|
+
assert_source <<~'RUBY'
|
1642
1760
|
nested do # first
|
1643
1761
|
# second
|
1644
1762
|
something # comment
|
@@ -1647,7 +1765,7 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
1647
1765
|
# last
|
1648
1766
|
RUBY
|
1649
1767
|
|
1650
|
-
assert_generates
|
1768
|
+
assert_generates <<~'RUBY', <<~'RUBY'
|
1651
1769
|
foo if bar
|
1652
1770
|
# comment
|
1653
1771
|
RUBY
|
@@ -1657,13 +1775,13 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
1657
1775
|
# comment
|
1658
1776
|
RUBY
|
1659
1777
|
|
1660
|
-
assert_source
|
1778
|
+
assert_source <<~'RUBY'
|
1661
1779
|
def noop
|
1662
1780
|
# do nothing
|
1663
1781
|
end
|
1664
1782
|
RUBY
|
1665
1783
|
|
1666
|
-
assert_source
|
1784
|
+
assert_source <<~'RUBY'
|
1667
1785
|
=begin
|
1668
1786
|
block comment
|
1669
1787
|
=end
|
@@ -1678,14 +1796,14 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
1678
1796
|
end
|
1679
1797
|
RUBY
|
1680
1798
|
|
1681
|
-
assert_generates(
|
1799
|
+
assert_generates(<<~'RUBY', <<~'RUBY')
|
1682
1800
|
1 + # first
|
1683
1801
|
2 # second
|
1684
1802
|
RUBY
|
1685
1803
|
1 + 2 # first # second
|
1686
1804
|
RUBY
|
1687
1805
|
|
1688
|
-
assert_generates(
|
1806
|
+
assert_generates(<<~'RUBY', <<~'RUBY')
|
1689
1807
|
1 +
|
1690
1808
|
# first
|
1691
1809
|
2 # second
|
@@ -1693,7 +1811,7 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
1693
1811
|
1 + 2 # first # second
|
1694
1812
|
RUBY
|
1695
1813
|
|
1696
|
-
assert_generates(
|
1814
|
+
assert_generates(<<~'RUBY', <<~'RUBY')
|
1697
1815
|
1 +
|
1698
1816
|
=begin
|
1699
1817
|
block comment
|
@@ -1705,6 +1823,5 @@ describe Unparser, mutant_expression: 'Unparser::Emitter*' do
|
|
1705
1823
|
block comment
|
1706
1824
|
=end
|
1707
1825
|
RUBY
|
1708
|
-
|
1709
1826
|
end
|
1710
1827
|
end
|