mirah 0.1.2-java → 0.1.3-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 (102) hide show
  1. checksums.yaml +4 -4
  2. data/History.txt +225 -0
  3. data/Rakefile +108 -315
  4. data/TODO.md +100 -0
  5. data/bin/bundler +16 -0
  6. data/bin/rake +16 -0
  7. data/dist/mirahc.jar +0 -0
  8. data/examples/appengine/Readme +0 -1
  9. data/examples/literals.mirah +17 -0
  10. data/examples/macros/string_each_char.mirah +1 -1
  11. data/lib/mirah.rb +11 -21
  12. data/lib/mirah/transform/transformer.rb +1 -2
  13. data/lib/mirah/util/class_loader.rb +1 -1
  14. data/lib/mirah/util/logging.rb +0 -63
  15. data/lib/mirah/util/process_errors.rb +1 -0
  16. data/lib/mirah/version.rb +1 -1
  17. data/{examples/simple_class.mirah~ → test/artifacts/jar_test.rb} +7 -11
  18. data/{lib/mirah/commands.rb → test/artifacts/jruby_test.rb} +8 -5
  19. data/test/core/typer_test.rb +29 -11
  20. data/test/core/util/argument_processor_test.rb +24 -23
  21. data/test/core/util/class_loader_test.rb +7 -4
  22. data/test/core/util/{compilation_state_test.rb → jvm_version_test.rb} +20 -16
  23. data/test/fixtures/org/foo/ImplicitClassRetAnno.java +4 -0
  24. data/test/fixtures/org/foo/IntAnno.java +9 -0
  25. data/test/jvm/annotations_test.rb +11 -11
  26. data/test/jvm/blocks_test.rb +16 -12
  27. data/test/jvm/constructors_test.rb +8 -8
  28. data/test/jvm/enumerable_test.rb +48 -24
  29. data/test/jvm/generics_test.rb +3 -7
  30. data/test/jvm/import_test.rb +14 -0
  31. data/test/jvm/interface_test.rb +9 -24
  32. data/test/jvm/jvm_commands_test.rb +22 -4
  33. data/test/jvm/jvm_compiler_test.rb +124 -79
  34. data/test/jvm/list_extensions_test.rb +1 -1
  35. data/test/jvm/macros_test.rb +67 -14
  36. data/test/jvm/main_method_test.rb +1 -1
  37. data/test/jvm/new_backend_test_helper.rb +100 -3
  38. data/{lib/mirah/jvm/types/bitescript_ext.rb → test/jvm/static_fields_test.rb} +22 -21
  39. data/test/mirrors/base_type_test.rb +4 -3
  40. data/test/mirrors/bytecode_mirror_test.rb +35 -15
  41. data/test/mirrors/generics_test.rb +14 -5
  42. data/test/mirrors/member_test.rb +2 -1
  43. data/test/mirrors/method_lookup_test.rb +18 -6
  44. data/test/mirrors/mirrors_test.rb +87 -20
  45. data/test/mirrors/simple_async_mirror_loader_test.rb +7 -3
  46. data/test/mirrors/simple_mirror_loader_test.rb +5 -5
  47. data/test/test_helper.rb +25 -1
  48. metadata +18 -78
  49. data/bin/mirahp +0 -27
  50. data/bin/mirahp.cmd +0 -16
  51. data/examples/Fib.class +0 -0
  52. data/javalib/mirah-bootstrap.jar +0 -0
  53. data/javalib/mirah-builtins.jar +0 -0
  54. data/javalib/mirah-compiler.jar +0 -0
  55. data/javalib/mirah-mirrors.jar +0 -0
  56. data/javalib/mirah-newast-transitional.jar +0 -0
  57. data/javalib/mirah-parser.jar +0 -0
  58. data/javalib/mirah-util.jar +0 -0
  59. data/lib/mirah/ast.rb +0 -43
  60. data/lib/mirah/ast/scope.rb +0 -262
  61. data/lib/mirah/commands/base.rb +0 -59
  62. data/lib/mirah/commands/compile.rb +0 -39
  63. data/lib/mirah/commands/parse.rb +0 -36
  64. data/lib/mirah/commands/run.rb +0 -78
  65. data/lib/mirah/generator.rb +0 -150
  66. data/lib/mirah/jvm/compiler.rb +0 -50
  67. data/lib/mirah/jvm/compiler/base.rb +0 -421
  68. data/lib/mirah/jvm/compiler/jvm_bytecode.rb +0 -1194
  69. data/lib/mirah/jvm/method_lookup.rb +0 -307
  70. data/lib/mirah/jvm/types.rb +0 -45
  71. data/lib/mirah/jvm/types/array_type.rb +0 -60
  72. data/lib/mirah/jvm/types/ast_ext.rb +0 -31
  73. data/lib/mirah/jvm/types/basic_types.rb +0 -41
  74. data/lib/mirah/jvm/types/block_type.rb +0 -15
  75. data/lib/mirah/jvm/types/boolean.rb +0 -70
  76. data/lib/mirah/jvm/types/enumerable.rb +0 -80
  77. data/lib/mirah/jvm/types/extensions.rb +0 -110
  78. data/lib/mirah/jvm/types/factory.rb +0 -830
  79. data/lib/mirah/jvm/types/floats.rb +0 -99
  80. data/lib/mirah/jvm/types/generic_type.rb +0 -72
  81. data/lib/mirah/jvm/types/implicit_nil_type.rb +0 -29
  82. data/lib/mirah/jvm/types/integers.rb +0 -131
  83. data/lib/mirah/jvm/types/interface_definition.rb +0 -20
  84. data/lib/mirah/jvm/types/intrinsics.rb +0 -385
  85. data/lib/mirah/jvm/types/literals.rb +0 -89
  86. data/lib/mirah/jvm/types/meta_type.rb +0 -54
  87. data/lib/mirah/jvm/types/methods.rb +0 -946
  88. data/lib/mirah/jvm/types/null_type.rb +0 -39
  89. data/lib/mirah/jvm/types/number.rb +0 -184
  90. data/lib/mirah/jvm/types/primitive_type.rb +0 -76
  91. data/lib/mirah/jvm/types/source_mirror.rb +0 -274
  92. data/lib/mirah/jvm/types/type.rb +0 -311
  93. data/lib/mirah/jvm/types/type_definition.rb +0 -72
  94. data/lib/mirah/jvm/types/void_type.rb +0 -19
  95. data/lib/mirah/util/compilation_state.rb +0 -60
  96. data/test/core/commands_test.rb +0 -89
  97. data/test/core/generator_test.rb +0 -26
  98. data/test/fixtures/org/foo/LowerCaseInnerClass$inner.class +0 -0
  99. data/test/fixtures/org/foo/LowerCaseInnerClass.class +0 -0
  100. data/test/jvm/bytecode_test_helper.rb +0 -193
  101. data/test/jvm/factory_test.rb +0 -28
  102. data/test/jvm/java_typer_test.rb +0 -283
@@ -14,12 +14,8 @@
14
14
  # limitations under the License.
15
15
 
16
16
  require 'test_helper'
17
- require 'jvm/bytecode_test_helper'
18
- class TestGenerics < Test::Unit::TestCase
19
17
 
20
- def parse_and_type code, name=tmp_script_name
21
- parse_and_resolve_types name, code
22
- end
18
+ class GenericsTest < Test::Unit::TestCase
23
19
 
24
20
  def test_generics_calls_collections
25
21
  cls, = compile(<<-EOF)
@@ -28,7 +24,7 @@ class TestGenerics < Test::Unit::TestCase
28
24
  foo = ArrayList.new()
29
25
  foo.add("first string")
30
26
  foo.add("second string")
31
- System.out.println(foo.get(1).substring(2))
27
+ puts(foo.get(1).substring(2))
32
28
  EOF
33
29
 
34
30
  assert_output("cond string\n") do
@@ -45,7 +41,7 @@ class TestGenerics < Test::Unit::TestCase
45
41
  foo.add("second string")
46
42
  bar = ArrayList.new()
47
43
  bar.add(foo)
48
- System.out.println(bar.get(0).get(1).substring(2))
44
+ puts(bar.get(0).get(1).substring(2))
49
45
  EOF
50
46
 
51
47
  assert_output("cond string\n") do
@@ -78,4 +78,18 @@ class ImportTest < Test::Unit::TestCase
78
78
  assert_equal(["1", "2", "3"], list.to_a)
79
79
  end
80
80
 
81
+ def test_static_import_late_resolve
82
+ cls, = compile(<<-EOF)
83
+ import static StaticImports2.*
84
+ doFoo()
85
+
86
+ class StaticImports2
87
+ def self.doFoo
88
+ puts :hi
89
+ end
90
+ end
91
+ EOF
92
+ assert_output("hi\n") { cls.main(nil) }
93
+ end
94
+
81
95
  end
@@ -83,31 +83,16 @@ class InterfaceTest < Test::Unit::TestCase
83
83
  EOF
84
84
  end
85
85
 
86
- def test_interface_implementation_with_array_params_requires_type_information
86
+ def test_interface_implementation_with_array_params_doesnt_requires_type_information
87
87
  interface, a_impl = compile(<<-EOF)
88
- interface InterfaceWithArrays
89
- def arr(messages:String[]):int; end
90
- end
91
-
92
- class ExplicitArrImpl implements InterfaceWithArrays
93
- def blah(s:String[]) s.length ; end
94
- def arr(messages:String[]) blah messages ; end
95
- end
96
- EOF
97
-
98
- # this is the current behavior. I think we should fix it. nh
99
- error = assert_raises Mirah::MirahError do
100
- interface, a_impl = compile(<<-EOF)
101
- interface InterfaceWithArrays
102
- def arr(messages:String[]):int; end
103
- end
88
+ interface InterfaceWithArrays
89
+ def arr(messages:String[]):int; end
90
+ end
104
91
 
105
- class ImplicitArrImpl implements InterfaceWithArrays
106
- def blah(s:String[]) s.length ; end
107
- def arr(messages) blah messages ; end
108
- end
109
- EOF
110
- end
111
- assert_equal "Cannot find instance method blah(java.lang.String) on ImplicitArrImpl", error.message
92
+ class ImplicitArrImpl implements InterfaceWithArrays
93
+ def blah(s:String[]) s.length ; end
94
+ def arr(messages) blah messages ; end
95
+ end
96
+ EOF
112
97
  end
113
98
  end
@@ -16,19 +16,37 @@ require 'test_helper'
16
16
 
17
17
 
18
18
  class JVMCommandsTest < Test::Unit::TestCase
19
+
19
20
  def test_dash_e_eval
20
21
  assert_output "1\n" do
21
- Mirah::Commands::Run.new(['-e','puts 1']).execute
22
+ Mirah.run('-e','puts 1')
22
23
  end
23
24
  end
24
25
 
26
+ def test_force_verbose_has_logging
27
+ out = capture_output do
28
+ Mirah.run('-V', '-e','puts 1')
29
+ end
30
+ assert out.include? "Finished class DashE"
31
+ end
32
+
25
33
  def test_runtime_classpath_modifications
26
34
  assert_output "1234\n" do
27
- Mirah::Commands::Run.new(['-c', FIXTURE_TEST_DEST,
35
+ Mirah.run('-cp', FIXTURE_TEST_DEST,
36
+ '-e',
37
+ 'import org.foo.LowerCaseInnerClass
38
+ puts LowerCaseInnerClass.inner.field'
39
+ )
40
+ end
41
+ end
42
+
43
+ def test_dash_c_is_deprecated
44
+ assert_output "WARN: option -c is deprecated.\n1234\n" do
45
+ Mirah.run('-c', FIXTURE_TEST_DEST,
28
46
  '-e',
29
47
  'import org.foo.LowerCaseInnerClass
30
- puts LowerCaseInnerClass.inner.field']
31
- ).execute
48
+ puts LowerCaseInnerClass.inner.field'
49
+ )
32
50
  end
33
51
  end
34
52
  end
@@ -34,6 +34,14 @@ class JVMCompilerTest < Test::Unit::TestCase
34
34
  assert_equal(3.0, cls.foo)
35
35
  end
36
36
 
37
+ def test_unary_negation
38
+ cls, = compile("def foo; a = 1; -a; end")
39
+ assert_equal(-1, cls.foo)
40
+
41
+ cls, = compile("def foo; a = 1; 1 + -a; end")
42
+ assert_equal(0, cls.foo)
43
+ end
44
+
37
45
  def test_subtraction
38
46
  cls, = compile("def foo; a = 3; b = 2; a - b; end")
39
47
  assert_equal(1, cls.foo)
@@ -101,6 +109,25 @@ class JVMCompilerTest < Test::Unit::TestCase
101
109
  assert_equal(6, cls.foo)
102
110
  end
103
111
 
112
+ def test_negate
113
+ cls, = compile("def foo; a = 5; -a; end")
114
+ assert_equal(-5, cls.foo)
115
+ cls, = compile("def foo; a = 7.5; -a; end")
116
+ assert_equal(-7.5, cls.foo)
117
+ end
118
+
119
+ def test_nan
120
+ cls, = compile("def foo(a:double); if a < 0 then 1 else 2 end; end")
121
+ assert_equal(1, cls.foo(-1))
122
+ assert_equal(2, cls.foo(0))
123
+ assert_equal(2, cls.foo(java.lang.Double::NaN))
124
+
125
+ cls, = compile("def foo(a:double); a > 0 ? 1 : 2; end")
126
+ assert_equal(1, cls.foo(1))
127
+ assert_equal(2, cls.foo(-1))
128
+ assert_equal(2, cls.foo(java.lang.Double::NaN))
129
+ end
130
+
104
131
  def test_return
105
132
  cls, = compile("def foo; return 1; end")
106
133
  assert_equal(1, cls.foo)
@@ -193,9 +220,11 @@ class JVMCompilerTest < Test::Unit::TestCase
193
220
  end
194
221
 
195
222
  def test_object_array
196
- cls, = compile("import java.lang.Object;def foo; a = Object[2];end")
197
- assert_equal(Java::JavaLang::Object[].java_class, cls.foo.class.java_class)
198
- assert_equal([nil, nil], cls.foo.to_a)
223
+ pend_on_jruby("1.7.13") do
224
+ cls, = compile("import java.lang.Object;def foo; a = Object[2];end")
225
+ assert_equal(Java::JavaLang::Object[].java_class, cls.foo.class.java_class)
226
+ assert_equal([nil, nil], cls.foo.to_a)
227
+ end
199
228
  end
200
229
 
201
230
  def test_void_selfcall
@@ -218,12 +247,12 @@ class JVMCompilerTest < Test::Unit::TestCase
218
247
  a, b = compile(<<-EOF)
219
248
  class VoidBase
220
249
  def foo:void
221
- System.out.println "foo"
250
+ puts "foo"
222
251
  end
223
252
  end
224
253
  class VoidChain < VoidBase
225
254
  def bar:void
226
- System.out.println "bar"
255
+ puts "bar"
227
256
  end
228
257
 
229
258
  def self.foobar
@@ -241,12 +270,12 @@ class JVMCompilerTest < Test::Unit::TestCase
241
270
  end
242
271
 
243
272
  def test_class_name_from_file_with_underscore
244
- foo, = compile("System.out.println 'blah'", :name => 'class_name_test.mirah')
273
+ foo, = compile("puts 'blah'", :name => 'class_name_test.mirah')
245
274
  assert_equal('ClassNameTest', foo.java_class.name)
246
275
  end
247
276
 
248
277
  def test_class_name_from_file_with_dash
249
- foo, = compile("System.out.println 'blah'", :name => 'class-dash-test.mirah')
278
+ foo, = compile("puts 'blah'", :name => 'class-dash-test.mirah')
250
279
  assert_equal('ClassDashTest', foo.java_class.name)
251
280
  end
252
281
 
@@ -415,25 +444,25 @@ class JVMCompilerTest < Test::Unit::TestCase
415
444
 
416
445
  def test_loop
417
446
  cls, = compile(
418
- 'def foo(a:int);while a > 0; a -= 1; System.out.println ".";end;end')
447
+ 'def foo(a:int);while a > 0; a -= 1; puts ".";end;end')
419
448
  assert_equal('', capture_output{cls.foo(0)})
420
449
  assert_equal(".\n", capture_output{cls.foo(1)})
421
450
  assert_equal(".\n.\n", capture_output{cls.foo(2)})
422
451
 
423
452
  cls, = compile(
424
- 'def foo(a:int);begin;a -= 1; System.out.println ".";end while a > 0;end')
453
+ 'def foo(a:int);begin;a -= 1; puts ".";end while a > 0;end')
425
454
  assert_equal(".\n", capture_output{cls.foo(0)})
426
455
  assert_equal(".\n", capture_output{cls.foo(1)})
427
456
  assert_equal(".\n.\n", capture_output{cls.foo(2)})
428
457
 
429
458
  cls, = compile(
430
- 'def foo(a:int);until a <= 0; a -= 1; System.out.println ".";end;end')
459
+ 'def foo(a:int);until a <= 0; a -= 1; puts ".";end;end')
431
460
  assert_equal('', capture_output{cls.foo(0)})
432
461
  assert_equal(".\n", capture_output{cls.foo(1)})
433
462
  assert_equal(".\n.\n", capture_output{cls.foo(2)})
434
463
 
435
464
  cls, = compile(
436
- 'def foo(a:int);begin;a -= 1; System.out.println ".";end until a <= 0;end')
465
+ 'def foo(a:int);begin;a -= 1; puts ".";end until a <= 0;end')
437
466
  assert_equal(".\n", capture_output{cls.foo(0)})
438
467
  assert_equal(".\n", capture_output{cls.foo(1)})
439
468
  assert_equal(".\n.\n", capture_output{cls.foo(2)})
@@ -857,7 +886,7 @@ class JVMCompilerTest < Test::Unit::TestCase
857
886
  def test_and
858
887
  cls, = compile(<<-EOF)
859
888
  def bool(n:String, x:boolean)
860
- System.out.println n
889
+ puts n
861
890
  x
862
891
  end
863
892
 
@@ -866,7 +895,7 @@ class JVMCompilerTest < Test::Unit::TestCase
866
895
  end
867
896
 
868
897
  def str(n:String, x:String)
869
- System.out.println n
898
+ puts n
870
899
  x
871
900
  end
872
901
 
@@ -976,7 +1005,7 @@ class JVMCompilerTest < Test::Unit::TestCase
976
1005
  def test_or
977
1006
  cls, = compile(<<-EOF)
978
1007
  def bool(n:String, x:boolean)
979
- System.out.println n
1008
+ puts n
980
1009
  x
981
1010
  end
982
1011
 
@@ -985,7 +1014,7 @@ class JVMCompilerTest < Test::Unit::TestCase
985
1014
  end
986
1015
 
987
1016
  def str(n:String, x:String)
988
- System.out.println n
1017
+ puts n
989
1018
  x
990
1019
  end
991
1020
 
@@ -1097,45 +1126,48 @@ class JVMCompilerTest < Test::Unit::TestCase
1097
1126
  end
1098
1127
 
1099
1128
  def test_op_elem_assign
1100
- foo, = compile(<<-EOF)
1101
- class Foo4
1102
- def initialize
1103
- @i = -1
1104
- end
1129
+ pend_on_jruby("1.7.13") do
1105
1130
 
1106
- def i
1107
- @i += 1
1108
- end
1131
+ foo, = compile(<<-EOF)
1132
+ class Foo4
1133
+ def initialize
1134
+ @i = -1
1135
+ end
1109
1136
 
1110
- def a
1111
- @a
1112
- end
1137
+ def i
1138
+ @i += 1
1139
+ end
1113
1140
 
1114
- def a=(a:String[])
1115
- @a = a
1116
- end
1141
+ def a
1142
+ @a
1143
+ end
1117
1144
 
1118
- def foo(x:String)
1119
- a[i] ||= x
1120
- end
1145
+ def a=(a:String[])
1146
+ @a = a
1147
+ end
1121
1148
 
1122
- def bar(x:String)
1123
- a[i] &&= x
1149
+ def foo(x:String)
1150
+ a[i] ||= x
1151
+ end
1152
+
1153
+ def bar(x:String)
1154
+ a[i] &&= x
1155
+ end
1124
1156
  end
1125
- end
1126
- EOF
1157
+ EOF
1127
1158
 
1128
- f = foo.new
1129
- f.a_set([nil, nil, nil].to_java(:string))
1130
- assert_equal(nil, f.bar("x"))
1131
- assert_equal([nil, nil, nil], f.a.to_a)
1132
- assert_equal("x", f.foo("x"))
1133
- assert_equal([nil, "x", nil], f.a.to_a)
1159
+ f = foo.new
1160
+ f.a_set([nil, nil, nil].to_java(:string))
1161
+ assert_equal(nil, f.bar("x"))
1162
+ assert_equal([nil, nil, nil], f.a.to_a)
1163
+ assert_equal("x", f.foo("x"))
1164
+ assert_equal([nil, "x", nil], f.a.to_a)
1165
+ end
1134
1166
  end
1135
1167
 
1136
1168
  def test_literal_array
1137
1169
  cls, = compile(<<-EOF)
1138
- def foo; System.out.println "hello"; nil; end
1170
+ def foo; puts "hello"; nil; end
1139
1171
  def expr
1140
1172
  [foo]
1141
1173
  end
@@ -1177,7 +1209,7 @@ class JVMCompilerTest < Test::Unit::TestCase
1177
1209
  /foo/.split('barfoobaz')
1178
1210
  end
1179
1211
  def puts
1180
- System.out.println split
1212
+ puts split
1181
1213
  end
1182
1214
  EOF
1183
1215
 
@@ -1202,8 +1234,8 @@ class JVMCompilerTest < Test::Unit::TestCase
1202
1234
  end
1203
1235
  end
1204
1236
 
1205
- System.out.println A1.new.foo("Hi")
1206
- System.out.println B1.new.foo("There")
1237
+ puts A1.new.foo("Hi")
1238
+ puts B1.new.foo("There")
1207
1239
  EOF
1208
1240
 
1209
1241
  assert_output("Hi\nThere\n") do
@@ -1241,7 +1273,7 @@ class JVMCompilerTest < Test::Unit::TestCase
1241
1273
  def test_optional_args
1242
1274
  cls, = compile(<<-EOF)
1243
1275
  def foo(a:int, b:int = 1, c:int = 2)
1244
- System.out.println a; System.out.println b; System.out.println c
1276
+ puts a; puts b; puts c
1245
1277
  end
1246
1278
  foo(0)
1247
1279
  foo(0,0)
@@ -1254,7 +1286,7 @@ class JVMCompilerTest < Test::Unit::TestCase
1254
1286
 
1255
1287
  def test_field_read
1256
1288
  cls, = compile(<<-EOF)
1257
- System.out.println System.out.getClass.getName
1289
+ puts System.out.getClass.getName
1258
1290
  EOF
1259
1291
  assert_output("java.io.PrintStream\n") do
1260
1292
  cls.main([].to_java :String)
@@ -1457,10 +1489,10 @@ class JVMCompilerTest < Test::Unit::TestCase
1457
1489
  abstract_class, concrete_class = compile(<<-EOF)
1458
1490
  abstract class Abstract
1459
1491
  abstract def foo:void; end
1460
- def bar; System.out.println "bar"; end
1492
+ def bar; puts "bar"; end
1461
1493
  end
1462
1494
  class Concrete < Abstract
1463
- def foo; System.out.println :foo; end
1495
+ def foo; puts :foo; end
1464
1496
  end
1465
1497
  EOF
1466
1498
 
@@ -1477,7 +1509,7 @@ class JVMCompilerTest < Test::Unit::TestCase
1477
1509
  def test_return_void
1478
1510
  script, = compile(<<-EOF)
1479
1511
  def foo:void
1480
- System.out.println :hi
1512
+ puts :hi
1481
1513
  return
1482
1514
  end
1483
1515
  EOF
@@ -1533,10 +1565,10 @@ class JVMCompilerTest < Test::Unit::TestCase
1533
1565
  begin
1534
1566
  raise "Foo"
1535
1567
  rescue => b
1536
- System.out.println a
1537
- System.out.println b.getMessage
1568
+ puts a
1569
+ puts b.getMessage
1538
1570
  end
1539
- System.out.println b
1571
+ puts b
1540
1572
  end
1541
1573
  EOF
1542
1574
 
@@ -1594,7 +1626,7 @@ class JVMCompilerTest < Test::Unit::TestCase
1594
1626
 
1595
1627
  def test_covariant_arrays
1596
1628
  cls, = compile(<<-EOF)
1597
- System.out.println java::util::Arrays.toString(String[5])
1629
+ puts java::util::Arrays.toString(String[5])
1598
1630
  EOF
1599
1631
 
1600
1632
  assert_output("[null, null, null, null, null]\n") do
@@ -1604,7 +1636,7 @@ class JVMCompilerTest < Test::Unit::TestCase
1604
1636
 
1605
1637
  def test_getClass_on_object_array
1606
1638
  cls, = compile(<<-EOF)
1607
- System.out.println Object[0].getClass.getName
1639
+ puts Object[0].getClass.getName
1608
1640
  EOF
1609
1641
 
1610
1642
  assert_output("[Ljava.lang.Object;\n") do
@@ -1625,7 +1657,7 @@ class JVMCompilerTest < Test::Unit::TestCase
1625
1657
 
1626
1658
  cls, = compile(<<-EOF)
1627
1659
  a = nil
1628
- System.out.println Object(a)
1660
+ puts Object(a)
1629
1661
  EOF
1630
1662
 
1631
1663
  assert_output("null\n") do
@@ -1636,7 +1668,7 @@ class JVMCompilerTest < Test::Unit::TestCase
1636
1668
  def test_long_generation
1637
1669
  cls, = compile(<<-EOF)
1638
1670
  c = 2_000_000_000_000
1639
- System.out.println c
1671
+ puts c
1640
1672
  EOF
1641
1673
  end
1642
1674
 
@@ -1649,14 +1681,14 @@ class JVMCompilerTest < Test::Unit::TestCase
1649
1681
  end
1650
1682
 
1651
1683
  def test_bool_equality
1652
- cls, = compile("System.out.println true == false")
1684
+ cls, = compile("puts true == false")
1653
1685
  assert_output("false\n") do
1654
1686
  cls.main(nil)
1655
1687
  end
1656
1688
  end
1657
1689
 
1658
1690
  def test_bool_inequality
1659
- cls, = compile("System.out.println true != false")
1691
+ cls, = compile("puts true != false")
1660
1692
  assert_output("true\n") do
1661
1693
  cls.main(nil)
1662
1694
  end
@@ -1664,9 +1696,11 @@ class JVMCompilerTest < Test::Unit::TestCase
1664
1696
 
1665
1697
  def test_field_setter_with_nil
1666
1698
  cls, = compile(<<-EOF)
1667
- import mirah.lang.ast.*
1668
- a = Arguments.new
1669
- a.block = nil
1699
+ class FieldSetter
1700
+ attr_accessor field: String
1701
+ end
1702
+ a = FieldSetter.new
1703
+ a.field = nil
1670
1704
  print "OK"
1671
1705
  EOF
1672
1706
 
@@ -1763,28 +1797,39 @@ class JVMCompilerTest < Test::Unit::TestCase
1763
1797
  end
1764
1798
  end
1765
1799
 
1766
- def test_static_field_inheritance_lookup_with_dot
1800
+ def test_incompatible_meta_change
1767
1801
  cls, = compile(<<-EOF)
1768
- import java.util.GregorianCalendar
1769
- puts GregorianCalendar.AM
1770
- EOF
1802
+ class A < B
1803
+ def foo(a:Object)
1804
+ a.kind_of?(A)
1805
+ end
1806
+ end
1771
1807
 
1772
- assert_output "0\n" do
1773
- cls.main(nil)
1774
- end
1808
+ class B
1809
+ end
1810
+ EOF
1811
+
1812
+ a = cls.new
1813
+ assert(a.foo(a))
1775
1814
  end
1776
1815
 
1777
- def test_static_field_inheritance_lookup_with_double_colon
1778
- pend("double colon is treated special for lookup") {
1779
- cls, = compile(<<-EOF)
1780
- import java.util.GregorianCalendar
1781
- puts GregorianCalendar::AM
1816
+ def test_local_method_conflict
1817
+ cls, arg = compile(<<-EOF)
1818
+ def a; ArgType.new; end
1819
+ def foo(a:ArgType):void
1820
+ x = Object[ a ? a.bar : 0]
1821
+ puts x.length
1822
+ end
1823
+
1824
+ class ArgType
1825
+ def bar
1826
+ 2
1827
+ end
1828
+ end
1782
1829
  EOF
1783
1830
 
1784
- assert_output "0\n" do
1785
- cls.main(nil)
1786
- end
1787
- }
1831
+ assert_output("0\n") { cls.foo(nil)}
1832
+ assert_output("2\n") { cls.foo(arg.new)}
1788
1833
  end
1789
1834
 
1790
1835
  end