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
@@ -15,50 +15,51 @@
15
15
  require 'test_helper'
16
16
 
17
17
  class ArgumentProcessorTest < Test::Unit::TestCase
18
-
18
+ java_import 'org.mirah.tool.MirahArguments'
19
19
  def test_arg_dash_v_prints_version_and_has_exit_0
20
- state = Mirah::Util::CompilationState.new
21
- processor = Mirah::Util::ArgumentProcessor.new state, ["-v"]
20
+ arg_processor = MirahArguments.new
22
21
 
23
22
  assert_output "Mirah v#{Mirah::VERSION}\n" do
24
- processor.process
23
+ arg_processor.apply_args(["-v"])
25
24
  end
26
25
 
27
- assert processor.exit?
28
- assert_equal 0, processor.exit_status_code
26
+ assert arg_processor.exit?
27
+ assert_equal 0, arg_processor.exit_status
29
28
  end
30
29
 
31
30
 
32
31
  def test_on_invalid_arg_prints_error_and_exits_1
33
- state = Mirah::Util::CompilationState.new
34
- processor = Mirah::Util::ArgumentProcessor.new state, ["--some-arg"]
32
+ arg_processor = MirahArguments.new
35
33
 
36
- assert_output "unrecognized flag: --some-arg\n" do
37
- processor.process
34
+ assert_output "Unrecognized flag: --some-arg\n" do
35
+ arg_processor.apply_args(["--some-arg"])
38
36
  end
39
37
 
40
- assert processor.exit?
41
- assert_equal 1, processor.exit_status_code
38
+ assert arg_processor.exit?
39
+ assert_equal 1, arg_processor.exit_status
42
40
  end
43
41
 
44
- def test_arg_bootclasspath_sets_bootclasspath_on_compilation_state
42
+ def test_arg_bootclasspath_sets_bootclasspath_with_absolute_paths
45
43
  path = "class:path"
46
- state = Mirah::Util::CompilationState.new
47
- processor = Mirah::Util::ArgumentProcessor.new state, ["--bootclasspath", path]
48
- processor.process
44
+ arg_processor = MirahArguments.new
45
+
46
+ arg_processor.apply_args ["--bootclasspath", path]
49
47
 
50
- assert_equal path, state.bootclasspath
48
+ assert_equal path.split(":").map{|p|"file:%s" % File.expand_path(p) }.join(":"),
49
+ arg_processor.real_bootclasspath.map{|u| u.to_s }.join(":")
51
50
  end
52
51
 
53
52
  def test_dash_h_prints_help_and_exits
54
- state = Mirah::Util::CompilationState.new
55
- processor = Mirah::Util::ArgumentProcessor.new state, ["-h"]
53
+ arg_processor = MirahArguments.new
56
54
 
57
- assert_output processor.help_message + "\n" do
58
- processor.process
55
+ usage_message = capture_output do
56
+ arg_processor.apply_args ["-h"]
59
57
  end
60
58
 
61
- assert processor.exit?
62
- assert_equal 0, processor.exit_status_code
59
+ assert usage_message.include? 'mirahc [flags] <files or -e SCRIPT>'
60
+ assert usage_message.include? '-h, --help'
61
+
62
+ assert arg_processor.exit?
63
+ assert_equal 0, arg_processor.exit_status
63
64
  end
64
65
  end
@@ -15,20 +15,23 @@
15
15
  require 'test_helper'
16
16
 
17
17
  class ClassLoaderTest < Test::Unit::TestCase
18
+ java_import 'org.mirah.MirahClassLoader'
19
+ java_import 'org.mirah.IsolatedResourceLoader'
20
+
18
21
  FIXTURES = File.expand_path("#{__FILE__}/../../../fixtures/") +"/"
19
22
  A_CLASS = "#{FIXTURES}org/foo/A.class"
20
23
 
21
24
  def test_mirah_class_loader_find_class_in_map_successful
22
25
  class_map = {
23
- 'org.foo.A' => Mirah::Util::ClassLoader.binary_string(File.open(A_CLASS, 'rb') {|f| f.read })
26
+ 'org.foo.A' => Mirah::Util.binary_string(File.open(A_CLASS, 'rb') {|f| f.read })
24
27
  }
25
- class_loader = Mirah::Util::ClassLoader.new nil, class_map
28
+ class_loader = MirahClassLoader.new nil, class_map
26
29
  cls = class_loader.load_class 'org.foo.A'
27
30
  assert_equal 'org.foo.A', cls.name
28
31
  end
29
32
 
30
33
  def test_mirah_class_loader_w_missing_class_raises_class_not_found
31
- class_loader = Mirah::Util::ClassLoader.new nil, {}
34
+ class_loader = MirahClassLoader.new nil, {}
32
35
 
33
36
  begin
34
37
  klass = class_loader.find_class 'org.doesnt.exist.Class'
@@ -39,7 +42,7 @@ class ClassLoaderTest < Test::Unit::TestCase
39
42
  end
40
43
 
41
44
  def test_isolated_resource_loader_only_finds_resources_given_to_it
42
- loader = Mirah::Util::IsolatedResourceLoader.new [java.net.URL.new("file:#{FIXTURES}")]
45
+ loader = IsolatedResourceLoader.new [java.net.URL.new("file:#{FIXTURES}")]
43
46
  url = loader.get_resource "my.properties"
44
47
  assert_not_nil url
45
48
  end
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2013 The Mirah project authors. All Rights Reserved.
1
+ # Copyright (c) 2014 The Mirah project authors. All Rights Reserved.
2
2
  # All contributing project authors may be found in the NOTICE file.
3
3
  #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -14,25 +14,29 @@
14
14
  # limitations under the License.
15
15
  require 'test_helper'
16
16
 
17
- class CampilationStateTest < Test::Unit::TestCase
18
- include Mirah::Util
17
+
18
+
19
+ class JvmVersionTest < Test::Unit::TestCase
20
+ java_import 'org.mirah.jvm.compiler.JvmVersion'
21
+ java_import 'org.objectweb.asm.Opcodes'
22
+
19
23
  def test_defaults_to_current_java
20
- state = CompilationState.new
24
+ jvm_version = JvmVersion.new
21
25
  spec_version = ENV_JAVA['java.specification.version']
22
- assert_equal spec_version, state.target_jvm_version
23
- assert_equal bitescript_const(spec_version), state.bytecode_version
26
+ assert_equal spec_version, jvm_version.version_string
27
+ assert_equal opcode(spec_version), jvm_version.bytecode_version
24
28
  end
25
-
26
- %w[1.4 1.5 1.6 1.7 1.8].each do |version|
29
+
30
+ supported_versions = %w[1.4 1.5 1.6 1.7 1.8]
31
+ supported_versions.each do |version|
27
32
  define_method "test_setting_version_to_#{version.tr '.', '_'}" do
28
- state = CompilationState.new
29
- state.set_jvm_version version
30
- assert_equal version, state.target_jvm_version
31
- assert_equal bitescript_const(version), state.bytecode_version
32
- end
33
+ jvm_version = JvmVersion.new version
34
+ assert_equal version, jvm_version.version_string
35
+ assert_equal opcode(version), jvm_version.bytecode_version
36
+ end
33
37
  end
34
38
 
35
- def bitescript_const version
36
- BiteScript.const_get("JAVA#{version.gsub('.', '_')}")
39
+ def opcode spec_version
40
+ Opcodes.const_get("V#{spec_version.sub('.','_')}")
37
41
  end
38
- end
42
+ end
@@ -0,0 +1,4 @@
1
+ package org.foo;
2
+
3
+ public @interface ImplicitClassRetAnno {
4
+ }
@@ -0,0 +1,9 @@
1
+ package org.foo;
2
+
3
+ import java.lang.annotation.*;
4
+
5
+ @Retention(RetentionPolicy.RUNTIME)
6
+ public @interface IntAnno {
7
+ String name();
8
+ int value();
9
+ }
@@ -38,21 +38,21 @@ class AnnotationsTest < Test::Unit::TestCase
38
38
  end
39
39
 
40
40
  def test_annotation_with_an_integer
41
- jruby_method = Java::OrgJrubyAnno::JRubyMethod.java_class
42
-
43
41
  cls, = compile(<<-EOF)
44
- import org.jruby.*
45
- import org.jruby.anno.*
46
- import org.jruby.runtime.*
47
- import org.jruby.runtime.builtin.*
48
-
49
- $JRubyMethod["name" => ["bar"], "optional" => 1]
50
- def bar(baz:int)
42
+ import org.foo.IntAnno
43
+ class IntValAnnotation
44
+ $IntAnno[name: "bar", value: 1]
45
+ def bar
46
+ end
51
47
  end
48
+ method = IntValAnnotation.class.getMethod("bar")
49
+ anno = method.getAnnotation(IntAnno.class)
50
+ puts anno.value
52
51
  EOF
53
- method_annotation = cls.java_class.java_method('bar', :int).annotation(jruby_method)
54
52
 
55
- assert_equal 1, method_annotation.optional
53
+ assert_output "1\n" do
54
+ cls.main nil
55
+ end
56
56
  end
57
57
 
58
58
  end
@@ -61,13 +61,13 @@ class BlocksTest < Test::Unit::TestCase
61
61
  def test_simple_block
62
62
  cls, = compile(<<-EOF)
63
63
  thread = Thread.new do
64
- System.out.println "Hello"
64
+ puts "Hello"
65
65
  end
66
66
  begin
67
67
  thread.run
68
68
  thread.join
69
69
  rescue
70
- System.out.println "Uh Oh!"
70
+ puts "Uh Oh!"
71
71
  end
72
72
  EOF
73
73
  assert_output("Hello\n") do
@@ -85,7 +85,7 @@ class BlocksTest < Test::Unit::TestCase
85
85
  end
86
86
 
87
87
  o = MyObservable.new
88
- o.addObserver {|x, a| System.out.println a}
88
+ o.addObserver {|x, a| puts a}
89
89
  o.notifyObservers("Hello Observer")
90
90
  EOF
91
91
  assert_output("Hello Observer\n") do
@@ -98,14 +98,14 @@ class BlocksTest < Test::Unit::TestCase
98
98
  def foo
99
99
  a = "Hello"
100
100
  thread = Thread.new do
101
- System.out.println a
101
+ puts a
102
102
  end
103
103
  begin
104
104
  a = a + " Closures"
105
105
  thread.run
106
106
  thread.join
107
107
  rescue
108
- System.out.println "Uh Oh!"
108
+ puts "Uh Oh!"
109
109
  end
110
110
  return
111
111
  end
@@ -156,7 +156,7 @@ class BlocksTest < Test::Unit::TestCase
156
156
  String(a).compareToIgnoreCase(String(b))
157
157
  end
158
158
  end
159
- list.each {|x| System.out.println x}
159
+ list.each {|x| puts x }
160
160
  EOF
161
161
 
162
162
  assert_output("a\nABC\nb\nCats\n") do
@@ -186,14 +186,14 @@ class BlocksTest < Test::Unit::TestCase
186
186
  import java.util.concurrent.Callable
187
187
  def foo c:Callable
188
188
  # throws Exception
189
- System.out.println c.call
189
+ puts c.call
190
190
  end
191
191
  begin
192
192
  foo do
193
193
  "an object"
194
194
  end
195
195
  rescue
196
- System.out.println "never get here"
196
+ puts "never get here"
197
197
  end
198
198
  EOF
199
199
  assert_output("an object\n") do
@@ -205,13 +205,13 @@ class BlocksTest < Test::Unit::TestCase
205
205
  cls, = compile(<<-EOF)
206
206
  def foo(x:String):void
207
207
  thread = Thread.new do
208
- System.out.println "Hello \#{x}"
208
+ puts "Hello \#{x}"
209
209
  end
210
210
  begin
211
211
  thread.run
212
212
  thread.join
213
213
  rescue
214
- System.out.println "Uh Oh!"
214
+ puts "Uh Oh!"
215
215
  end
216
216
  end
217
217
 
@@ -231,7 +231,7 @@ class BlocksTest < Test::Unit::TestCase
231
231
  b.call
232
232
  end
233
233
  def bar
234
- foo {System.out.println "Hi"}
234
+ foo {puts "Hi"}
235
235
  end
236
236
  EOF
237
237
  assert_output("Hi\n") do
@@ -251,7 +251,7 @@ class BlocksTest < Test::Unit::TestCase
251
251
  end
252
252
 
253
253
  def test_block_impling_interface_w_multiple_methods
254
- assert_jraise java.lang.UnsupportedOperationException do
254
+ begin
255
255
  parse_and_type(<<-CODE)
256
256
  interface RunOrRun2 do
257
257
  def run:void;end
@@ -267,6 +267,10 @@ class BlocksTest < Test::Unit::TestCase
267
267
  1
268
268
  end
269
269
  CODE
270
+ rescue => ex
271
+ assert_match /multiple abstract/i, ex.message
272
+ else
273
+ fail "No exception raised"
270
274
  end
271
275
  end
272
276
 
@@ -16,7 +16,7 @@
16
16
  class ConstructorsTest < Test::Unit::TestCase
17
17
  def test_constructor
18
18
  cls, = compile(
19
- "class InitializeTest;def initialize;System.out.println 'Constructed';end;end")
19
+ "class InitializeTest;def initialize;puts 'Constructed';end;end")
20
20
  assert_output("Constructed\n") do
21
21
  cls.new
22
22
  end
@@ -57,14 +57,14 @@ class ConstructorsTest < Test::Unit::TestCase
57
57
  sc_a, sc_b = compile(<<-EOF)
58
58
  class SC_A
59
59
  def initialize(a:int)
60
- System.out.println "A"
60
+ puts "A"
61
61
  end
62
62
  end
63
63
 
64
64
  class SC_B < SC_A
65
65
  def initialize
66
66
  super(0)
67
- System.out.println "B"
67
+ puts "B"
68
68
  end
69
69
  end
70
70
  EOF
@@ -77,14 +77,14 @@ class ConstructorsTest < Test::Unit::TestCase
77
77
  sc_a, sc_b = compile(<<-EOF)
78
78
  class SuperCA
79
79
  def initialize(a: int)
80
- System.out.println "A \#{a}"
80
+ puts "A \#{a}"
81
81
  end
82
82
  end
83
83
 
84
84
  class SuperCB < SuperCA
85
85
  def initialize a: int
86
86
  super
87
- System.out.println "B \#{a}"
87
+ puts "B \#{a}"
88
88
  end
89
89
  end
90
90
  EOF
@@ -105,7 +105,7 @@ class ConstructorsTest < Test::Unit::TestCase
105
105
  end
106
106
  EOF
107
107
  end
108
- assert_equal "Cannot find instance method initialize() on SuperCA", error.message
108
+ assert_match /Can.*t find.* method (SuperCA\.)?initialize\(\)/, error.message
109
109
  end
110
110
 
111
111
 
@@ -118,7 +118,7 @@ class ConstructorsTest < Test::Unit::TestCase
118
118
  end
119
119
  EOF
120
120
  end
121
- assert_equal "Cannot find instance method initialize(java.lang.String) on java.util.ArrayList", error.message
121
+ assert_match /Can.*t find( instance)? method (java.util.ArrayList\.)?initialize\(java.lang.String\)/, error.message
122
122
  end
123
123
 
124
124
  def test_empty_constructor
@@ -141,7 +141,7 @@ class ConstructorsTest < Test::Unit::TestCase
141
141
  t.join
142
142
  rescue InterruptedException
143
143
  end
144
- System.out.println 'ok'
144
+ puts 'ok'
145
145
  end
146
146
  end
147
147
  EOF
@@ -13,6 +13,8 @@
13
13
  # See the License for the specific language governing permissions and
14
14
  # limitations under the License.
15
15
 
16
+ require 'test_helper'
17
+
16
18
  class EnumerableTest < Test::Unit::TestCase
17
19
  def test_for_in_int_array
18
20
  cls, = compile(<<-EOF)
@@ -44,7 +46,7 @@ class EnumerableTest < Test::Unit::TestCase
44
46
  cls, = compile(<<-EOF)
45
47
  def foo(a:Iterable)
46
48
  a.each do |x|
47
- System.out.println x
49
+ puts x
48
50
  end
49
51
  end
50
52
  EOF
@@ -63,7 +65,7 @@ class EnumerableTest < Test::Unit::TestCase
63
65
  import java.util.ArrayList
64
66
  def foo(a:ArrayList)
65
67
  a.each do |x|
66
- System.out.println x
68
+ puts x
67
69
  end
68
70
  end
69
71
  EOF
@@ -80,7 +82,7 @@ class EnumerableTest < Test::Unit::TestCase
80
82
  def test_each_int_arry
81
83
  cls, = compile(<<-EOF)
82
84
  def foo(a:int[])
83
- a.each {|x| x += 1;System.out.println x; redo if x == 2}
85
+ a.each {|x| x += 1;puts x; redo if x == 2}
84
86
  end
85
87
  EOF
86
88
 
@@ -114,7 +116,7 @@ class EnumerableTest < Test::Unit::TestCase
114
116
  def test_downto
115
117
  cls, = compile(<<-EOF)
116
118
  def foo(i:int)
117
- i.downto(1) {|x| System.out.println x }
119
+ i.downto(1) {|x| puts x }
118
120
  end
119
121
  EOF
120
122
 
@@ -126,7 +128,7 @@ class EnumerableTest < Test::Unit::TestCase
126
128
  def test_upto
127
129
  cls, = compile(<<-EOF)
128
130
  def foo(i:int)
129
- i.upto(3) {|x| System.out.println x }
131
+ i.upto(3) {|x| puts x }
130
132
  end
131
133
  EOF
132
134
 
@@ -138,7 +140,7 @@ class EnumerableTest < Test::Unit::TestCase
138
140
  def test_times_with_arg
139
141
  cls, = compile(<<-EOF)
140
142
  def foo(i:int)
141
- i.times {|x| System.out.println x }
143
+ i.times {|x| puts x }
142
144
  end
143
145
  EOF
144
146
 
@@ -150,7 +152,7 @@ class EnumerableTest < Test::Unit::TestCase
150
152
  def test_times_without_arg
151
153
  cls, = compile(<<-EOF)
152
154
  def foo(i:int)
153
- i.times { System.out.println "Hi" }
155
+ i.times { puts "Hi" }
154
156
  end
155
157
  EOF
156
158
 
@@ -248,7 +250,7 @@ class EnumerableTest < Test::Unit::TestCase
248
250
  def test_each
249
251
  cls, = compile(<<-EOF)
250
252
  def foo
251
- [1,2,3].each {|x| System.out.println x}
253
+ [1,2,3].each {|x| puts x}
252
254
  end
253
255
  EOF
254
256
  assert_output("1\n2\n3\n") do
@@ -259,7 +261,7 @@ class EnumerableTest < Test::Unit::TestCase
259
261
  def test_each_without_block_arguments
260
262
  cls, = compile(<<-EOF)
261
263
  def foo
262
- [1,2,3].each { System.out.println :thrice }
264
+ [1,2,3].each { puts :thrice }
263
265
  end
264
266
  EOF
265
267
  assert_output("thrice\nthrice\nthrice\n") do
@@ -271,8 +273,8 @@ class EnumerableTest < Test::Unit::TestCase
271
273
  cls, = compile(<<-EOF)
272
274
  import java.lang.Integer
273
275
  def foo
274
- System.out.println [1,2,3].any?
275
- System.out.println [1,2,3].any? {|x| Integer(x).intValue > 3}
276
+ puts [1,2,3].any?
277
+ puts [1,2,3].any? {|x| Integer(x).intValue > 3}
276
278
  end
277
279
  EOF
278
280
  assert_output("true\nfalse\n") do
@@ -284,8 +286,8 @@ class EnumerableTest < Test::Unit::TestCase
284
286
  cls, = compile(<<-EOF)
285
287
  import java.lang.Integer
286
288
  def foo
287
- System.out.println [1,2,3].all?
288
- System.out.println [1,2,3].all? {|x| Integer(x).intValue > 3}
289
+ puts [1,2,3].all?
290
+ puts [1,2,3].all? {|x| Integer(x).intValue > 3}
289
291
  end
290
292
  EOF
291
293
  assert_output("true\nfalse\n") do
@@ -295,7 +297,7 @@ class EnumerableTest < Test::Unit::TestCase
295
297
  def test_all_with_block_with_no_cast
296
298
  cls, = compile(<<-EOF)
297
299
  def foo
298
- System.out.println [1,2,3].all? {|x| x.intValue > 3}
300
+ puts [1,2,3].all? {|x| x.intValue > 3}
299
301
  end
300
302
  EOF
301
303
  assert_output("false\n") do
@@ -303,17 +305,39 @@ class EnumerableTest < Test::Unit::TestCase
303
305
  end
304
306
  end
305
307
 
306
- def test_map
308
+ def test_map_empty_literal
307
309
  cls, = compile(<<-EOF)
308
- def foo
309
- System.out.println [1,2,3].map {|x:Integer| x.intValue + 1}
310
- System.out.println [1,2,3].map {|x| x}
311
- System.out.println [1].map { 'a' }
312
- System.out.println [].map { 'b' }
313
- end
310
+ puts [].map { 'b' }
314
311
  EOF
315
- assert_output("[2, 3, 4]\n[1, 2, 3]\n[a]\n[]\n") do
316
- cls.foo
312
+ assert_output "[]\n" do
313
+ cls.main(nil)
314
+ end
315
+ end
316
+
317
+ def test_map_to_different_type
318
+ cls, = compile(<<-EOF)
319
+ puts [1].map { 'a' }
320
+ EOF
321
+ assert_output "[a]\n" do
322
+ cls.main(nil)
323
+ end
324
+ end
325
+
326
+ def test_map_identity
327
+ cls, = compile(<<-EOF)
328
+ puts [1,2,3].map {|x| x}
329
+ EOF
330
+ assert_output("[1, 2, 3]\n") do
331
+ cls.main(nil)
332
+ end
333
+ end
334
+
335
+ def test_map_with_type_declaration
336
+ cls, = compile(<<-EOF)
337
+ puts [1,2,3].map {|x:Integer| x.intValue + 1}
338
+ EOF
339
+ assert_output("[2, 3, 4]\n") do
340
+ cls.main(nil)
317
341
  end
318
342
  end
319
343
 
@@ -454,7 +478,7 @@ class EnumerableTest < Test::Unit::TestCase
454
478
  end
455
479
 
456
480
  def self.test(x:String)
457
- MyIterator.new(x).each {|y| System.out.println y}
481
+ MyIterator.new(x).each {|y| puts y}
458
482
  end
459
483
  end
460
484
  EOF