mirah 0.0.12-java → 0.1.0-java

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.
Files changed (171) hide show
  1. data/History.txt +372 -0
  2. data/README.txt +4 -5
  3. data/Rakefile +178 -55
  4. data/examples/appengine/Readme +3 -3
  5. data/examples/appengine/src/org/mirah/MirahApp.mirah +1 -1
  6. data/examples/appengine/src/org/mirah/list.dhtml +1 -1
  7. data/examples/bintrees.mirah +1 -1
  8. data/examples/edb.mirah +1 -1
  9. data/examples/fib.mirah +1 -1
  10. data/examples/interfaces.mirah +1 -1
  11. data/examples/macros/{string-each-char.mirah → string_each_char.mirah} +4 -5
  12. data/examples/maven/README.txt +1 -1
  13. data/examples/maven/src/main/mirah/hello_mirah.mirah +1 -1
  14. data/examples/plugins/appengine/Rakefile +1 -1
  15. data/examples/plugins/appengine/src/com/google/appengine/ext/duby/db/MetaModel.mirah +1 -1
  16. data/examples/plugins/appengine/src/com/google/appengine/ext/duby/db/Model.duby +1 -1
  17. data/examples/plugins/appengine/test/com/google/appengine/ext/duby/db/ModelTest.duby +1 -1
  18. data/examples/rosettacode/100-doors.mirah +6 -6
  19. data/examples/rosettacode/README.txt +3 -3
  20. data/examples/rosettacode/boolean-values.mirah +1 -1
  21. data/examples/rosettacode/comments.mirah +1 -1
  22. data/examples/rosettacode/count-occurrences-of-a-substring.mirah +1 -1
  23. data/examples/rosettacode/factorial.mirah +1 -1
  24. data/examples/rosettacode/fibonacci.mirah +1 -1
  25. data/examples/rosettacode/fizz-buzz.mirah +2 -2
  26. data/examples/rosettacode/flatten-a-list.mirah +4 -4
  27. data/examples/rosettacode/guess-the-number.mirah +2 -2
  28. data/examples/rosettacode/hamming-numbers.mirah +4 -4
  29. data/examples/rosettacode/is-string-numeric.mirah +22 -22
  30. data/examples/rosettacode/palindrome.mirah +2 -2
  31. data/examples/rosettacode/random-numbers.mirah +1 -1
  32. data/examples/rosettacode/repeat-a-string.mirah +1 -1
  33. data/examples/rosettacode/reverse-a-string.mirah +1 -1
  34. data/examples/rosettacode/rot-13.mirah +5 -5
  35. data/examples/rosettacode/secure-temporary-file.mirah +2 -2
  36. data/examples/rosettacode/sleep.mirah +1 -1
  37. data/examples/rosettacode/string-length.mirah +5 -5
  38. data/examples/swing.mirah +1 -1
  39. data/examples/test.edb +1 -1
  40. data/javalib/mirah-bootstrap.jar +0 -0
  41. data/javalib/mirah-builtins.jar +0 -0
  42. data/javalib/mirah-parser.jar +0 -0
  43. data/javalib/mirah-util.jar +0 -0
  44. data/lib/duby.rb +1 -1
  45. data/lib/mirah.rb +50 -28
  46. data/lib/mirah/ast.rb +15 -605
  47. data/lib/mirah/ast/scope.rb +98 -69
  48. data/lib/mirah/commands.rb +1 -1
  49. data/lib/mirah/commands/base.rb +7 -7
  50. data/lib/mirah/commands/compile.rb +3 -3
  51. data/lib/mirah/commands/parse.rb +7 -5
  52. data/lib/mirah/commands/run.rb +12 -19
  53. data/lib/mirah/compiler.rb +15 -23
  54. data/lib/mirah/errors.rb +16 -1
  55. data/lib/mirah/generator.rb +79 -39
  56. data/lib/mirah/jvm/compiler.rb +1 -19
  57. data/lib/mirah/jvm/compiler/base.rb +233 -90
  58. data/lib/mirah/jvm/compiler/jvm_bytecode.rb +675 -363
  59. data/lib/mirah/jvm/method_lookup.rb +134 -65
  60. data/lib/mirah/jvm/typer.rb +10 -5
  61. data/lib/mirah/jvm/types.rb +10 -2
  62. data/lib/mirah/jvm/types/array_type.rb +10 -12
  63. data/lib/mirah/{compiler/type.rb → jvm/types/ast_ext.rb} +12 -8
  64. data/lib/mirah/jvm/types/basic_types.rb +26 -33
  65. data/lib/mirah/jvm/types/bitescript_ext.rb +1 -1
  66. data/lib/mirah/jvm/types/block_type.rb +15 -0
  67. data/lib/mirah/jvm/types/boolean.rb +8 -4
  68. data/lib/mirah/jvm/types/dynamic_type.rb +12 -13
  69. data/lib/mirah/jvm/types/enumerable.rb +7 -7
  70. data/lib/mirah/jvm/types/extensions.rb +11 -6
  71. data/lib/mirah/jvm/types/factory.rb +624 -94
  72. data/lib/mirah/jvm/types/floats.rb +21 -15
  73. data/lib/mirah/jvm/types/generic_type.rb +72 -0
  74. data/lib/mirah/jvm/types/implicit_nil_type.rb +29 -0
  75. data/lib/mirah/jvm/types/integers.rb +26 -71
  76. data/lib/mirah/jvm/types/interface_definition.rb +3 -3
  77. data/lib/mirah/jvm/types/intrinsics.rb +203 -168
  78. data/lib/mirah/jvm/types/literals.rb +6 -6
  79. data/lib/mirah/jvm/types/meta_type.rb +13 -4
  80. data/lib/mirah/jvm/types/methods.rb +281 -93
  81. data/lib/mirah/jvm/types/null_type.rb +17 -5
  82. data/lib/mirah/jvm/types/number.rb +10 -7
  83. data/lib/mirah/jvm/types/primitive_type.rb +17 -6
  84. data/lib/mirah/jvm/types/source_mirror.rb +12 -7
  85. data/lib/mirah/jvm/types/type.rb +107 -23
  86. data/lib/mirah/jvm/types/type_definition.rb +25 -10
  87. data/lib/mirah/jvm/types/unreachable_type.rb +1 -1
  88. data/lib/mirah/jvm/types/void_type.rb +3 -3
  89. data/lib/mirah/parser.rb +154 -16
  90. data/lib/mirah/plugin/edb.rb +1 -1
  91. data/lib/mirah/transform.rb +1 -2
  92. data/lib/mirah/transform/ast_ext.rb +24 -43
  93. data/lib/mirah/transform/transformer.rb +29 -224
  94. data/lib/mirah/typer.rb +2 -16
  95. data/lib/mirah/util/argument_processor.rb +25 -10
  96. data/lib/mirah/util/class_loader.rb +1 -1
  97. data/lib/mirah/util/compilation_state.rb +16 -17
  98. data/lib/mirah/util/delegate.rb +2 -2
  99. data/lib/mirah/util/logging.rb +110 -0
  100. data/lib/mirah/util/process_errors.rb +69 -11
  101. data/lib/mirah/version.rb +1 -1
  102. data/test/core/commands_test.rb +6 -24
  103. data/test/core/env_test.rb +5 -5
  104. data/{lib/mirah/jvm/source_generator/typer.rb → test/core/generator_test.rb} +9 -9
  105. data/test/core/typer_test.rb +196 -158
  106. data/test/core/util/argument_processor_test.rb +10 -10
  107. data/test/core/util/class_loader_test.rb +6 -5
  108. data/test/fixtures/org/foo/LowerCaseInnerClass$inner.class +0 -0
  109. data/test/fixtures/org/foo/LowerCaseInnerClass.class +0 -0
  110. data/test/fixtures/org/foo/LowerCaseInnerClass.java +7 -0
  111. data/test/jvm/annotations_test.rb +5 -5
  112. data/test/jvm/blocks_test.rb +140 -88
  113. data/test/jvm/bytecode_test_helper.rb +112 -94
  114. data/test/jvm/cast_test.rb +162 -0
  115. data/test/jvm/constructors_test.rb +18 -8
  116. data/test/jvm/enumerable_test.rb +77 -44
  117. data/test/jvm/example_test.rb +53 -0
  118. data/test/jvm/factory_test.rb +7 -1
  119. data/test/jvm/generics_test.rb +57 -0
  120. data/test/jvm/hash_test.rb +106 -0
  121. data/test/jvm/import_test.rb +81 -0
  122. data/test/jvm/interface_test.rb +73 -0
  123. data/test/jvm/java_typer_test.rb +92 -66
  124. data/{lib/mirah/typer/base.rb → test/jvm/jvm_commands_test.rb} +6 -10
  125. data/test/jvm/jvm_compiler_test.rb +170 -604
  126. data/test/jvm/list_extensions_test.rb +23 -0
  127. data/test/jvm/macros_test.rb +197 -32
  128. data/test/jvm/main_method_test.rb +4 -4
  129. data/test/jvm/numeric_extensions_test.rb +13 -0
  130. data/test/jvm/rescue_test.rb +73 -16
  131. data/test/jvm/varargs_test.rb +65 -0
  132. data/test/test_helper.rb +1 -2
  133. metadata +234 -251
  134. data/examples/SortClosure$__xform_tmp_1.class +0 -0
  135. data/examples/SortClosure$__xform_tmp_2.class +0 -0
  136. data/examples/SortClosure.class +0 -0
  137. data/examples/macros/StringEachChar$Extension1.class +0 -0
  138. data/lib/mirah/ast/call.rb +0 -345
  139. data/lib/mirah/ast/class.rb +0 -359
  140. data/lib/mirah/ast/flow.rb +0 -381
  141. data/lib/mirah/ast/intrinsics.rb +0 -563
  142. data/lib/mirah/ast/literal.rb +0 -178
  143. data/lib/mirah/ast/local.rb +0 -112
  144. data/lib/mirah/ast/method.rb +0 -408
  145. data/lib/mirah/ast/structure.rb +0 -387
  146. data/lib/mirah/ast/type.rb +0 -146
  147. data/lib/mirah/commands/base.rb~ +0 -57
  148. data/lib/mirah/compiler/call.rb +0 -45
  149. data/lib/mirah/compiler/class.rb +0 -81
  150. data/lib/mirah/compiler/flow.rb +0 -109
  151. data/lib/mirah/compiler/literal.rb +0 -130
  152. data/lib/mirah/compiler/local.rb +0 -59
  153. data/lib/mirah/compiler/method.rb +0 -44
  154. data/lib/mirah/compiler/structure.rb +0 -65
  155. data/lib/mirah/jvm/compiler/java_source.rb +0 -787
  156. data/lib/mirah/jvm/method_lookup.rb~ +0 -247
  157. data/lib/mirah/jvm/source_generator/builder.rb +0 -468
  158. data/lib/mirah/jvm/source_generator/loops.rb +0 -131
  159. data/lib/mirah/jvm/source_generator/precompile.rb +0 -210
  160. data/lib/mirah/plugin/gwt.rb +0 -189
  161. data/lib/mirah/plugin/java.rb +0 -70
  162. data/lib/mirah/transform/error.rb +0 -13
  163. data/lib/mirah/transform/helper.rb +0 -765
  164. data/lib/mirah/typer/simple.rb +0 -384
  165. data/lib/mirah/version.rb~ +0 -18
  166. data/test/core/ast_test.rb +0 -382
  167. data/test/core/compilation_test.rb +0 -130
  168. data/test/core/macros_test.rb +0 -61
  169. data/test/jvm/javac_test_helper.rb +0 -89
  170. data/test/jvm/jvm_compiler_test.rb~ +0 -2181
  171. data/test/plugins/gwt_test.rb +0 -69
@@ -12,17 +12,13 @@
12
12
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
13
  # See the License for the specific language governing permissions and
14
14
  # limitations under the License.
15
+ require 'test_helper'
15
16
 
16
- module Mirah
17
- module Typer
18
- class Base
19
- include Mirah
20
17
 
21
- def log(message); Typer.log(message); end
22
-
23
- def to_s
24
- name
25
- end
18
+ class JVMCommandsTest < Test::Unit::TestCase
19
+ def test_dash_e_eval
20
+ assert_output "1\n" do
21
+ Mirah::Commands::Run.new(['-e','puts 1']).execute
26
22
  end
27
23
  end
28
- end
24
+ end
@@ -14,13 +14,6 @@
14
14
  # limitations under the License.
15
15
 
16
16
  class JVMCompilerTest < Test::Unit::TestCase
17
- def assert_raise_java(type, message="")
18
- ex = assert_raise(NativeException) do
19
- yield
20
- end
21
- assert_equal type, ex.cause.class
22
- assert_equal message, ex.cause.message.to_s
23
- end
24
17
 
25
18
  def test_local
26
19
  cls, = compile("def foo; a = 1; a; end")
@@ -238,7 +231,7 @@ class JVMCompilerTest < Test::Unit::TestCase
238
231
  cls, = compile(<<-EOF)
239
232
  import java.io.*
240
233
  def foo
241
- throws IOException
234
+ # throws IOException
242
235
  OutputStreamWriter.new(
243
236
  System.out).write("Hello ").write("there\n").flush
244
237
  end
@@ -248,15 +241,13 @@ class JVMCompilerTest < Test::Unit::TestCase
248
241
 
249
242
  a, b = compile(<<-EOF)
250
243
  class VoidBase
251
- def foo
252
- returns void
253
- puts "foo"
244
+ def foo:void
245
+ System.out.println "foo"
254
246
  end
255
247
  end
256
248
  class VoidChain < VoidBase
257
- def bar
258
- returns void
259
- puts "bar"
249
+ def bar:void
250
+ System.out.println "bar"
260
251
  end
261
252
 
262
253
  def self.foobar
@@ -268,67 +259,21 @@ class JVMCompilerTest < Test::Unit::TestCase
268
259
 
269
260
  end
270
261
 
271
- def test_import
272
- cls, = compile("import 'AL', 'java.util.ArrayList'; def foo; AL.new; end; foo")
273
- assert_equal java.util.ArrayList.java_class, cls.foo.java_class
274
-
275
- cls, = compile("import 'java.util.ArrayList'; def foo; ArrayList.new; end; foo")
276
- assert_equal java.util.ArrayList.java_class, cls.foo.java_class
277
- end
278
-
279
- def test_no_quote_import
280
- cls, = compile("import java.util.ArrayList as AL; def foo; AL.new; end; foo")
281
- assert_equal java.util.ArrayList.java_class, cls.foo.java_class
282
-
283
- cls, = compile("import java.util.ArrayList; def foo; ArrayList.new; end; foo")
284
- assert_equal java.util.ArrayList.java_class, cls.foo.java_class
285
- end
286
-
287
- def test_imported_decl
288
- cls, = compile("import 'java.util.ArrayList'; def foo(a:ArrayList); a.size; end")
289
- assert_equal 0, cls.foo(java.util.ArrayList.new)
290
- end
291
-
292
- def test_import_package
293
- cls, = compile(<<-EOF)
294
- import java.util.*
295
- def foo
296
- ArrayList.new
297
- end
298
- EOF
299
- assert_equal java.util.ArrayList.java_class, cls.foo.java_class
300
- end
301
-
302
- def test_interface
303
- cls, = compile(<<-EOF)
304
- import 'java.util.concurrent.Callable'
305
- def foo(a:Callable)
306
- throws Exception
307
- a.call
308
- end
309
- EOF
310
- result = cls.foo {0}
311
- assert_equal 0, result
312
- m = cls.java_class.java_method 'foo', java.util.concurrent.Callable
313
- assert_equal([java.lang.Exception.java_class], m.exception_types)
314
-
315
- end
316
-
317
262
  def test_class_decl
318
263
  foo, = compile("class ClassDeclTest;end")
319
264
  assert_equal('ClassDeclTest', foo.java_class.name)
320
265
  end
321
-
266
+
322
267
  def test_class_name_from_file_with_underscore
323
- foo, = compile("puts 'blah'", 'class_name_test.mirah')
268
+ foo, = compile("System.out.println 'blah'", :name => 'class_name_test.mirah')
324
269
  assert_equal('ClassNameTest', foo.java_class.name)
325
270
  end
326
-
271
+
327
272
  def test_class_name_from_file_with_dash
328
- foo, = compile("puts 'blah'", 'class-dash-test.mirah')
273
+ foo, = compile("System.out.println 'blah'", :name => 'class-dash-test.mirah')
329
274
  assert_equal('ClassDashTest', foo.java_class.name)
330
275
  end
331
-
276
+
332
277
  def test_puts
333
278
  cls, = compile("def foo;puts 'Hello World!';end")
334
279
  output = capture_output do
@@ -478,29 +423,6 @@ class JVMCompilerTest < Test::Unit::TestCase
478
423
  assert_equal '-', cls.foo(-1)
479
424
  end
480
425
 
481
-
482
- def test_local_decl
483
- cls, = compile(<<-EOF)
484
- import 'java.lang.String'
485
- a = :fixnum
486
- b = :int
487
- c = :long
488
- d = :float
489
- e = :string
490
- f = String
491
- puts a
492
- puts b
493
- puts c
494
- puts d
495
- puts e
496
- puts f
497
- EOF
498
- output = capture_output do
499
- cls.main([].to_java(:string))
500
- end
501
- assert_equal("0\n0\n0\n0.0\nnull\nnull\n", output)
502
- end
503
-
504
426
  def test_multi_assign
505
427
  cls, = compile(<<-EOF)
506
428
  def foo
@@ -517,25 +439,25 @@ class JVMCompilerTest < Test::Unit::TestCase
517
439
 
518
440
  def test_loop
519
441
  cls, = compile(
520
- 'def foo(a:fixnum);while a > 0; a -= 1; puts ".";end;end')
442
+ 'def foo(a:fixnum);while a > 0; a -= 1; System.out.println ".";end;end')
521
443
  assert_equal('', capture_output{cls.foo(0)})
522
444
  assert_equal(".\n", capture_output{cls.foo(1)})
523
445
  assert_equal(".\n.\n", capture_output{cls.foo(2)})
524
446
 
525
447
  cls, = compile(
526
- 'def foo(a:fixnum);begin;a -= 1; puts ".";end while a > 0;end')
448
+ 'def foo(a:fixnum);begin;a -= 1; System.out.println ".";end while a > 0;end')
527
449
  assert_equal(".\n", capture_output{cls.foo(0)})
528
450
  assert_equal(".\n", capture_output{cls.foo(1)})
529
451
  assert_equal(".\n.\n", capture_output{cls.foo(2)})
530
452
 
531
453
  cls, = compile(
532
- 'def foo(a:fixnum);until a <= 0; a -= 1; puts ".";end;end')
454
+ 'def foo(a:fixnum);until a <= 0; a -= 1; System.out.println ".";end;end')
533
455
  assert_equal('', capture_output{cls.foo(0)})
534
456
  assert_equal(".\n", capture_output{cls.foo(1)})
535
457
  assert_equal(".\n.\n", capture_output{cls.foo(2)})
536
458
 
537
459
  cls, = compile(
538
- 'def foo(a:fixnum);begin;a -= 1; puts ".";end until a <= 0;end')
460
+ 'def foo(a:fixnum);begin;a -= 1; System.out.println ".";end until a <= 0;end')
539
461
  assert_equal(".\n", capture_output{cls.foo(0)})
540
462
  assert_equal(".\n", capture_output{cls.foo(1)})
541
463
  assert_equal(".\n.\n", capture_output{cls.foo(2)})
@@ -736,11 +658,11 @@ class JVMCompilerTest < Test::Unit::TestCase
736
658
  def a
737
659
  @a
738
660
  end
739
-
661
+
740
662
  def self.set_b(b:fixnum)
741
663
  @@b = b
742
664
  end
743
-
665
+
744
666
  def b
745
667
  @@b
746
668
  end
@@ -752,7 +674,7 @@ class JVMCompilerTest < Test::Unit::TestCase
752
674
  second = cls.new(2)
753
675
  assert_equal(1, first.a)
754
676
  assert_equal(2, second.a)
755
-
677
+
756
678
  cls.set_b 0
757
679
  assert_equal(0, first.b)
758
680
  assert_equal(0, second.b)
@@ -785,14 +707,12 @@ class JVMCompilerTest < Test::Unit::TestCase
785
707
 
786
708
  def test_implements
787
709
  cls, = compile(<<-EOF)
788
- import java.lang.Iterable
789
- class Foo; implements Iterable
710
+ class ImplementsTest implements Iterable
790
711
  def iterator
791
712
  nil
792
713
  end
793
714
  end
794
715
  EOF
795
-
796
716
  assert_include java.lang.Iterable.java_class, cls.java_class.interfaces
797
717
  end
798
718
 
@@ -821,58 +741,52 @@ class JVMCompilerTest < Test::Unit::TestCase
821
741
  def _Double(a:double)
822
742
  a
823
743
  end
824
- EOF
744
+ EOF
825
745
 
826
- assert_equal(1.0, cls._Byte(1))
827
- assert_equal(127.0, cls._Byte(127))
828
- assert_equal(128.0, cls._Short(128))
829
- assert_equal(32767.0, cls._Short(32767))
830
- assert_equal(32768.0, cls._Int(32768))
831
- assert_equal(2147483648.0, cls._Long(2147483648))
746
+ assert_equal(1.0, cls._Byte(1))
747
+ assert_equal(127.0, cls._Byte(127))
748
+ assert_equal(128.0, cls._Short(128))
749
+ assert_equal(32767.0, cls._Short(32767))
750
+ assert_equal(32768.0, cls._Int(32768))
751
+ assert_equal(2147483648.0, cls._Long(2147483648))
832
752
  end
833
753
 
834
- def test_interface_declaration
835
- interface = compile('interface A do; end').first
836
- assert(interface.java_class.interface?)
837
- assert_equal('A', interface.java_class.name)
838
-
839
- a, b = compile('interface A do; end; interface B < A do; end')
840
- assert_include(a, b.ancestors)
841
- assert_equal('A', a.java_class.name)
842
- assert_equal('B', b.java_class.name)
843
-
844
- a, b, c = compile(<<-EOF)
845
- interface A do
754
+ def test_argument_boxing
755
+ [ [:short], [:int,:integer], [:long], [:byte]].each do |types|
756
+ primitive, full = types.first, types.last
757
+ begin
758
+ cls, = compile(<<-EOF)
759
+ def to_#{primitive}(a:#{full.to_s.capitalize}):void
760
+ puts a
761
+ end
762
+ to_#{primitive} #{primitive}(1)
763
+ EOF
764
+ assert_output("1\n") { cls.main nil}
765
+ rescue => e
766
+ raise "#{primitive} #{e.message}"
846
767
  end
847
-
848
- interface B do
768
+ end
769
+ %w[float double].each do |type|
770
+ begin
771
+ cls, = compile(<<-EOF)
772
+ def to_#{type}(a:#{type.to_s.capitalize}):void
773
+ puts a
774
+ end
775
+ to_#{type} #{type}(1)
776
+ EOF
777
+ assert_output("1.0\n") { cls.main nil}
778
+ rescue => e
779
+ raise "#{type} #{e.message}"
849
780
  end
781
+ end
850
782
 
851
- interface C < A, B do
783
+ cls, = compile(<<-EOF)
784
+ def to_character(a:Character):void
785
+ puts a
852
786
  end
787
+ to_character char(65)
853
788
  EOF
854
-
855
- assert_include(a, c.ancestors)
856
- assert_include(b, c.ancestors)
857
- assert_equal('A', a.java_class.name)
858
- assert_equal('B', b.java_class.name)
859
- assert_equal('C', c.java_class.name)
860
-
861
- assert_raise Mirah::Typer::InferenceError do
862
- compile(<<-EOF)
863
- interface A do
864
- def a
865
- returns :int
866
- end
867
- end
868
-
869
- class Impl; implements A
870
- def a
871
- "foo"
872
- end
873
- end
874
- EOF
875
- end
789
+ assert_output("A\n") { cls.main nil}
876
790
  end
877
791
 
878
792
  def test_raise
@@ -881,7 +795,7 @@ class JVMCompilerTest < Test::Unit::TestCase
881
795
  raise
882
796
  end
883
797
  EOF
884
- assert_raise_java(java.lang.RuntimeException) do
798
+ assert_raise_java(java.lang.Exception) do
885
799
  cls.foo
886
800
  end
887
801
 
@@ -890,7 +804,7 @@ class JVMCompilerTest < Test::Unit::TestCase
890
804
  raise "Oh no!"
891
805
  end
892
806
  EOF
893
- ex = assert_raise_java(java.lang.RuntimeException, 'Oh no!') do
807
+ ex = assert_raise_java(java.lang.Exception, 'Oh no!') do
894
808
  cls.foo
895
809
  end
896
810
 
@@ -905,7 +819,7 @@ class JVMCompilerTest < Test::Unit::TestCase
905
819
 
906
820
  cls, = compile(<<-EOF)
907
821
  def foo
908
- throws Exception
822
+ # throws Exception
909
823
  raise Exception, "oops"
910
824
  end
911
825
  EOF
@@ -915,160 +829,14 @@ class JVMCompilerTest < Test::Unit::TestCase
915
829
 
916
830
  cls, = compile(<<-EOF)
917
831
  def foo
918
- throws Throwable
832
+ # throws Throwable
919
833
  raise Throwable.new("darn")
920
834
  end
921
835
  EOF
922
- ex = assert_raise_java(java.lang.Throwable, "darn") do
923
- cls.foo
924
- end
925
- end
926
836
 
927
- def test_ensure
928
- cls, = compile(<<-EOF)
929
- def foo
930
- 1
931
- ensure
932
- puts "Hi"
933
- end
934
- EOF
935
- output = capture_output do
936
- assert_equal(1, cls.foo)
937
- end
938
- assert_equal "Hi\n", output
939
-
940
- cls, = compile(<<-EOF)
941
- def foo
942
- return 1
943
- ensure
944
- puts "Hi"
945
- end
946
- EOF
947
- output = capture_output do
948
- assert_equal(1, cls.foo)
949
- end
950
- assert_equal "Hi\n", output
951
-
952
- cls, = compile(<<-EOF)
953
- def foo
954
- begin
955
- break
956
- ensure
957
- puts "Hi"
958
- end while false
959
- end
960
- EOF
961
- output = capture_output do
837
+ assert_raise_java(java.lang.Throwable, "darn") do
962
838
  cls.foo
963
839
  end
964
- assert_equal "Hi\n", output
965
- end
966
-
967
- def test_cast
968
- cls, = compile(<<-EOF)
969
- def f2b; byte(1.0); end
970
- def f2s; short(1.0); end
971
- def f2c; char(1.0); end
972
- def f2i; int(1.0); end
973
- def f2l; long(1.0); end
974
- def f2d; int(1.0); end
975
-
976
- def i2b; byte(1); end
977
- def i2s; short(1); end
978
- def i2c; char(1); end
979
- def i2l; long(1); end
980
- def i2f; float(1); end
981
- def i2d; int(1); end
982
-
983
- def b2s; short(byte(1)); end
984
- def b2c; char(byte(1)); end
985
- def b2i; int(byte(1)); end
986
- def b2l; long(byte(1)); end
987
- def b2f; float(byte(1)); end
988
- def b2d; double(byte(1)); end
989
-
990
- def s2b; byte(short(1)); end
991
- def s2c; char(short(1)); end
992
- def s2i; int(short(1)); end
993
- def s2l; long(short(1)); end
994
- def s2f; float(short(1)); end
995
- def s2d; double(short(1)); end
996
-
997
- def c2b; byte(char(1)); end
998
- def c2s; short(char(1)); end
999
- def c2i; int(char(1)); end
1000
- def c2l; long(char(1)); end
1001
- def c2f; float(char(1)); end
1002
- def c2d; double(char(1)); end
1003
-
1004
- def l2b; byte(long(1)); end
1005
- def l2c; char(long(1)); end
1006
- def l2i; int(long(1)); end
1007
- def l2l; long(long(1)); end
1008
- def l2f; float(long(1)); end
1009
- def l2d; double(long(1)); end
1010
-
1011
- def d2b; byte(1.0); end
1012
- def d2s; short(1.0); end
1013
- def d2c; char(1.0); end
1014
- def d2i; int(1.0); end
1015
- def d2l; long(1.0); end
1016
- def d2f; float(1.0); end
1017
-
1018
- def hard_i2f(a:int)
1019
- float(if a < 0
1020
- a *= -1
1021
- a * 2
1022
- else
1023
- a * 2
1024
- end)
1025
- end
1026
- EOF
1027
-
1028
- assert_equal 1, cls.b2s
1029
- assert_equal 1, cls.b2c
1030
- assert_equal 1, cls.b2i
1031
- assert_equal 1, cls.b2l
1032
- assert_equal 1.0, cls.b2f
1033
- assert_equal 1.0, cls.b2d
1034
-
1035
- assert_equal 1, cls.s2b
1036
- assert_equal 1, cls.s2c
1037
- assert_equal 1, cls.s2i
1038
- assert_equal 1, cls.s2l
1039
- assert_equal 1.0, cls.s2f
1040
- assert_equal 1.0, cls.s2d
1041
-
1042
- assert_equal 1, cls.c2b
1043
- assert_equal 1, cls.c2s
1044
- assert_equal 1, cls.c2i
1045
- assert_equal 1, cls.c2l
1046
- assert_equal 1.0, cls.c2f
1047
- assert_equal 1.0, cls.c2d
1048
-
1049
- assert_equal 1, cls.i2b
1050
- assert_equal 1, cls.i2s
1051
- assert_equal 1, cls.i2c
1052
- assert_equal 1, cls.i2l
1053
- assert_equal 1.0, cls.i2f
1054
- assert_equal 1.0, cls.i2d
1055
-
1056
- assert_equal 1, cls.f2b
1057
- assert_equal 1, cls.f2s
1058
- assert_equal 1, cls.f2c
1059
- assert_equal 1, cls.f2i
1060
- assert_equal 1, cls.f2l
1061
- assert_equal 1.0, cls.f2d
1062
-
1063
- assert_equal 1, cls.d2b
1064
- assert_equal 1, cls.d2s
1065
- assert_equal 1, cls.d2c
1066
- assert_equal 1, cls.d2i
1067
- assert_equal 1, cls.d2l
1068
- assert_equal 1.0, cls.d2f
1069
-
1070
- assert_equal 2.0, cls.hard_i2f(1)
1071
- assert_equal 4.0, cls.hard_i2f(-2)
1072
840
  end
1073
841
 
1074
842
  def test_set
@@ -1092,6 +860,7 @@ class JVMCompilerTest < Test::Unit::TestCase
1092
860
  assert_equal(true, cls.foo("a"))
1093
861
  assert_equal(false, cls.foo(nil))
1094
862
  end
863
+
1095
864
  def test_if_expr
1096
865
  cls, = compile(<<-EOF)
1097
866
  def foo(a:int)
@@ -1112,7 +881,7 @@ class JVMCompilerTest < Test::Unit::TestCase
1112
881
  def test_and
1113
882
  cls, = compile(<<-EOF)
1114
883
  def bool(n:String, x:boolean)
1115
- puts n
884
+ System.out.println n
1116
885
  x
1117
886
  end
1118
887
 
@@ -1121,7 +890,7 @@ class JVMCompilerTest < Test::Unit::TestCase
1121
890
  end
1122
891
 
1123
892
  def str(n:String, x:String)
1124
- puts n
893
+ System.out.println n
1125
894
  x
1126
895
  end
1127
896
 
@@ -1231,7 +1000,7 @@ class JVMCompilerTest < Test::Unit::TestCase
1231
1000
  def test_or
1232
1001
  cls, = compile(<<-EOF)
1233
1002
  def bool(n:String, x:boolean)
1234
- puts n
1003
+ System.out.println n
1235
1004
  x
1236
1005
  end
1237
1006
 
@@ -1240,7 +1009,7 @@ class JVMCompilerTest < Test::Unit::TestCase
1240
1009
  end
1241
1010
 
1242
1011
  def str(n:String, x:String)
1243
- puts n
1012
+ System.out.println n
1244
1013
  x
1245
1014
  end
1246
1015
 
@@ -1388,10 +1157,9 @@ class JVMCompilerTest < Test::Unit::TestCase
1388
1157
  assert_equal([nil, "x", nil], f.a.to_a)
1389
1158
  end
1390
1159
 
1391
-
1392
1160
  def test_literal_array
1393
1161
  cls, = compile(<<-EOF)
1394
- def foo; puts "hello"; nil; end
1162
+ def foo; System.out.println "hello"; nil; end
1395
1163
  def expr
1396
1164
  [foo]
1397
1165
  end
@@ -1433,7 +1201,7 @@ class JVMCompilerTest < Test::Unit::TestCase
1433
1201
  /foo/.split('barfoobaz')
1434
1202
  end
1435
1203
  def puts
1436
- puts split
1204
+ System.out.println split
1437
1205
  end
1438
1206
  EOF
1439
1207
 
@@ -1458,17 +1226,18 @@ class JVMCompilerTest < Test::Unit::TestCase
1458
1226
  end
1459
1227
  end
1460
1228
 
1461
- puts A1.new.foo("Hi")
1462
- puts B1.new.foo("There")
1229
+ System.out.println A1.new.foo("Hi")
1230
+ System.out.println B1.new.foo("There")
1463
1231
  EOF
1464
1232
 
1465
1233
  assert_output("Hi\nThere\n") do
1466
1234
  cls.main(nil)
1467
1235
  end
1468
1236
  end
1237
+
1469
1238
  def test_super
1470
1239
  cls, = compile(<<-EOF)
1471
- class Foo
1240
+ class SuperEqual
1472
1241
  def equals(other:Object); super(other); end
1473
1242
  end
1474
1243
  EOF
@@ -1480,7 +1249,7 @@ class JVMCompilerTest < Test::Unit::TestCase
1480
1249
 
1481
1250
  def test_method_lookup_with_overrides
1482
1251
  cls, = compile(<<-EOF)
1483
- class Bar; implements Runnable
1252
+ class Bar implements Runnable
1484
1253
  def foo(x:Bar)
1485
1254
  Thread.new(x)
1486
1255
  end
@@ -1496,7 +1265,7 @@ class JVMCompilerTest < Test::Unit::TestCase
1496
1265
  def test_optional_args
1497
1266
  cls, = compile(<<-EOF)
1498
1267
  def foo(a:int, b:int = 1, c:int = 2)
1499
- puts a; puts b; puts c
1268
+ System.out.println a; System.out.println b; System.out.println c
1500
1269
  end
1501
1270
  foo(0)
1502
1271
  foo(0,0)
@@ -1509,7 +1278,7 @@ class JVMCompilerTest < Test::Unit::TestCase
1509
1278
 
1510
1279
  def test_field_read
1511
1280
  cls, = compile(<<-EOF)
1512
- puts System.out.getClass.getName
1281
+ System.out.println System.out.getClass.getName
1513
1282
  EOF
1514
1283
  assert_output("java.io.PrintStream\n") do
1515
1284
  cls.main([].to_java :String)
@@ -1529,101 +1298,10 @@ class JVMCompilerTest < Test::Unit::TestCase
1529
1298
  cls.make_one(nil)
1530
1299
  end
1531
1300
 
1532
- def test_block_with_duby_interface
1533
- cls, interface = compile(<<-EOF)
1534
- interface MyProc do
1535
- def call; returns :void; end
1536
- end
1537
- def foo(b:MyProc)
1538
- b.call
1539
- end
1540
- def bar
1541
- foo {puts "Hi"}
1542
- end
1543
- EOF
1544
- assert_output("Hi\n") do
1545
- cls.bar
1546
- end
1547
- end
1548
-
1549
- def test_duby_iterable
1550
- cls, = compile(<<-EOF)
1551
- import java.util.Iterator
1552
- class MyIterator; implements Iterable, Iterator
1553
- def initialize(x:Object)
1554
- @next = x
1555
- end
1556
-
1557
- def hasNext
1558
- @next != nil
1559
- end
1560
-
1561
- def next
1562
- result = @next
1563
- @next = nil
1564
- result
1565
- end
1566
-
1567
- def iterator
1568
- self
1569
- end
1570
-
1571
- def remove
1572
- raise UnsupportedOperationException
1573
- end
1574
-
1575
- def self.test(x:String)
1576
- MyIterator.new(x).each {|y| puts y}
1577
- end
1578
- end
1579
- EOF
1580
-
1581
- assert_output("Hi\n") do
1582
- cls.test("Hi")
1583
- end
1584
- end
1585
-
1586
- def test_java_lang_cast
1587
- cls, = compile(<<-EOF)
1588
- def foo(a:Object)
1589
- Integer(a).intValue
1590
- end
1591
- EOF
1592
-
1593
- assert_equal(2, cls.foo(java.lang.Integer.new(2)))
1594
- end
1595
-
1596
- def test_array_cast
1597
- cls, = compile(<<-EOF)
1598
- def foo(a:Object)
1599
- bar(String[].cast(a))
1600
- end
1601
-
1602
- def bar(a:String[])
1603
- a[0]
1604
- end
1605
- EOF
1606
-
1607
- assert_equal("foo", cls.foo(["foo", "bar"].to_java(:string)))
1608
-
1609
- cls, = compile(<<-EOF)
1610
- def foo(a:Object)
1611
- bar(int[].cast(a))
1612
- end
1613
-
1614
- def bar(a:int[])
1615
- a[0]
1616
- end
1617
- EOF
1618
-
1619
- assert_equal(2, cls.foo([2, 3].to_java(:int)))
1620
-
1621
- end
1622
-
1623
1301
  def test_string_interpolation
1624
1302
  cls, = compile(<<-EOF)
1625
1303
  def foo(name:String)
1626
- print "Hello \#{name}."
1304
+ System.out.print "Hello \#{name}."
1627
1305
  end
1628
1306
  EOF
1629
1307
 
@@ -1633,7 +1311,7 @@ class JVMCompilerTest < Test::Unit::TestCase
1633
1311
 
1634
1312
  cls, = compile(<<-EOF)
1635
1313
  def foo(x:int)
1636
- print "\#{x += 1}"
1314
+ System.out.print "\#{x += 1}"
1637
1315
  x
1638
1316
  end
1639
1317
  EOF
@@ -1680,9 +1358,9 @@ class JVMCompilerTest < Test::Unit::TestCase
1680
1358
  def test_evaluation_order
1681
1359
  cls, = compile(<<-EOF)
1682
1360
  def call(a:int, b:int, c:int)
1683
- print "\#{a}, \#{b}, \#{c}"
1361
+ System.out.print "\#{a}, \#{b}, \#{c}"
1684
1362
  end
1685
-
1363
+
1686
1364
  def test_call(a:int)
1687
1365
  call(a, if a < 10;a+=1;a;else;a;end, a)
1688
1366
  end
@@ -1702,7 +1380,7 @@ class JVMCompilerTest < Test::Unit::TestCase
1702
1380
  def test_inner_class
1703
1381
  cls, = compile(<<-EOF)
1704
1382
  def foo
1705
- Character.UnicodeBlock.ARROWS
1383
+ Character::UnicodeBlock.ARROWS
1706
1384
  end
1707
1385
  EOF
1708
1386
 
@@ -1710,6 +1388,18 @@ class JVMCompilerTest < Test::Unit::TestCase
1710
1388
  assert_equal("java.lang.Character$UnicodeBlock", subset.java_class.name)
1711
1389
  end
1712
1390
 
1391
+ def test_lowercase_inner_class
1392
+ cls, = compile(<<-EOF)
1393
+ import org.foo.LowerCaseInnerClass
1394
+
1395
+ def foo
1396
+ LowerCaseInnerClass.inner.field
1397
+ end
1398
+ EOF
1399
+
1400
+ assert_equal(1234, cls.foo)
1401
+ end
1402
+
1713
1403
  def test_class_literal
1714
1404
  cls, = compile(<<-EOF)
1715
1405
  def foo
@@ -1725,46 +1415,10 @@ class JVMCompilerTest < Test::Unit::TestCase
1725
1415
  def string(x:Object)
1726
1416
  x.kind_of?(String)
1727
1417
  end
1728
-
1729
- def dynamic(c:Class, o:Object)
1730
- o.kind_of?(c)
1731
- end
1732
1418
  EOF
1733
1419
 
1734
1420
  assert_equal(true, cls.string("foo"))
1735
1421
  assert_equal(false, cls.string(2))
1736
- assert_equal(true, cls.dynamic(java.lang.String, "foo"))
1737
- assert_equal(true, cls.dynamic(java.lang.Object, "foo"))
1738
- assert_equal(false, cls.dynamic(java.lang.Object, nil))
1739
- end
1740
-
1741
- def test_static_import
1742
- cls, = compile(<<-EOF)
1743
- import java.util.Arrays
1744
- include Arrays
1745
- def list(x:Object[])
1746
- asList(x)
1747
- end
1748
- EOF
1749
-
1750
- o = ["1", "2", "3"].to_java(:object)
1751
- list = cls.list(o)
1752
- assert_kind_of(Java::JavaUtil::List, list)
1753
- assert_equal(["1", "2", "3"], list.to_a)
1754
-
1755
- cls, = compile(<<-EOF)
1756
- import java.util.Arrays
1757
- class StaticImports
1758
- include Arrays
1759
- def list(x:Object[])
1760
- asList(x)
1761
- end
1762
- end
1763
- EOF
1764
-
1765
- list = cls.new.list(o)
1766
- assert_kind_of(Java::JavaUtil::List, list)
1767
- assert_equal(["1", "2", "3"], list.to_a)
1768
1422
  end
1769
1423
 
1770
1424
  # TODO: need a writable field somewhere...
@@ -1788,7 +1442,7 @@ class JVMCompilerTest < Test::Unit::TestCase
1788
1442
  class Append
1789
1443
  class << self
1790
1444
  def hi
1791
- print 'Static Hello'
1445
+ System.out.print 'Static Hello'
1792
1446
  end
1793
1447
  end
1794
1448
  end
@@ -1801,80 +1455,8 @@ class JVMCompilerTest < Test::Unit::TestCase
1801
1455
  assert_equal('Static Hello', output)
1802
1456
  end
1803
1457
 
1804
- def test_hashes
1805
- cls, = compile(<<-EOF)
1806
- def foo1
1807
- {a:"A", b:"B"}
1808
- end
1809
- def foo2
1810
- return {a:"A", b:"B"}
1811
- end
1812
- EOF
1813
-
1814
- map = cls.foo1
1815
- assert_equal("A", map["a"])
1816
- assert_equal("B", map["b"])
1817
- map = cls.foo2
1818
- assert_equal("A", map["a"])
1819
- assert_equal("B", map["b"])
1820
-
1821
- cls, = compile(<<-'EOF')
1822
- def set(b:Object)
1823
- map = { }
1824
- map["key"] = b
1825
- map["key"]
1826
- end
1827
- EOF
1828
-
1829
- assert_equal("foo", cls.set("foo"))
1830
- end
1831
-
1832
- def test_hash_with_value_from_static_method
1833
- cls, = compile(<<-EOF)
1834
- def foo1
1835
- {a: a, b:"B"}
1836
- end
1837
- def a
1838
- return "A"
1839
- end
1840
- EOF
1841
- assert_equal("A", cls.foo1["a"])
1842
- end
1843
-
1844
- def test_hash_with_value_from_instance_method
1845
- cls, = compile(<<-EOF)
1846
- class HashTesty
1847
- def foo1
1848
- {a: a, b:"B"}
1849
- end
1850
- def a
1851
- return "A"
1852
- end
1853
- end
1854
- EOF
1855
- assert_equal("A", cls.new.foo1["a"])
1856
- end
1857
-
1858
-
1859
- def test_loop_in_ensure
1860
- cls, = compile(<<-EOF)
1861
- begin
1862
- puts "a"
1863
- begin
1864
- puts "b"
1865
- break
1866
- end while false
1867
- puts "c"
1868
- ensure
1869
- puts "ensure"
1870
- end
1871
- EOF
1872
-
1873
- assert_output("a\nb\nc\nensure\n") { cls.main(nil) }
1874
- end
1875
-
1876
1458
  def test_return_type
1877
- assert_raise Mirah::Typer::InferenceError do
1459
+ assert_raise_kind_of Mirah::MirahError do
1878
1460
  compile(<<-EOF)
1879
1461
  class ReturnsA
1880
1462
  def a:int
@@ -1884,7 +1466,7 @@ class JVMCompilerTest < Test::Unit::TestCase
1884
1466
  EOF
1885
1467
  end
1886
1468
 
1887
- assert_raise Mirah::Typer::InferenceError do
1469
+ assert_raise_kind_of Mirah::MirahError do
1888
1470
  compile(<<-EOF)
1889
1471
  class ReturnsB
1890
1472
  def self.a:String
@@ -1899,10 +1481,10 @@ class JVMCompilerTest < Test::Unit::TestCase
1899
1481
  abstract_class, concrete_class = compile(<<-EOF)
1900
1482
  abstract class Abstract
1901
1483
  abstract def foo:void; end
1902
- def bar; puts "bar"; end
1484
+ def bar; System.out.println "bar"; end
1903
1485
  end
1904
1486
  class Concrete < Abstract
1905
- def foo; puts :foo; end
1487
+ def foo; System.out.println :foo; end
1906
1488
  end
1907
1489
  EOF
1908
1490
 
@@ -1919,7 +1501,7 @@ class JVMCompilerTest < Test::Unit::TestCase
1919
1501
  def test_return_void
1920
1502
  script, = compile(<<-EOF)
1921
1503
  def foo:void
1922
- puts :hi
1504
+ System.out.println :hi
1923
1505
  return
1924
1506
  end
1925
1507
  EOF
@@ -1930,15 +1512,15 @@ class JVMCompilerTest < Test::Unit::TestCase
1930
1512
  def test_package
1931
1513
  script, cls = compile(<<-EOF)
1932
1514
  package foo
1933
-
1934
- # package foo.bar {
1935
- # class PackagedBar
1936
- # def self.dosomething
1937
- # "bar"
1938
- # end
1939
- # end
1940
- # }
1941
-
1515
+
1516
+ package foo.bar {
1517
+ class PackagedBar
1518
+ def self.dosomething
1519
+ "bar"
1520
+ end
1521
+ end
1522
+ }
1523
+
1942
1524
  def dosomething
1943
1525
  "foo"
1944
1526
  end
@@ -1948,9 +1530,8 @@ class JVMCompilerTest < Test::Unit::TestCase
1948
1530
  assert_equal('foo', package)
1949
1531
  assert_equal('foo', script.dosomething)
1950
1532
 
1951
- # TODO move package to the parser so we can support blocks
1952
- # assert_equal('bar', cls.dosomething)
1953
- # assert_equal("foo.bar.PackagedBar", cls.java_class.name)
1533
+ assert_equal('bar', cls.dosomething)
1534
+ assert_equal("foo.bar.PackagedBar", cls.java_class.name)
1954
1535
  end
1955
1536
 
1956
1537
  def test_not
@@ -1976,52 +1557,16 @@ class JVMCompilerTest < Test::Unit::TestCase
1976
1557
  begin
1977
1558
  raise "Foo"
1978
1559
  rescue => b
1979
- puts a
1980
- puts b.getMessage
1560
+ System.out.println a
1561
+ System.out.println b.getMessage
1981
1562
  end
1982
- puts b
1563
+ System.out.println b
1983
1564
  end
1984
1565
  EOF
1985
1566
 
1986
1567
  assert_output("1\nFoo\n2\n") { cls.foo }
1987
1568
  end
1988
1569
 
1989
- def test_scoped_self_through_method_call
1990
- cls, = compile(<<-EOF)
1991
- class ScopedSelfThroughMethodCall
1992
- def emptyMap
1993
- {}
1994
- end
1995
-
1996
- def foo
1997
- emptyMap["a"] = "A"
1998
- end
1999
- end
2000
- EOF
2001
-
2002
- # just make sure it can execute
2003
- m = cls.new.foo
2004
- end
2005
-
2006
- def test_self_call_preserves_scope
2007
- cls, = compile(<<-EOF)
2008
- class SelfCallPreservesScope
2009
- def key
2010
- "key"
2011
- end
2012
-
2013
- def foo
2014
- map = {}
2015
- map[key] = "value"
2016
- map
2017
- end
2018
- end
2019
- EOF
2020
-
2021
- map = cls.new.foo
2022
- assert_equal("value", map["key"])
2023
- end
2024
-
2025
1570
  def test_wide_nonexpressions
2026
1571
  script, cls1, cls2 = compile(<<-EOF)
2027
1572
  class WideA
@@ -2029,18 +1574,18 @@ class JVMCompilerTest < Test::Unit::TestCase
2029
1574
  2.5
2030
1575
  end
2031
1576
  end
2032
-
1577
+
2033
1578
  class WideB < WideA
2034
1579
  def a
2035
1580
  super
2036
1581
  3.5
2037
1582
  end
2038
1583
  end
2039
-
1584
+
2040
1585
  def self.b
2041
1586
  1.5
2042
1587
  end
2043
-
1588
+
2044
1589
  1.5
2045
1590
  WideA.new.a
2046
1591
  WideB.new.a
@@ -2050,27 +1595,6 @@ class JVMCompilerTest < Test::Unit::TestCase
2050
1595
  script.main(nil)
2051
1596
  end
2052
1597
 
2053
- def test_parameter_used_in_block
2054
- cls, = compile(<<-EOF)
2055
- def foo(x:String):void
2056
- thread = Thread.new do
2057
- puts "Hello \#{x}"
2058
- end
2059
- begin
2060
- thread.run
2061
- thread.join
2062
- rescue
2063
- puts "Uh Oh!"
2064
- end
2065
- end
2066
-
2067
- foo('there')
2068
- EOF
2069
- assert_output("Hello there\n") do
2070
- cls.main(nil)
2071
- end
2072
- end
2073
-
2074
1598
  def test_colon2
2075
1599
  cls, = compile(<<-EOF)
2076
1600
  def foo
@@ -2091,22 +1615,22 @@ class JVMCompilerTest < Test::Unit::TestCase
2091
1615
  entry = java.util.HashMap.new(:a => 1).entrySet.iterator.next
2092
1616
  assert_equal(entry, cls.foo(entry))
2093
1617
  end
2094
-
1618
+
2095
1619
  def test_covariant_arrays
2096
1620
  cls, = compile(<<-EOF)
2097
- puts java::util::Arrays.toString(String[5])
1621
+ System.out.println java::util::Arrays.toString(String[5])
2098
1622
  EOF
2099
-
1623
+
2100
1624
  assert_output("[null, null, null, null, null]\n") do
2101
1625
  cls.main(nil)
2102
1626
  end
2103
1627
  end
2104
-
1628
+
2105
1629
  def test_getClass_on_object_array
2106
1630
  cls, = compile(<<-EOF)
2107
- puts Object[0].getClass.getName
1631
+ System.out.println Object[0].getClass.getName
2108
1632
  EOF
2109
-
1633
+
2110
1634
  assert_output("[Ljava.lang.Object;\n") do
2111
1635
  cls.main(nil)
2112
1636
  end
@@ -2125,7 +1649,7 @@ class JVMCompilerTest < Test::Unit::TestCase
2125
1649
 
2126
1650
  cls, = compile(<<-EOF)
2127
1651
  a = nil
2128
- puts a
1652
+ System.out.println a
2129
1653
  EOF
2130
1654
 
2131
1655
  assert_output("null\n") do
@@ -2136,27 +1660,69 @@ class JVMCompilerTest < Test::Unit::TestCase
2136
1660
  def test_long_generation
2137
1661
  cls, = compile(<<-EOF)
2138
1662
  c = 2_000_000_000_000
2139
- puts c
1663
+ System.out.println c
2140
1664
  EOF
2141
1665
  end
2142
1666
 
2143
1667
  def test_missing_class_with_block_raises_inference_error
2144
- assert_raises Typer::InferenceError do
1668
+ # TODO(ribrdb): What is this test for?
1669
+ ex = assert_raise Mirah::MirahError do
2145
1670
  compile("Interface Implements_Go do; end")
2146
1671
  end
1672
+ assert_equal("Cannot find class Implements_Go", ex.message)
2147
1673
  end
2148
-
1674
+
2149
1675
  def test_bool_equality
2150
- cls, = compile("puts true == false")
1676
+ cls, = compile("System.out.println true == false")
2151
1677
  assert_output("false\n") do
2152
1678
  cls.main(nil)
2153
1679
  end
2154
1680
  end
2155
-
1681
+
2156
1682
  def test_bool_inequality
2157
- cls, = compile("puts true != false")
1683
+ cls, = compile("System.out.println true != false")
2158
1684
  assert_output("true\n") do
2159
1685
  cls.main(nil)
2160
1686
  end
2161
1687
  end
1688
+
1689
+ def test_field_setter_wit_nil
1690
+ cls, = compile(<<-EOF)
1691
+ import mirah.lang.ast.*
1692
+ a = Arguments.new
1693
+ a.block = nil
1694
+ print "OK"
1695
+ EOF
1696
+
1697
+ assert_output("OK") { cls.main(nil) }
1698
+ end
1699
+
1700
+
1701
+ def test_dynamic_works_ok_for_types_widenable_to_object
1702
+ cls, = compile(<<-EOF)
1703
+ def dyno qux:dynamic
1704
+ puts qux
1705
+ end
1706
+ dyno 1
1707
+ dyno "hello"
1708
+ dyno ["im","an","array"]
1709
+ EOF
1710
+ assert_output("1\nhello\n[im, an, array]\n") { cls.main(nil) }
1711
+ end
1712
+
1713
+
1714
+ def test_dynamic_fails_reasonably_on_pre_1_7_target
1715
+ ex = assert_raises MirahError do
1716
+ compile(<<-EOF, :java_version => '1.6')
1717
+ def dyno qux:dynamic
1718
+ puts qux
1719
+ qux.toString
1720
+ end
1721
+ dyno 1
1722
+ dyno "hello"
1723
+ dyno ["im","an","array"]
1724
+ EOF
1725
+ end
1726
+ assert_equal "Target JVM version: 1.6 doesn't support invoke dynamic", ex.message
1727
+ end
2162
1728
  end