mirah 0.1.2-java → 0.1.3-java

Sign up to get free protection for your applications and to get access to all the features.
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