rubyjs 0.7.0

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 (144) hide show
  1. data/README +128 -0
  2. data/Rakefile +9 -0
  3. data/bin/rubyjs +140 -0
  4. data/examples/ex1/Rakefile +7 -0
  5. data/examples/ex1/ex1.js +771 -0
  6. data/examples/ex1/ex1.rb +42 -0
  7. data/examples/ex1/index.html +7 -0
  8. data/examples/hw/Rakefile +9 -0
  9. data/examples/hw/hw.js +635 -0
  10. data/examples/hw/hw.rb +7 -0
  11. data/examples/hw/index.html +7 -0
  12. data/patches/parse_tree.rb.diff +34 -0
  13. data/rubyjs.gemspec +24 -0
  14. data/src/rubyjs.rb +4 -0
  15. data/src/rubyjs/code_generator.rb +474 -0
  16. data/src/rubyjs/compiler.rb +2007 -0
  17. data/src/rubyjs/debug_name_generator.rb +75 -0
  18. data/src/rubyjs/encoder.rb +171 -0
  19. data/src/rubyjs/eval_into.rb +59 -0
  20. data/src/rubyjs/lib/core.rb +1008 -0
  21. data/src/rubyjs/lib/json.rb +101 -0
  22. data/src/rubyjs/model.rb +287 -0
  23. data/src/rubyjs/name_generator.rb +71 -0
  24. data/src/rwt/AbsolutePanel.rb +161 -0
  25. data/src/rwt/DOM.Konqueror.rb +89 -0
  26. data/src/rwt/DOM.Opera.rb +65 -0
  27. data/src/rwt/DOM.rb +1044 -0
  28. data/src/rwt/Event.Opera.rb +35 -0
  29. data/src/rwt/Event.rb +429 -0
  30. data/src/rwt/HTTPRequest.IE6.rb +5 -0
  31. data/src/rwt/HTTPRequest.rb +74 -0
  32. data/src/rwt/Label.rb +164 -0
  33. data/src/rwt/Panel.rb +90 -0
  34. data/src/rwt/RootPanel.rb +16 -0
  35. data/src/rwt/UIObject.rb +495 -0
  36. data/src/rwt/Widget.rb +193 -0
  37. data/src/rwt/ported-from/AbsolutePanel.java +158 -0
  38. data/src/rwt/ported-from/DOM.java +571 -0
  39. data/src/rwt/ported-from/DOMImpl.java +426 -0
  40. data/src/rwt/ported-from/DOMImplOpera.java +82 -0
  41. data/src/rwt/ported-from/DOMImplStandard.java +234 -0
  42. data/src/rwt/ported-from/HTTPRequest.java +81 -0
  43. data/src/rwt/ported-from/HTTPRequestImpl.java +103 -0
  44. data/src/rwt/ported-from/Label.java +163 -0
  45. data/src/rwt/ported-from/Panel.java +99 -0
  46. data/src/rwt/ported-from/UIObject.java +614 -0
  47. data/src/rwt/ported-from/Widget.java +221 -0
  48. data/test/benchmark/bm_call_conv1.js +16 -0
  49. data/test/benchmark/bm_call_conv2.js +14 -0
  50. data/test/benchmark/bm_var_acc1.js +13 -0
  51. data/test/benchmark/bm_var_acc2.js +11 -0
  52. data/test/benchmark/bm_vm1_block.js +15 -0
  53. data/test/benchmark/bm_vm1_block.rb +15 -0
  54. data/test/benchmark/bm_vm1_const.js +13 -0
  55. data/test/benchmark/bm_vm1_const.rb +13 -0
  56. data/test/benchmark/bm_vm1_ensure.js +17 -0
  57. data/test/benchmark/bm_vm1_ensure.rb +15 -0
  58. data/test/benchmark/common.js +4 -0
  59. data/test/benchmark/common.rb +5 -0
  60. data/test/benchmark/params.yaml +7 -0
  61. data/test/browser.test.html +4059 -0
  62. data/test/browser.test.js +3225 -0
  63. data/test/common.Browser.rb +13 -0
  64. data/test/common.rb +8 -0
  65. data/test/gen_browser_test_suite.rb +129 -0
  66. data/test/gen_test_suite.rb +41 -0
  67. data/test/run_benchs.rb +58 -0
  68. data/test/run_tests.rb +22 -0
  69. data/test/test_args.rb +24 -0
  70. data/test/test_array.rb +26 -0
  71. data/test/test_case.rb +35 -0
  72. data/test/test_class.rb +55 -0
  73. data/test/test_eql.rb +9 -0
  74. data/test/test_exception.rb +61 -0
  75. data/test/test_expr.rb +12 -0
  76. data/test/test_hash.rb +29 -0
  77. data/test/test_if.rb +28 -0
  78. data/test/test_inspect.rb +10 -0
  79. data/test/test_lebewesen.rb +39 -0
  80. data/test/test_massign.rb +66 -0
  81. data/test/test_new.rb +12 -0
  82. data/test/test_range.rb +53 -0
  83. data/test/test_regexp.rb +22 -0
  84. data/test/test_send.rb +65 -0
  85. data/test/test_simple_output.rb +5 -0
  86. data/test/test_splat.rb +21 -0
  87. data/test/test_string.rb +51 -0
  88. data/test/test_yield.rb +152 -0
  89. data/utils/js/Makefile +9 -0
  90. data/utils/js/RunScript.class +0 -0
  91. data/utils/js/RunScript.java +73 -0
  92. data/utils/js/js.jar +0 -0
  93. data/utils/js/run.sh +3 -0
  94. data/utils/jsc/Makefile +7 -0
  95. data/utils/jsc/README +3 -0
  96. data/utils/jsc/RunScript.c +93 -0
  97. data/utils/jsc/run.sh +15 -0
  98. data/utils/yuicompressor/README +1 -0
  99. data/utils/yuicompressor/yuicompressor-2.2.5.jar +0 -0
  100. data/vendor/ParseTree-1.7.1-patched/History.txt +217 -0
  101. data/vendor/ParseTree-1.7.1-patched/Manifest.txt +22 -0
  102. data/vendor/ParseTree-1.7.1-patched/README.txt +110 -0
  103. data/vendor/ParseTree-1.7.1-patched/Rakefile +41 -0
  104. data/vendor/ParseTree-1.7.1-patched/bin/parse_tree_abc +89 -0
  105. data/vendor/ParseTree-1.7.1-patched/bin/parse_tree_audit +28 -0
  106. data/vendor/ParseTree-1.7.1-patched/bin/parse_tree_deps +62 -0
  107. data/vendor/ParseTree-1.7.1-patched/bin/parse_tree_show +49 -0
  108. data/vendor/ParseTree-1.7.1-patched/demo/printer.rb +20 -0
  109. data/vendor/ParseTree-1.7.1-patched/lib/composite_sexp_processor.rb +49 -0
  110. data/vendor/ParseTree-1.7.1-patched/lib/parse_tree.rb +1013 -0
  111. data/vendor/ParseTree-1.7.1-patched/lib/sexp.rb +235 -0
  112. data/vendor/ParseTree-1.7.1-patched/lib/sexp_processor.rb +330 -0
  113. data/vendor/ParseTree-1.7.1-patched/lib/unique.rb +15 -0
  114. data/vendor/ParseTree-1.7.1-patched/test/pt_testcase.rb +1221 -0
  115. data/vendor/ParseTree-1.7.1-patched/test/something.rb +53 -0
  116. data/vendor/ParseTree-1.7.1-patched/test/test_all.rb +13 -0
  117. data/vendor/ParseTree-1.7.1-patched/test/test_composite_sexp_processor.rb +69 -0
  118. data/vendor/ParseTree-1.7.1-patched/test/test_parse_tree.rb +216 -0
  119. data/vendor/ParseTree-1.7.1-patched/test/test_sexp.rb +291 -0
  120. data/vendor/ParseTree-1.7.1-patched/test/test_sexp_processor.rb +244 -0
  121. data/vendor/ParseTree-1.7.1-patched/validate.sh +31 -0
  122. data/vendor/ParseTree-1.7.1/History.txt +217 -0
  123. data/vendor/ParseTree-1.7.1/Manifest.txt +22 -0
  124. data/vendor/ParseTree-1.7.1/README.txt +110 -0
  125. data/vendor/ParseTree-1.7.1/Rakefile +41 -0
  126. data/vendor/ParseTree-1.7.1/bin/parse_tree_abc +89 -0
  127. data/vendor/ParseTree-1.7.1/bin/parse_tree_audit +28 -0
  128. data/vendor/ParseTree-1.7.1/bin/parse_tree_deps +62 -0
  129. data/vendor/ParseTree-1.7.1/bin/parse_tree_show +49 -0
  130. data/vendor/ParseTree-1.7.1/demo/printer.rb +20 -0
  131. data/vendor/ParseTree-1.7.1/lib/composite_sexp_processor.rb +49 -0
  132. data/vendor/ParseTree-1.7.1/lib/parse_tree.rb +1004 -0
  133. data/vendor/ParseTree-1.7.1/lib/sexp.rb +235 -0
  134. data/vendor/ParseTree-1.7.1/lib/sexp_processor.rb +330 -0
  135. data/vendor/ParseTree-1.7.1/lib/unique.rb +15 -0
  136. data/vendor/ParseTree-1.7.1/test/pt_testcase.rb +1221 -0
  137. data/vendor/ParseTree-1.7.1/test/something.rb +53 -0
  138. data/vendor/ParseTree-1.7.1/test/test_all.rb +13 -0
  139. data/vendor/ParseTree-1.7.1/test/test_composite_sexp_processor.rb +69 -0
  140. data/vendor/ParseTree-1.7.1/test/test_parse_tree.rb +216 -0
  141. data/vendor/ParseTree-1.7.1/test/test_sexp.rb +291 -0
  142. data/vendor/ParseTree-1.7.1/test/test_sexp_processor.rb +244 -0
  143. data/vendor/ParseTree-1.7.1/validate.sh +31 -0
  144. metadata +230 -0
data/test/test_expr.rb ADDED
@@ -0,0 +1,12 @@
1
+ class TestExpr
2
+ def test
3
+ i = if true then 1 else 2 end
4
+ p i
5
+ i = true or return
6
+ p i
7
+ end
8
+
9
+ def self.main
10
+ new.test
11
+ end
12
+ end
data/test/test_hash.rb ADDED
@@ -0,0 +1,29 @@
1
+ class TestHash
2
+ if $RUBYJS
3
+ def hash
4
+ `var el = {}; el["1"] = null; return el`
5
+ end
6
+ else
7
+ def hash
8
+ {"1" => nil}
9
+ end
10
+ end
11
+
12
+ def test
13
+ h = {"a" => 6, "b" => 7, "1" => 1, 1 => 2, "1,2" => "hello", [1,2] => "good"}
14
+ p h["a"]
15
+ p h["b"]
16
+ p h["1"]
17
+ p h[1]
18
+ p h["1,2"]
19
+ p h[[1,2]]
20
+
21
+ puts "test native JS hash"
22
+ a = hash()
23
+ #p a
24
+ end
25
+
26
+ def self.main
27
+ new.test
28
+ end
29
+ end
data/test/test_if.rb ADDED
@@ -0,0 +1,28 @@
1
+ class TestIf
2
+ def test
3
+ puts "OK" if true
4
+ puts "NOT OK" if false
5
+ puts "OK" unless false
6
+ puts "NOT OK" unless true
7
+ puts "OK" if true and true and (true or false) and (!false)
8
+
9
+ puts "OK" if 5 < 6 and 6 < 7
10
+
11
+ # test the "||" operator
12
+ p(false || "a") # => "a"
13
+ p(nil || "a") # => "a"
14
+ p(true || "a") # => true
15
+ p("b" || "a") # => "b"
16
+
17
+ # test the "&&" operator
18
+
19
+ p(false && "a") # => false
20
+ p(nil && "a") # => nil
21
+ p(true && "a") # => "a"
22
+ p("b" && "a") # => "a"
23
+ end
24
+
25
+ def self.main
26
+ new.test
27
+ end
28
+ end
@@ -0,0 +1,10 @@
1
+ class TestInspect
2
+ def test
3
+ o = [{"Hello"=>'Rubyconf'}]
4
+ puts o.inspect
5
+ end
6
+
7
+ def self.main
8
+ new.test
9
+ end
10
+ end
@@ -0,0 +1,39 @@
1
+ class TestLebewesen
2
+ def self.main
3
+ leni = Katze.new("AA-BB", "Leni")
4
+ flocki = Katze.new("AC-DC", "Flocki")
5
+ bello = Hund.new("AA-ZZ")
6
+ leni.miau
7
+ bello.wau
8
+ bello.jage(leni)
9
+ end
10
+ end
11
+
12
+ class Lebewesen
13
+ def initialize(dns)
14
+ @dns = dns
15
+ end
16
+ end
17
+
18
+ class Katze < Lebewesen
19
+ attr_reader :name
20
+
21
+ def initialize(dns, name)
22
+ super(dns)
23
+ @name = name
24
+ end
25
+
26
+ def miau
27
+ puts "miau, ich bin " + @name
28
+ end
29
+ end
30
+
31
+ class Hund < Lebewesen
32
+ def wau
33
+ puts "wau wau"
34
+ end
35
+
36
+ def jage(katze)
37
+ puts "ich jage " + katze.name
38
+ end
39
+ end
@@ -0,0 +1,66 @@
1
+ class TestMassign
2
+ def self.main
3
+ a, b = 1, 2
4
+ p a
5
+ p b
6
+ puts "--"
7
+
8
+ a, b = 1, 2, 3
9
+ p a
10
+ p b
11
+ puts "--"
12
+
13
+ c = 5
14
+ a, b, c = 1, 2
15
+ p a
16
+ p b
17
+ p c
18
+ puts "--"
19
+
20
+ @a, b, @c = 1, 2, 3
21
+ p @a
22
+ p b
23
+ p @c
24
+ puts "--"
25
+
26
+ puts "swap"
27
+ # swap
28
+ a, b = 1, 2
29
+ p a
30
+ p b
31
+ a, b = b, a
32
+ p a
33
+ p b
34
+ puts "--"
35
+
36
+ puts "splat1"
37
+ a, b, c, *d = 1, 2
38
+ p a
39
+ p b
40
+ p c
41
+ p d
42
+ puts "--"
43
+
44
+ puts "splat2"
45
+ a, *b = 1, 2
46
+ p a
47
+ p b
48
+ puts "--"
49
+
50
+ puts "splat3"
51
+ a, *b = 1, 2, 3, 4, 5
52
+ p a
53
+ p b
54
+ puts "--"
55
+
56
+ puts "splat with globals"
57
+ p $a
58
+ p $b
59
+ $a, $b = 1, 2
60
+ p $a
61
+ p $b
62
+ puts "--"
63
+
64
+ #TODO: a, b = 1 (to_ary)
65
+ end
66
+ end
data/test/test_new.rb ADDED
@@ -0,0 +1,12 @@
1
+ class TestNew
2
+ def initialize
3
+ end
4
+
5
+ def test
6
+ puts "test"
7
+ end
8
+
9
+ def self.main()
10
+ new().test
11
+ end
12
+ end
@@ -0,0 +1,53 @@
1
+ class TestRange
2
+ def test
3
+ a = Range.new(0,2)
4
+ p a.first
5
+ p a.last
6
+ p a
7
+
8
+ p ((0..2).to_s)
9
+ p ((0...2).to_s)
10
+
11
+ (0..4).each do |i| p i end
12
+ (0...4).each do |i| p i end
13
+ (-1..-4).each do |i| p i end
14
+
15
+ p ((0..4).include?(4))
16
+ p ((0..4).include?(5))
17
+ p ((0...4).include?(5))
18
+ p ((0...4).include?(4))
19
+ p ((0...4).include?(3))
20
+ p ((0...4).include?(0))
21
+ p ((0...4).include?(-1))
22
+
23
+ p ((-1..-5).to_a)
24
+ p ((-5..-1).to_a)
25
+
26
+ r = Range.new(0, 4)
27
+ p r.first
28
+ p r.begin
29
+ p r.last
30
+ p r.end
31
+ p r.exclude_end?
32
+
33
+ r = 1...5
34
+ p r.first
35
+ p r.begin
36
+ p r.last
37
+ p r.end
38
+ p r.exclude_end?
39
+
40
+ p (false == false)
41
+ p (false == true)
42
+ p (true == false)
43
+ p (true == true)
44
+
45
+ p ((0..2) == (0..2))
46
+ p ((0..2) == Range.new(0,2))
47
+ p ((0..2) == (0...2))
48
+ end
49
+
50
+ def self.main
51
+ new.test
52
+ end
53
+ end
@@ -0,0 +1,22 @@
1
+ class TestRegexp
2
+ def test
3
+ p "okay" if "hallo" =~ /ll/
4
+ pos = "hallo" =~ /ll/
5
+ p pos
6
+
7
+ "hallo" =~ /(ll)/
8
+ p $1
9
+ p $2
10
+ p $3
11
+
12
+ "hallo" =~ /a(ll)(o)/
13
+ p $1
14
+ p $2
15
+ p $3
16
+ p $4
17
+ end
18
+
19
+ def self.main
20
+ new.test
21
+ end
22
+ end
data/test/test_send.rb ADDED
@@ -0,0 +1,65 @@
1
+ class A
2
+ def a_method(a,b)
3
+ p a, b
4
+ end
5
+ end
6
+
7
+ class B < A
8
+ def a_method(b, a)
9
+ p "in B"
10
+ super
11
+ end
12
+
13
+ def c_method(b)
14
+ end
15
+ end
16
+
17
+ class C
18
+ def method_missing(id, *args, &block)
19
+ p "mm: #{id}, #{args}"
20
+ end
21
+ end
22
+
23
+ class TestSend
24
+ def self.main
25
+ puts "send"
26
+ p A.new.send("a_method", 1, 2)
27
+ p B.new.send("a_method", 1, 2)
28
+
29
+ puts "respond_to?"
30
+ p A.new.respond_to?(:a_method)
31
+ p A.new.respond_to?(:to_s)
32
+ p A.new.respond_to?(:inspect)
33
+ p A.new.respond_to?(:b_method)
34
+ p A.new.respond_to?(:c_method)
35
+
36
+ puts "method_missing"
37
+ p C.new.respond_to?(:blah_blah)
38
+ C.new.blah_blah(1,2,3)
39
+
40
+ begin
41
+ A.new.blah_blah
42
+ puts "FAILURE?"
43
+ rescue NoMethodError
44
+ puts "catched!!!"
45
+ end
46
+
47
+ begin
48
+ A.not_a_method
49
+ rescue NoMethodError
50
+ p "goood"
51
+ end
52
+
53
+ puts "class Method"
54
+ m = "hallo".method(:to_s)
55
+ p m
56
+ p m.call
57
+
58
+ a = [1,2,3]
59
+ m = a.method(:+)
60
+ p m
61
+ p m.call([2,3])
62
+ p m
63
+ p a
64
+ end
65
+ end
@@ -0,0 +1,5 @@
1
+ class TestSimpleOutput
2
+ def self.main()
3
+ puts "Hello World from RubyJS"
4
+ end
5
+ end
@@ -0,0 +1,21 @@
1
+ class TestSplat
2
+ def m(*args)
3
+ p args
4
+ end
5
+
6
+ def self.main
7
+ obj = new()
8
+
9
+ obj.m
10
+ obj.m(*[])
11
+
12
+ obj.m(1)
13
+ obj.m(*[1])
14
+ obj.m(1,*[])
15
+
16
+ obj.m(1,2)
17
+ obj.m(*[1,2])
18
+ obj.m(1,*[2])
19
+ obj.m(1,*[1,2])
20
+ end
21
+ end
@@ -0,0 +1,51 @@
1
+ class TestString
2
+ def test
3
+ # inspect
4
+ p "hello"
5
+ p "hallo\b\t\n"
6
+ p "hallo\\leute"
7
+ p '"super"'
8
+
9
+ # index
10
+ p "hello".index('e')
11
+ p "hello".index('lo')
12
+ p "hello".index('a')
13
+ p "hello hello".index('ll')
14
+ p "hello hello".index('ll', 3)
15
+
16
+ # []
17
+ p "hallo"[0,1]
18
+ p "hallo"[0,2]
19
+ p "hallo"[0,5]
20
+
21
+ p ("10".rjust(10, "0"))
22
+ p ("10".rjust(1, "blah"))
23
+ p ("x".rjust(4, "()"))
24
+
25
+ p ("10".ljust(10, "0"))
26
+ p ("10".ljust(1, "blah"))
27
+ p ("x".ljust(4, "()"))
28
+
29
+
30
+ # string interpolation
31
+ p "abc #{ 1 + 2 } def"
32
+ @a = "hallo".inspect
33
+ @b = 4.5
34
+ p "#{@a},#{@b}"
35
+
36
+ # gsub
37
+ s = "hallo".gsub("l", "r")
38
+ p s
39
+ s = "hallo".gsub(/ll/, "rr")
40
+ p s
41
+ s = "hallo".gsub(/l/) { "r" }
42
+ p s
43
+ s = "hallo".gsub(/ll/) { "blah blah" }
44
+ p s
45
+ "hallllllo".gsub(/(l)l/) {|i| p i }
46
+ end
47
+
48
+ def self.main
49
+ new.test
50
+ end
51
+ end
@@ -0,0 +1,152 @@
1
+ class TestYield
2
+ def three_times_yield
3
+ yield 1
4
+ yield 2
5
+ yield 3
6
+ end
7
+
8
+ def test_three_times_yield
9
+ puts "three_times_yield"
10
+ three_times_yield {|i| p i }
11
+ puts "--"
12
+ end
13
+
14
+ def three_times_block(&block)
15
+ block.call(1)
16
+ block.call(2)
17
+ block.call(3)
18
+ end
19
+
20
+ def test_three_times_block
21
+ puts "three_times_block"
22
+ three_times_block {|i| p i }
23
+ puts "--"
24
+ end
25
+
26
+ def three_times_indirect(&block)
27
+ three_times_yield(&block)
28
+ three_times_block(&block)
29
+ end
30
+
31
+ def test_three_times_indirect
32
+ puts "three_times_indirect"
33
+ three_times_indirect {|i| p i}
34
+ puts "--"
35
+ end
36
+
37
+ def three_times_yield2
38
+ p yield(1)
39
+ p yield(2)
40
+ p yield(3)
41
+ end
42
+
43
+ def test_three_times_yield2
44
+ puts "three_times_yield2"
45
+ three_times_yield2 {|i|
46
+ if i == 1
47
+ i
48
+ else
49
+ next i+1
50
+ end
51
+ }
52
+ end
53
+
54
+ def loop
55
+ while true
56
+ yield
57
+ end
58
+ p "not reached"
59
+ end
60
+
61
+ def loop2(&block)
62
+ while true
63
+ block.call
64
+ end
65
+ p "not reached"
66
+ end
67
+
68
+ def test_loop
69
+ puts "loop"
70
+ i = 0
71
+ res = loop do
72
+ i += 1
73
+ next if i % 2 == 1
74
+ p i
75
+ break "out", i if i > 8
76
+ end
77
+ p res
78
+ puts "--"
79
+ end
80
+
81
+ def test_loop2
82
+ puts "loop2"
83
+ i = 0
84
+ res = loop2 do
85
+ i += 1
86
+ next if i % 2 == 1
87
+ p i
88
+ break "out", i if i > 8
89
+ end
90
+ p res
91
+ puts "--"
92
+ end
93
+
94
+ def test_while_loop
95
+ puts "while-loop"
96
+ i = 0
97
+ while true
98
+ i += 1
99
+ next if i % 2 == 1
100
+ p i
101
+ break if i > 8
102
+ end
103
+ puts "----"
104
+ while i > 0
105
+ p i
106
+ i -= 1
107
+ end
108
+ puts "--"
109
+ end
110
+
111
+ def return_in_block(&block)
112
+ p "return_in_block before"
113
+ block.call
114
+ p "return_in_block after"
115
+ end
116
+
117
+ def test_return_in_block
118
+ p "before"
119
+ return_in_block { return 4 }
120
+ p "after (NOT)"
121
+ end
122
+
123
+ def test_proc
124
+ p "test_proc"
125
+ a = proc { return 0 }
126
+ p a.call
127
+ a = Proc.new { break 3 }
128
+ p a.call
129
+ end
130
+
131
+ def test
132
+ test_three_times_yield
133
+ test_three_times_block
134
+ test_three_times_indirect
135
+ test_three_times_yield2
136
+ test_loop
137
+ test_loop2
138
+ test_while_loop
139
+
140
+ begin
141
+ test_proc
142
+ rescue LocalJumpError => e
143
+ p e
144
+ end
145
+
146
+ p test_return_in_block()
147
+ end
148
+
149
+ def self.main
150
+ new.test
151
+ end
152
+ end