unparser 0.0.16 → 0.0.18

Sign up to get free protection for your applications and to get access to all the features.
data/unparser.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'unparser'
5
- s.version = '0.0.16'
5
+ s.version = '0.0.18'
6
6
 
7
7
  s.authors = ['Markus Schirp']
8
8
  s.email = 'mbj@schir-dso.com'
@@ -18,8 +18,8 @@ Gem::Specification.new do |s|
18
18
  s.executables = [ 'test-unparser' ]
19
19
 
20
20
  s.add_dependency('parser', '~> 2.0.0.pre6')
21
- s.add_dependency('concord', '~> 0.1.1')
22
- s.add_dependency('adamantium', '~> 0.0.10')
23
- s.add_dependency('equalizer', '~> 0.0.5')
24
- s.add_dependency('abstract_type', '~> 0.0.5')
21
+ s.add_dependency('concord', '~> 0.1.1' )
22
+ s.add_dependency('adamantium', '~> 0.1.0' )
23
+ s.add_dependency('equalizer', '~> 0.0.7' )
24
+ s.add_dependency('abstract_type', '~> 0.0.6' )
25
25
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unparser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.16
4
+ version: 0.0.18
5
5
  platform: ruby
6
6
  authors:
7
7
  - Markus Schirp
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-21 00:00:00.000000000 Z
11
+ date: 2013-09-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parser
@@ -44,42 +44,42 @@ dependencies:
44
44
  requirements:
45
45
  - - ~>
46
46
  - !ruby/object:Gem::Version
47
- version: 0.0.10
47
+ version: 0.1.0
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ~>
53
53
  - !ruby/object:Gem::Version
54
- version: 0.0.10
54
+ version: 0.1.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: equalizer
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ~>
60
60
  - !ruby/object:Gem::Version
61
- version: 0.0.5
61
+ version: 0.0.7
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - ~>
67
67
  - !ruby/object:Gem::Version
68
- version: 0.0.5
68
+ version: 0.0.7
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: abstract_type
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - ~>
74
74
  - !ruby/object:Gem::Version
75
- version: 0.0.5
75
+ version: 0.0.6
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - ~>
81
81
  - !ruby/object:Gem::Version
82
- version: 0.0.5
82
+ version: 0.0.6
83
83
  description: Generate equivalent source for parser gem AST nodes
84
84
  email: mbj@schir-dso.com
85
85
  executables:
@@ -160,7 +160,6 @@ files:
160
160
  - lib/unparser/emitter/variable.rb
161
161
  - lib/unparser/emitter/yield.rb
162
162
  - lib/unparser/finalize.rb
163
- - spec/integration/unparser/spike_spec.rb
164
163
  - spec/spec_helper.rb
165
164
  - spec/unit/unparser/buffer/append_spec.rb
166
165
  - spec/unit/unparser/buffer/content_spec.rb
@@ -171,6 +170,7 @@ files:
171
170
  - spec/unit/unparser/emitter/class_methods/handle_spec.rb
172
171
  - spec/unit/unparser/emitter/class_methods/visit_spec.rb
173
172
  - spec/unit/unparser/emitter/source_map/class_methods/emit_spec.rb
173
+ - spec/unit/unparser_spec.rb
174
174
  - unparser.gemspec
175
175
  homepage: http://github.com/mbj/unparser
176
176
  licenses:
@@ -197,7 +197,6 @@ signing_key:
197
197
  specification_version: 4
198
198
  summary: Generate equivalent source for parser gem AST nodes
199
199
  test_files:
200
- - spec/integration/unparser/spike_spec.rb
201
200
  - spec/spec_helper.rb
202
201
  - spec/unit/unparser/buffer/append_spec.rb
203
202
  - spec/unit/unparser/buffer/content_spec.rb
@@ -208,4 +207,5 @@ test_files:
208
207
  - spec/unit/unparser/emitter/class_methods/handle_spec.rb
209
208
  - spec/unit/unparser/emitter/class_methods/visit_spec.rb
210
209
  - spec/unit/unparser/emitter/source_map/class_methods/emit_spec.rb
210
+ - spec/unit/unparser_spec.rb
211
211
  has_rdoc:
@@ -1,1091 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Unparser, 'spike' do
4
-
5
-
6
- PARSERS = IceNine.deep_freeze(
7
- '1.8' => Parser::Ruby18,
8
- '1.9' => Parser::Ruby19,
9
- '2.0' => Parser::Ruby20,
10
- '2.1' => Parser::Ruby21
11
- )
12
-
13
- RUBIES = PARSERS.keys.freeze
14
-
15
- def self.parser_for_ruby_version(version)
16
- PARSERS.fetch(version) do
17
- raise "Unrecognized Ruby version #{version}"
18
- end
19
- end
20
-
21
- def self.with_versions(versions)
22
- versions.each do |version|
23
- parser = parser_for_ruby_version(version)
24
- yield version, parser
25
- end
26
- end
27
-
28
- def self.strip(ruby)
29
- lines = ruby.lines
30
- line = lines.first
31
- match = /\A[ ]*/.match(line)
32
- length = match[0].length
33
- source = lines.map do |line|
34
- line[(length..-1)]
35
- end.join
36
- source.chomp
37
- end
38
-
39
- def assert_round_trip(input, parser)
40
- ast = parser.parse(input)
41
- generated = Unparser.unparse(ast)
42
- generated.should eql(input)
43
- end
44
-
45
- def self.assert_generates_one_way(ast, expected, versions = RUBIES)
46
- with_versions(versions) do |version, parser|
47
- it "should generate #{ast.inspect} as #{expected} under #{version}" do
48
- if ast.kind_of?(String)
49
- ast = parser.parse(ast)
50
- end
51
- generated = Unparser.unparse(ast)
52
- generated.should eql(expected)
53
- end
54
- end
55
- end
56
-
57
- def self.assert_generates(ast, expected, versions = RUBIES)
58
- with_versions(versions) do |version, parser|
59
- it "should generate #{ast.inspect} as #{expected} under #{version}" do
60
- if ast.kind_of?(String)
61
- ast = parser.parse(ast)
62
- end
63
- generated = Unparser.unparse(ast)
64
- generated.should eql(expected)
65
- ast = parser.parse(generated)
66
- Unparser.unparse(ast).should eql(expected)
67
- end
68
- end
69
- end
70
-
71
- def self.assert_round_trip(input, versions = RUBIES)
72
- with_versions(versions) do |version, parser|
73
- it "should round trip #{input.inspect} under #{version}" do
74
- assert_round_trip(input, parser)
75
- end
76
- end
77
- end
78
-
79
- def self.assert_source(input, versions = RUBIES)
80
- assert_round_trip(strip(input), versions)
81
- end
82
-
83
- context 'literal' do
84
- context 'fixnum' do
85
- assert_generates s(:int, 1), '1'
86
- assert_generates s(:int, -1), '-1'
87
- assert_source '1'
88
- assert_generates '0x1', '1'
89
- assert_generates '1_000', '1000'
90
- assert_generates '1e10', '10000000000.0'
91
- assert_generates '?c', '"c"', RUBIES - %w(1.8)
92
- assert_generates '?c', '99', %w(1.8)
93
- end
94
-
95
- context 'string' do
96
- assert_generates %q("foo" "bar"), %q("foobar")
97
- assert_generates %q(%Q(foo"#{@bar})), %q("foo\"#{@bar}")
98
- assert_source %q("\"")
99
- assert_source %q("foo#{1}bar")
100
- assert_source %q("\"#{@a}")
101
- end
102
-
103
- context 'execute string' do
104
- assert_source '`foo`'
105
- assert_source '`foo#{@bar}`'
106
- assert_generates '%x(\))', '`)`'
107
- #assert_generates '%x(`)', '`\``'
108
- assert_source '`"`'
109
- end
110
-
111
- context 'symbol' do
112
- assert_generates s(:sym, :foo), ':foo'
113
- assert_generates s(:sym, :"A B"), ':"A B"'
114
- assert_source ':foo'
115
- assert_source ':"A B"'
116
- assert_source ':"A\"B"'
117
- end
118
-
119
- context 'regexp' do
120
- assert_source '/foo/'
121
- assert_source %q(/[^-+',.\/:@[:alnum:]\[\]\x80-\xff]+/)
122
- assert_source '/foo#{@bar}/'
123
- assert_source '/foo#{@bar}/imx'
124
- assert_source "/\n/"
125
- assert_source '/\n/'
126
- assert_source "/\n/x"
127
- assert_generates '%r(/)', '/\//'
128
- assert_generates '%r(\))', '/)/'
129
- assert_generates '%r(#{@bar}baz)', '/#{@bar}baz/'
130
- end
131
-
132
- context 'dynamic string' do
133
- assert_source %q("foo#{@bar}")
134
- assert_source %q("fo\no#{bar}b\naz")
135
- end
136
-
137
- context 'dynamic symbol' do
138
- assert_source ':"foo#{bar}baz"'
139
- assert_source ':"fo\no#{bar}b\naz"'
140
- assert_source ':"#{bar}foo"'
141
- assert_source ':"foo#{bar}"'
142
- end
143
-
144
- context 'irange' do
145
- assert_generates '1..2', %q(1..2)
146
- assert_source '(0.0 / 0.0)..1'
147
- assert_source '1..(0.0 / 0.0)'
148
- end
149
-
150
- context 'erange' do
151
- assert_generates '1...2', %q(1...2)
152
- end
153
-
154
- context 'float' do
155
- assert_source '-0.1'
156
- assert_source '0.1'
157
- assert_generates s(:float, -0.1), '-0.1'
158
- assert_generates s(:float, 0.1), '0.1'
159
- end
160
-
161
- context 'array' do
162
- assert_source '[1, 2]'
163
- assert_source '[1]'
164
- assert_source '[]'
165
- assert_source '[1, *@foo]'
166
- assert_source '[*@foo, 1]', RUBIES - %w(1.8)
167
- assert_source '[*@foo, *@baz]', RUBIES - %w(1.8)
168
- assert_generates '%w(foo bar)', %q(["foo", "bar"])
169
- end
170
-
171
- context 'hash' do
172
- assert_source '{}'
173
- assert_source '{1 => 2}'
174
- assert_source '{1 => 2, 3 => 4}'
175
- end
176
- end
177
-
178
- context 'access' do
179
- assert_source '@a'
180
- assert_source '@@a'
181
- assert_source '$a'
182
- assert_source '$1'
183
- assert_source '$`'
184
- assert_source 'CONST'
185
- assert_source 'SCOPED::CONST'
186
- assert_source '::TOPLEVEL'
187
- assert_source '::TOPLEVEL::CONST'
188
- end
189
-
190
- context 'break' do
191
- assert_source 'break'
192
- assert_source 'break(a)'
193
- end
194
-
195
- context 'next' do
196
- assert_source 'next'
197
- assert_source 'next(bar)'
198
- end
199
-
200
- context 'retry' do
201
- assert_source 'retry'
202
- end
203
-
204
- context 'redo' do
205
- assert_source 'redo'
206
- end
207
-
208
- context 'singletons' do
209
- assert_source 'self'
210
- assert_source 'true'
211
- assert_source 'false'
212
- assert_source 'nil'
213
- end
214
-
215
- context 'magic keywords' do
216
- assert_generates '__ENCODING__', 'Encoding::UTF_8', RUBIES - %w(1.8)
217
- assert_source '__FILE__'
218
- assert_source '__LINE__'
219
- end
220
-
221
- context 'assignment' do
222
- context 'single' do
223
- assert_source 'a = 1'
224
- assert_source '@a = 1'
225
- assert_source '@@a = 1'
226
- assert_source '$a = 1'
227
- assert_source 'CONST = 1'
228
- end
229
-
230
- context 'multiple' do
231
- assert_source 'a, b = 1, 2'
232
- assert_source 'a, *foo = 1, 2'
233
- assert_source 'a, * = 1, 2'
234
- assert_source '*foo = 1, 2'
235
- assert_source '@a, @b = 1, 2'
236
- assert_source 'a.foo, a.bar = 1, 2'
237
- assert_source 'a[0, 2]'
238
- assert_source 'a[0], a[1] = 1, 2'
239
- assert_source 'a[*foo], a[1] = 1, 2'
240
- assert_source '@@a, @@b = 1, 2'
241
- assert_source '$a, $b = 1, 2'
242
- assert_source 'a, b = foo'
243
- assert_source 'a, (b, c) = 1, [2, 3]'
244
- assert_generates_one_way s(:mlhs, s(:lvasgn, :a), s(:lvasgn, :b)), 'a, b'
245
- end
246
- end
247
-
248
- context 'return' do
249
- assert_source <<-RUBY
250
- return
251
- RUBY
252
-
253
- assert_source <<-RUBY
254
- return(1)
255
- RUBY
256
- end
257
-
258
- context 'send' do
259
- assert_source 'foo'
260
- assert_source 'self.foo'
261
- assert_source 'a.foo'
262
- assert_source 'A.foo'
263
- assert_source 'foo[1]'
264
- assert_source 'foo[*baz]'
265
- assert_source 'foo(1)'
266
- assert_source 'foo(bar)'
267
- assert_source 'foo(&block)'
268
- assert_source 'foo(*arguments)'
269
- assert_source 'foo(*arguments)'
270
- assert_source <<-RUBY
271
- foo do
272
- end
273
- RUBY
274
-
275
- assert_source <<-RUBY
276
- foo(1) do
277
- nil
278
- end
279
- RUBY
280
-
281
- assert_source <<-RUBY
282
- foo do |a, b|
283
- nil
284
- end
285
- RUBY
286
-
287
- assert_source <<-RUBY
288
- foo do |a, *b|
289
- nil
290
- end
291
- RUBY
292
-
293
- assert_source <<-RUBY
294
- foo do |a, *|
295
- nil
296
- end
297
- RUBY
298
-
299
- assert_source <<-RUBY
300
- foo do
301
- bar
302
- end
303
- RUBY
304
-
305
- assert_source <<-RUBY
306
- foo.bar(*args)
307
- RUBY
308
-
309
- assert_source <<-RUBY
310
- foo.bar do |(a, b), c|
311
- d
312
- end
313
- RUBY
314
-
315
- assert_source <<-RUBY
316
- foo.bar do |(a, b)|
317
- d
318
- end
319
- RUBY
320
-
321
- # Special cases
322
- assert_source '(1..2).max'
323
-
324
- assert_source 'foo.bar(*args)'
325
- assert_source 'foo.bar(*arga, foo, *argb)', RUBIES - %w(1.8)
326
- assert_source 'foo.bar(*args, foo)', RUBIES - %w(1.8)
327
- assert_source 'foo.bar(foo, *args)'
328
- assert_source 'foo.bar(foo, *args, &block)'
329
- assert_source <<-RUBY
330
- foo(bar, *args)
331
- RUBY
332
-
333
- assert_source <<-RUBY
334
- foo(*args, &block)
335
- RUBY
336
-
337
- assert_source 'foo.bar(&baz)'
338
- assert_source 'foo.bar(:baz, &baz)'
339
- assert_source 'foo.bar=(:baz)'
340
- assert_source 'self.foo=(:bar)'
341
- end
342
-
343
- context 'begin; end' do
344
- assert_generates s(:begin), ''
345
-
346
- assert_source <<-RUBY
347
- foo
348
- bar
349
- RUBY
350
-
351
- assert_source <<-RUBY
352
- begin
353
- foo
354
- bar
355
- end.blah
356
- RUBY
357
- end
358
-
359
- context 'begin / rescue / ensure' do
360
- assert_source <<-RUBY
361
- begin
362
- foo
363
- ensure
364
- bar
365
- baz
366
- end
367
- RUBY
368
-
369
- assert_source <<-RUBY
370
- begin
371
- foo
372
- rescue
373
- baz
374
- end
375
- RUBY
376
-
377
- assert_source <<-RUBY
378
- begin
379
- begin
380
- foo
381
- bar
382
- rescue
383
- end
384
- rescue
385
- baz
386
- bar
387
- end
388
- RUBY
389
-
390
- assert_source <<-RUBY
391
- begin
392
- foo
393
- bar
394
- rescue
395
- baz
396
- bar
397
- end
398
- RUBY
399
-
400
- assert_source <<-RUBY
401
- begin
402
- foo
403
- rescue Exception
404
- bar
405
- end
406
- RUBY
407
-
408
- assert_source <<-RUBY
409
- begin
410
- foo
411
- rescue => bar
412
- bar
413
- end
414
- RUBY
415
-
416
- assert_source <<-RUBY
417
- begin
418
- foo
419
- rescue Exception, Other => bar
420
- bar
421
- end
422
- RUBY
423
-
424
- assert_source <<-RUBY
425
- begin
426
- rescue Exception => e
427
- end
428
- RUBY
429
-
430
- assert_source <<-RUBY
431
- begin
432
- rescue
433
- ensure
434
- end
435
- RUBY
436
-
437
- assert_source <<-RUBY
438
- begin
439
- foo
440
- rescue Exception => bar
441
- bar
442
- end
443
- RUBY
444
-
445
- assert_source <<-RUBY
446
- begin
447
- bar
448
- rescue SomeError, *bar
449
- baz
450
- end
451
- RUBY
452
-
453
- assert_source <<-RUBY
454
- begin
455
- bar
456
- rescue SomeError, *bar => exception
457
- baz
458
- end
459
- RUBY
460
-
461
- assert_source <<-RUBY
462
- begin
463
- bar
464
- rescue *bar
465
- baz
466
- end
467
- RUBY
468
-
469
- assert_source <<-RUBY
470
- begin
471
- bar
472
- rescue LoadError
473
- end
474
- RUBY
475
-
476
- assert_source <<-RUBY
477
- begin
478
- bar
479
- rescue
480
- else
481
- baz
482
- end
483
- RUBY
484
-
485
- assert_source <<-RUBY
486
- begin
487
- bar
488
- rescue *bar => exception
489
- baz
490
- end
491
- RUBY
492
- end
493
-
494
- context 'super' do
495
- assert_source 'super'
496
-
497
- assert_source <<-RUBY
498
- super do
499
- foo
500
- end
501
- RUBY
502
-
503
- assert_source 'super()'
504
-
505
- assert_source <<-RUBY
506
- super() do
507
- foo
508
- end
509
- RUBY
510
-
511
- assert_source 'super(a)'
512
-
513
- assert_source <<-RUBY
514
- super(a) do
515
- foo
516
- end
517
- RUBY
518
-
519
- assert_source 'super(a, b)'
520
-
521
- assert_source <<-RUBY
522
- super(a, b) do
523
- foo
524
- end
525
- RUBY
526
-
527
- assert_source 'super(&block)'
528
- assert_source 'super(a, &block)'
529
- end
530
-
531
- context 'undef' do
532
- assert_source 'undef :foo'
533
- end
534
-
535
- context 'BEGIN' do
536
- assert_source <<-RUBY
537
- BEGIN {
538
- foo
539
- }
540
- RUBY
541
- end
542
-
543
- context 'END' do
544
- assert_source <<-RUBY
545
- END {
546
- foo
547
- }
548
- RUBY
549
- end
550
-
551
- context 'alias' do
552
- assert_source <<-RUBY
553
- alias $foo $bar
554
- RUBY
555
-
556
- assert_source <<-RUBY
557
- alias :foo :bar
558
- RUBY
559
- end
560
-
561
- context 'yield' do
562
- context 'without arguments' do
563
- assert_source 'yield'
564
- end
565
-
566
- context 'with argument' do
567
- assert_source 'yield(a)'
568
- end
569
-
570
- context 'with arguments' do
571
- assert_source 'yield(a, b)'
572
- end
573
- end
574
-
575
- context 'if statement' do
576
- assert_source <<-RUBY
577
- if /foo/
578
- bar
579
- end
580
- RUBY
581
-
582
- assert_source <<-RUBY
583
- if 3
584
- 9
585
- end
586
- RUBY
587
-
588
- assert_source <<-RUBY
589
- if 4
590
- 5
591
- else
592
- 6
593
- end
594
- RUBY
595
-
596
- assert_source <<-RUBY
597
- unless 3
598
- nil
599
- end
600
- RUBY
601
-
602
- assert_source <<-RUBY
603
- unless 3
604
- 9
605
- end
606
- RUBY
607
- end
608
-
609
- context 'def' do
610
- context 'on instance' do
611
-
612
- assert_source <<-RUBY
613
- def foo
614
- end
615
- RUBY
616
-
617
- assert_source <<-RUBY
618
- def foo
619
- bar
620
- end
621
- RUBY
622
-
623
- assert_source <<-RUBY
624
- def foo
625
- bar
626
- ensure
627
- baz
628
- end
629
- RUBY
630
-
631
- assert_source <<-RUBY
632
- def foo
633
- bar
634
- rescue
635
- baz
636
- end
637
- RUBY
638
-
639
- assert_source <<-RUBY
640
- def foo(bar)
641
- bar
642
- end
643
- RUBY
644
-
645
- assert_source <<-RUBY
646
- def foo(bar, baz)
647
- bar
648
- end
649
- RUBY
650
-
651
- assert_source <<-RUBY
652
- def foo(bar = true)
653
- bar
654
- end
655
- RUBY
656
-
657
- assert_source <<-RUBY
658
- def foo(bar, baz = true)
659
- bar
660
- end
661
- RUBY
662
-
663
- assert_source <<-RUBY, %w(1.9 2.0)
664
- def foo(bar, baz = true, foo)
665
- bar
666
- end
667
- RUBY
668
-
669
- assert_source <<-RUBY, %w(2.1)
670
- def foo(bar: 1)
671
- end
672
- RUBY
673
-
674
- assert_source <<-RUBY, %w(2.0)
675
- def foo(**bar)
676
- end
677
- RUBY
678
-
679
- assert_source <<-RUBY
680
- def foo(*)
681
- bar
682
- end
683
- RUBY
684
-
685
- assert_source <<-RUBY
686
- def foo(*bar)
687
- bar
688
- end
689
- RUBY
690
-
691
- assert_source <<-RUBY
692
- def foo(bar, *baz)
693
- bar
694
- end
695
- RUBY
696
-
697
- assert_source <<-RUBY
698
- def foo(baz = true, *bor)
699
- bar
700
- end
701
- RUBY
702
-
703
- assert_source <<-RUBY
704
- def foo(baz = true, *bor, &block)
705
- bar
706
- end
707
- RUBY
708
-
709
- assert_source <<-RUBY
710
- def foo(bar, baz = true, *bor)
711
- bar
712
- end
713
- RUBY
714
-
715
- assert_source <<-RUBY
716
- def foo(&block)
717
- bar
718
- end
719
- RUBY
720
-
721
- assert_source <<-RUBY
722
- def foo(bar, &block)
723
- bar
724
- end
725
- RUBY
726
-
727
- assert_source <<-RUBY
728
- def foo
729
- bar
730
- baz
731
- end
732
- RUBY
733
- end
734
-
735
- context 'on singleton' do
736
- assert_source <<-RUBY
737
- def self.foo
738
- end
739
- RUBY
740
-
741
-
742
- assert_source <<-RUBY
743
- def self.foo
744
- bar
745
- end
746
- RUBY
747
-
748
- assert_source <<-RUBY
749
- def self.foo
750
- bar
751
- baz
752
- end
753
- RUBY
754
-
755
- assert_source <<-RUBY
756
- def Foo.bar
757
- bar
758
- end
759
- RUBY
760
-
761
- end
762
-
763
- context 'class' do
764
- assert_source <<-RUBY
765
- class TestClass
766
- end
767
- RUBY
768
-
769
- assert_source <<-RUBY
770
- class << some_object
771
- end
772
- RUBY
773
-
774
- assert_source <<-RUBY
775
- class << some_object
776
- the_body
777
- end
778
- RUBY
779
-
780
- assert_source <<-RUBY
781
- class SomeNameSpace::TestClass
782
- end
783
- RUBY
784
-
785
- assert_source <<-RUBY
786
- class Some::Name::Space::TestClass
787
- end
788
- RUBY
789
-
790
- assert_source <<-RUBY
791
- class TestClass < Object
792
- end
793
- RUBY
794
-
795
- assert_source <<-RUBY
796
- class TestClass < SomeNameSpace::Object
797
- end
798
- RUBY
799
-
800
- assert_source <<-RUBY
801
- class TestClass
802
- def foo
803
- :bar
804
- end
805
- end
806
- RUBY
807
-
808
- assert_source <<-RUBY
809
- class ::TestClass
810
- end
811
- RUBY
812
- end
813
-
814
- context 'module' do
815
-
816
- assert_source <<-RUBY
817
- module TestModule
818
- end
819
- RUBY
820
-
821
- assert_source <<-RUBY
822
- module SomeNameSpace::TestModule
823
- end
824
- RUBY
825
-
826
- assert_source <<-RUBY
827
- module Some::Name::Space::TestModule
828
- end
829
- RUBY
830
-
831
- assert_source <<-RUBY
832
- module TestModule
833
- def foo
834
- :bar
835
- end
836
- end
837
- RUBY
838
-
839
- end
840
-
841
- context 'op assign' do
842
- %w(|= ||= &= &&= += -= *= /= **= %=).each do |op|
843
- assert_source "self.foo #{op} bar"
844
- assert_source "foo[key] #{op} bar"
845
- end
846
- end
847
-
848
- context 'element assignment' do
849
- assert_source 'array[index] = value'
850
- assert_source 'array[*index] = value'
851
-
852
- %w(+ - * / % & | || &&).each do |operator|
853
- context "with #{operator}" do
854
- assert_source "array[index] #{operator}= 2"
855
- assert_source "array[] #{operator}= 2"
856
- end
857
- end
858
- end
859
-
860
- context 'defined?' do
861
- assert_source <<-RUBY
862
- defined?(@foo)
863
- RUBY
864
-
865
- assert_source <<-RUBY
866
- defined?(Foo)
867
- RUBY
868
- end
869
- end
870
-
871
- context 'lambda' do
872
- assert_source <<-RUBY
873
- lambda do
874
- end
875
- RUBY
876
-
877
- assert_source <<-RUBY
878
- lambda do |a, b|
879
- a
880
- end
881
- RUBY
882
- end
883
-
884
- context 'match operators' do
885
- assert_source <<-RUBY
886
- /bar/ =~ foo
887
- RUBY
888
-
889
- assert_source <<-RUBY
890
- foo =~ /bar/
891
- RUBY
892
- end
893
-
894
- context 'binary operator methods' do
895
- %w(+ - * / & | << >> == === != <= < <=> > >= =~ !~ ^ **).each do |operator|
896
- rubies = RUBIES - (%w(!= !~).include?(operator) ? %w(1.8) : [])
897
- assert_source "1 #{operator} 2", rubies
898
- assert_source "left.#{operator}(*foo)", rubies
899
- assert_source "left.#{operator}(a, b)", rubies
900
- assert_source "self #{operator} b", rubies
901
- assert_source "a #{operator} b", rubies
902
- assert_source "(a #{operator} b).foo", rubies
903
- end
904
- end
905
-
906
- context 'nested binary operators' do
907
- assert_source '(a + b) / (c - d)'
908
- assert_source '(a + b) / (c.-(e, f))'
909
- assert_source '(a + b) / (c.-(*f))'
910
- end
911
-
912
- context 'binary operator' do
913
- assert_source '((a) || (break(foo)))'
914
- assert_source '((break(foo)) || (a))'
915
- assert_source '((a) || (b)).foo'
916
- assert_source '((a) || (((b) || (c))))'
917
- end
918
-
919
- { :or => :'||', :and => :'&&' }.each do |word, symbol|
920
- assert_generates "a #{word} break foo", "((a) #{symbol} (break(foo)))"
921
- end
922
-
923
- context 'expansion of shortcuts' do
924
- assert_source 'a += 2'
925
- assert_source 'a -= 2'
926
- assert_source 'a **= 2'
927
- assert_source 'a *= 2'
928
- assert_source 'a /= 2'
929
- end
930
-
931
- context 'shortcuts' do
932
- assert_source 'a &&= b'
933
- assert_source 'a ||= 2'
934
- assert_source '(a ||= 2).bar'
935
- end
936
-
937
- context 'flip flops' do
938
- context 'inclusive' do
939
- assert_source <<-RUBY
940
- if (i == 4)..(i == 4)
941
- foo
942
- end
943
- RUBY
944
- end
945
-
946
- context 'exclusive' do
947
- assert_source <<-RUBY
948
- if (i == 4)...(i == 4)
949
- foo
950
- end
951
- RUBY
952
- end
953
- end
954
-
955
- context 'case statement' do
956
- assert_source <<-RUBY
957
- case
958
- when bar
959
- baz
960
- when baz
961
- bar
962
- end
963
- RUBY
964
-
965
- assert_source <<-RUBY
966
- case foo
967
- when bar
968
- when baz
969
- bar
970
- end
971
- RUBY
972
-
973
-
974
- assert_source <<-RUBY
975
- case foo
976
- when bar
977
- baz
978
- when baz
979
- bar
980
- end
981
- RUBY
982
-
983
- assert_source <<-RUBY
984
- case foo
985
- when bar, baz
986
- :other
987
- end
988
- RUBY
989
-
990
- assert_source <<-RUBY
991
- case foo
992
- when *bar
993
- :value
994
- end
995
- RUBY
996
-
997
- assert_source <<-RUBY
998
- case foo
999
- when bar
1000
- baz
1001
- else
1002
- :foo
1003
- end
1004
- RUBY
1005
- end
1006
-
1007
- context 'for' do
1008
- assert_source <<-RUBY
1009
- for a in bar do
1010
- baz
1011
- end
1012
- RUBY
1013
-
1014
- assert_source <<-RUBY
1015
- for a, *b in bar do
1016
- baz
1017
- end
1018
- RUBY
1019
-
1020
- assert_source <<-RUBY
1021
- for a, b in bar do
1022
- baz
1023
- end
1024
- RUBY
1025
- end
1026
-
1027
- context 'unary operators' do
1028
- assert_source '!1'
1029
- assert_source '!!1'
1030
- assert_source '~a'
1031
- assert_source '-a'
1032
- assert_source '+a'
1033
- end
1034
-
1035
- context 'loop' do
1036
- assert_source <<-RUBY
1037
- loop do
1038
- foo
1039
- end
1040
- RUBY
1041
- end
1042
-
1043
- context 'post conditions' do
1044
- assert_source <<-RUBY
1045
- begin
1046
- foo
1047
- end while baz
1048
- RUBY
1049
-
1050
- assert_source <<-RUBY
1051
- begin
1052
- foo
1053
- bar
1054
- end until baz
1055
- RUBY
1056
-
1057
- assert_source <<-RUBY
1058
- begin
1059
- foo
1060
- bar
1061
- end while baz
1062
- RUBY
1063
- end
1064
-
1065
- context 'while' do
1066
- assert_source <<-RUBY
1067
- while false
1068
- end
1069
- RUBY
1070
-
1071
- assert_source <<-RUBY
1072
- while false
1073
- 3
1074
- end
1075
- RUBY
1076
- end
1077
-
1078
- context 'until' do
1079
- assert_source <<-RUBY
1080
- until false
1081
- end
1082
- RUBY
1083
-
1084
- assert_source <<-RUBY
1085
- until false
1086
- 3
1087
- end
1088
- RUBY
1089
- end
1090
-
1091
- end