rubyjs 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README +128 -0
- data/Rakefile +9 -0
- data/bin/rubyjs +140 -0
- data/examples/ex1/Rakefile +7 -0
- data/examples/ex1/ex1.js +771 -0
- data/examples/ex1/ex1.rb +42 -0
- data/examples/ex1/index.html +7 -0
- data/examples/hw/Rakefile +9 -0
- data/examples/hw/hw.js +635 -0
- data/examples/hw/hw.rb +7 -0
- data/examples/hw/index.html +7 -0
- data/patches/parse_tree.rb.diff +34 -0
- data/rubyjs.gemspec +24 -0
- data/src/rubyjs.rb +4 -0
- data/src/rubyjs/code_generator.rb +474 -0
- data/src/rubyjs/compiler.rb +2007 -0
- data/src/rubyjs/debug_name_generator.rb +75 -0
- data/src/rubyjs/encoder.rb +171 -0
- data/src/rubyjs/eval_into.rb +59 -0
- data/src/rubyjs/lib/core.rb +1008 -0
- data/src/rubyjs/lib/json.rb +101 -0
- data/src/rubyjs/model.rb +287 -0
- data/src/rubyjs/name_generator.rb +71 -0
- data/src/rwt/AbsolutePanel.rb +161 -0
- data/src/rwt/DOM.Konqueror.rb +89 -0
- data/src/rwt/DOM.Opera.rb +65 -0
- data/src/rwt/DOM.rb +1044 -0
- data/src/rwt/Event.Opera.rb +35 -0
- data/src/rwt/Event.rb +429 -0
- data/src/rwt/HTTPRequest.IE6.rb +5 -0
- data/src/rwt/HTTPRequest.rb +74 -0
- data/src/rwt/Label.rb +164 -0
- data/src/rwt/Panel.rb +90 -0
- data/src/rwt/RootPanel.rb +16 -0
- data/src/rwt/UIObject.rb +495 -0
- data/src/rwt/Widget.rb +193 -0
- data/src/rwt/ported-from/AbsolutePanel.java +158 -0
- data/src/rwt/ported-from/DOM.java +571 -0
- data/src/rwt/ported-from/DOMImpl.java +426 -0
- data/src/rwt/ported-from/DOMImplOpera.java +82 -0
- data/src/rwt/ported-from/DOMImplStandard.java +234 -0
- data/src/rwt/ported-from/HTTPRequest.java +81 -0
- data/src/rwt/ported-from/HTTPRequestImpl.java +103 -0
- data/src/rwt/ported-from/Label.java +163 -0
- data/src/rwt/ported-from/Panel.java +99 -0
- data/src/rwt/ported-from/UIObject.java +614 -0
- data/src/rwt/ported-from/Widget.java +221 -0
- data/test/benchmark/bm_call_conv1.js +16 -0
- data/test/benchmark/bm_call_conv2.js +14 -0
- data/test/benchmark/bm_var_acc1.js +13 -0
- data/test/benchmark/bm_var_acc2.js +11 -0
- data/test/benchmark/bm_vm1_block.js +15 -0
- data/test/benchmark/bm_vm1_block.rb +15 -0
- data/test/benchmark/bm_vm1_const.js +13 -0
- data/test/benchmark/bm_vm1_const.rb +13 -0
- data/test/benchmark/bm_vm1_ensure.js +17 -0
- data/test/benchmark/bm_vm1_ensure.rb +15 -0
- data/test/benchmark/common.js +4 -0
- data/test/benchmark/common.rb +5 -0
- data/test/benchmark/params.yaml +7 -0
- data/test/browser.test.html +4059 -0
- data/test/browser.test.js +3225 -0
- data/test/common.Browser.rb +13 -0
- data/test/common.rb +8 -0
- data/test/gen_browser_test_suite.rb +129 -0
- data/test/gen_test_suite.rb +41 -0
- data/test/run_benchs.rb +58 -0
- data/test/run_tests.rb +22 -0
- data/test/test_args.rb +24 -0
- data/test/test_array.rb +26 -0
- data/test/test_case.rb +35 -0
- data/test/test_class.rb +55 -0
- data/test/test_eql.rb +9 -0
- data/test/test_exception.rb +61 -0
- data/test/test_expr.rb +12 -0
- data/test/test_hash.rb +29 -0
- data/test/test_if.rb +28 -0
- data/test/test_inspect.rb +10 -0
- data/test/test_lebewesen.rb +39 -0
- data/test/test_massign.rb +66 -0
- data/test/test_new.rb +12 -0
- data/test/test_range.rb +53 -0
- data/test/test_regexp.rb +22 -0
- data/test/test_send.rb +65 -0
- data/test/test_simple_output.rb +5 -0
- data/test/test_splat.rb +21 -0
- data/test/test_string.rb +51 -0
- data/test/test_yield.rb +152 -0
- data/utils/js/Makefile +9 -0
- data/utils/js/RunScript.class +0 -0
- data/utils/js/RunScript.java +73 -0
- data/utils/js/js.jar +0 -0
- data/utils/js/run.sh +3 -0
- data/utils/jsc/Makefile +7 -0
- data/utils/jsc/README +3 -0
- data/utils/jsc/RunScript.c +93 -0
- data/utils/jsc/run.sh +15 -0
- data/utils/yuicompressor/README +1 -0
- data/utils/yuicompressor/yuicompressor-2.2.5.jar +0 -0
- data/vendor/ParseTree-1.7.1-patched/History.txt +217 -0
- data/vendor/ParseTree-1.7.1-patched/Manifest.txt +22 -0
- data/vendor/ParseTree-1.7.1-patched/README.txt +110 -0
- data/vendor/ParseTree-1.7.1-patched/Rakefile +41 -0
- data/vendor/ParseTree-1.7.1-patched/bin/parse_tree_abc +89 -0
- data/vendor/ParseTree-1.7.1-patched/bin/parse_tree_audit +28 -0
- data/vendor/ParseTree-1.7.1-patched/bin/parse_tree_deps +62 -0
- data/vendor/ParseTree-1.7.1-patched/bin/parse_tree_show +49 -0
- data/vendor/ParseTree-1.7.1-patched/demo/printer.rb +20 -0
- data/vendor/ParseTree-1.7.1-patched/lib/composite_sexp_processor.rb +49 -0
- data/vendor/ParseTree-1.7.1-patched/lib/parse_tree.rb +1013 -0
- data/vendor/ParseTree-1.7.1-patched/lib/sexp.rb +235 -0
- data/vendor/ParseTree-1.7.1-patched/lib/sexp_processor.rb +330 -0
- data/vendor/ParseTree-1.7.1-patched/lib/unique.rb +15 -0
- data/vendor/ParseTree-1.7.1-patched/test/pt_testcase.rb +1221 -0
- data/vendor/ParseTree-1.7.1-patched/test/something.rb +53 -0
- data/vendor/ParseTree-1.7.1-patched/test/test_all.rb +13 -0
- data/vendor/ParseTree-1.7.1-patched/test/test_composite_sexp_processor.rb +69 -0
- data/vendor/ParseTree-1.7.1-patched/test/test_parse_tree.rb +216 -0
- data/vendor/ParseTree-1.7.1-patched/test/test_sexp.rb +291 -0
- data/vendor/ParseTree-1.7.1-patched/test/test_sexp_processor.rb +244 -0
- data/vendor/ParseTree-1.7.1-patched/validate.sh +31 -0
- data/vendor/ParseTree-1.7.1/History.txt +217 -0
- data/vendor/ParseTree-1.7.1/Manifest.txt +22 -0
- data/vendor/ParseTree-1.7.1/README.txt +110 -0
- data/vendor/ParseTree-1.7.1/Rakefile +41 -0
- data/vendor/ParseTree-1.7.1/bin/parse_tree_abc +89 -0
- data/vendor/ParseTree-1.7.1/bin/parse_tree_audit +28 -0
- data/vendor/ParseTree-1.7.1/bin/parse_tree_deps +62 -0
- data/vendor/ParseTree-1.7.1/bin/parse_tree_show +49 -0
- data/vendor/ParseTree-1.7.1/demo/printer.rb +20 -0
- data/vendor/ParseTree-1.7.1/lib/composite_sexp_processor.rb +49 -0
- data/vendor/ParseTree-1.7.1/lib/parse_tree.rb +1004 -0
- data/vendor/ParseTree-1.7.1/lib/sexp.rb +235 -0
- data/vendor/ParseTree-1.7.1/lib/sexp_processor.rb +330 -0
- data/vendor/ParseTree-1.7.1/lib/unique.rb +15 -0
- data/vendor/ParseTree-1.7.1/test/pt_testcase.rb +1221 -0
- data/vendor/ParseTree-1.7.1/test/something.rb +53 -0
- data/vendor/ParseTree-1.7.1/test/test_all.rb +13 -0
- data/vendor/ParseTree-1.7.1/test/test_composite_sexp_processor.rb +69 -0
- data/vendor/ParseTree-1.7.1/test/test_parse_tree.rb +216 -0
- data/vendor/ParseTree-1.7.1/test/test_sexp.rb +291 -0
- data/vendor/ParseTree-1.7.1/test/test_sexp_processor.rb +244 -0
- data/vendor/ParseTree-1.7.1/validate.sh +31 -0
- metadata +230 -0
@@ -0,0 +1,13 @@
|
|
1
|
+
module Kernel
|
2
|
+
=begin
|
3
|
+
def puts(obj="")
|
4
|
+
obj = obj.to_s.gsub("&", "&").gsub("<", "<").gsub(">", ">") + "<br/>"
|
5
|
+
`document.getElementById('out').innerHTML += #<obj>`
|
6
|
+
end
|
7
|
+
=end
|
8
|
+
|
9
|
+
def puts(obj="")
|
10
|
+
obj = obj.to_s
|
11
|
+
`STDOUT_puts(#<obj>)`
|
12
|
+
end
|
13
|
+
end
|
data/test/common.rb
ADDED
@@ -0,0 +1,129 @@
|
|
1
|
+
require 'tempfile'
|
2
|
+
require 'test/gen_test_suite'
|
3
|
+
|
4
|
+
if ARGV.empty?
|
5
|
+
tests = Dir['test/test_*.rb']
|
6
|
+
else
|
7
|
+
tests = Dir["test/test_{" + ARGV.join(',') + "}.rb"]
|
8
|
+
end
|
9
|
+
|
10
|
+
rubycode = Tempfile.new('rubyjs')
|
11
|
+
script = gen_test_suite(tests)
|
12
|
+
rubycode.write(script)
|
13
|
+
rubycode.close(false)
|
14
|
+
|
15
|
+
#
|
16
|
+
# Generate Javascript code
|
17
|
+
#
|
18
|
+
|
19
|
+
RED = '#ff8888'
|
20
|
+
GREEN = '#aaffaa'
|
21
|
+
|
22
|
+
expected = `ruby -I./test < #{rubycode.path}`.chomp. # remove last newline
|
23
|
+
gsub("&", "&").
|
24
|
+
gsub("<", "<").
|
25
|
+
gsub(">", ">").split("\n")
|
26
|
+
|
27
|
+
jscode = `./bin/rubyjs -I./test --opt PrettyPrint -P Browser -m TestSuite #{rubycode.path}`
|
28
|
+
jscode << <<END_JS
|
29
|
+
var STDOUT_LINE_NO = 0;
|
30
|
+
var FAILURES = 0;
|
31
|
+
var TOTAL = #{expected.size};
|
32
|
+
|
33
|
+
function STDOUT_puts(str)
|
34
|
+
{
|
35
|
+
var out = document.getElementById('out_' + STDOUT_LINE_NO);
|
36
|
+
var expected = document.getElementById('exp_' + STDOUT_LINE_NO);
|
37
|
+
|
38
|
+
out.innerHTML = str.replace(/[&]/g, "&").replace(/[<]/g, "<").replace(/[>]/g, ">");
|
39
|
+
|
40
|
+
if (out.innerHTML === expected.innerHTML)
|
41
|
+
{
|
42
|
+
document.getElementById('line_' + STDOUT_LINE_NO).style.background = '#{GREEN}';
|
43
|
+
}
|
44
|
+
else
|
45
|
+
{
|
46
|
+
FAILURES += 1;
|
47
|
+
}
|
48
|
+
|
49
|
+
STDOUT_LINE_NO += 1;
|
50
|
+
|
51
|
+
document.getElementById('status').innerHTML =
|
52
|
+
"<b>" + STDOUT_LINE_NO + "</b> / " + TOTAL + " (" + FAILURES + " failures)";
|
53
|
+
}
|
54
|
+
|
55
|
+
function start()
|
56
|
+
{
|
57
|
+
main();
|
58
|
+
}
|
59
|
+
END_JS
|
60
|
+
|
61
|
+
File.open('test/browser.test.js', 'w+') {|f| f << jscode}
|
62
|
+
|
63
|
+
html_script = script.gsub("&", "&").
|
64
|
+
gsub("<", "<").
|
65
|
+
gsub(">", ">").gsub("\n", "<br/>")
|
66
|
+
|
67
|
+
File.open('test/browser.test.html', 'w+') do |f|
|
68
|
+
f.puts %{<html><head><script language="javascript" src="browser.test.js"></script>
|
69
|
+
<style>
|
70
|
+
#expected { background: #ccc; }
|
71
|
+
</style>
|
72
|
+
<body onload="start();">
|
73
|
+
<h1>RubyJS Test Suite Runner</h1>
|
74
|
+
|
75
|
+
<a href="#source">View Ruby source code</a> |
|
76
|
+
<a href="browser.test.js">View Javascript source code</a><br/>
|
77
|
+
|
78
|
+
<p>
|
79
|
+
Test status (tests run / total # of tests): <div id="status"></div>
|
80
|
+
</p>
|
81
|
+
|
82
|
+
<table cellspacing="5" cellpadding="5">
|
83
|
+
<thead>
|
84
|
+
<tr>
|
85
|
+
<td width="50%"><b>Output</b></td>
|
86
|
+
<td width="50%"><b>Expected</b></td>
|
87
|
+
</tr>
|
88
|
+
</thead>
|
89
|
+
<tbody>
|
90
|
+
}
|
91
|
+
|
92
|
+
expected.each_with_index do |line, i|
|
93
|
+
f.puts %{
|
94
|
+
<tr id="line_#{i}" style="background: #{RED}">
|
95
|
+
<td>
|
96
|
+
<pre id="out_#{i}"></pre>
|
97
|
+
</td>
|
98
|
+
<td>
|
99
|
+
<pre id="exp_#{i}">#{line}</pre>
|
100
|
+
</td>
|
101
|
+
</tr>
|
102
|
+
}
|
103
|
+
end
|
104
|
+
|
105
|
+
f.puts %{
|
106
|
+
<tr><td colspan="2" style="background: grey"> </td></tr>
|
107
|
+
}
|
108
|
+
|
109
|
+
# Add some "overflow" rows, in case the RubyJS test output
|
110
|
+
# is longer as expected.
|
111
|
+
10.times do |i|
|
112
|
+
f.puts %{
|
113
|
+
<tr id="line_#{i+expected.size}">
|
114
|
+
<td>
|
115
|
+
<pre id="out_#{i+expected.size}"></pre>
|
116
|
+
</td>
|
117
|
+
<td>
|
118
|
+
<pre id="exp_#{i+expected.size}"></pre>
|
119
|
+
</td>
|
120
|
+
</tr>
|
121
|
+
}
|
122
|
+
end
|
123
|
+
|
124
|
+
f.puts %{
|
125
|
+
</tbody>
|
126
|
+
</table>
|
127
|
+
<pre id="source">#{html_script}</pre>
|
128
|
+
</body></html>}
|
129
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
def gen_test_suite(tests)
|
2
|
+
script = ""
|
3
|
+
body = ""
|
4
|
+
|
5
|
+
script << "require 'common'\n\n"
|
6
|
+
tests.each_with_index do |file, i|
|
7
|
+
basename = File.basename(file)[0..-4]
|
8
|
+
klassname = basename.gsub(/(^|_)./) {|m| m[-1,1].upcase}
|
9
|
+
humanname = basename.gsub('_', ' ').capitalize
|
10
|
+
|
11
|
+
script << "#\n"
|
12
|
+
script << "# file: #{file}\n"
|
13
|
+
script << "#\n\n"
|
14
|
+
script << "module T_#{klassname}\n"
|
15
|
+
script << File.read(file)
|
16
|
+
script << "end\n"
|
17
|
+
script << "\n\n"
|
18
|
+
body << %{
|
19
|
+
puts '~~~~~~~~~~~~~~~~~~~~'
|
20
|
+
puts '#{humanname}'
|
21
|
+
puts '~~~~~~~~~~~~~~~~~~~~'
|
22
|
+
T_#{klassname}::#{klassname}.main
|
23
|
+
}
|
24
|
+
end
|
25
|
+
|
26
|
+
script << %{
|
27
|
+
class TestSuite
|
28
|
+
def self.main
|
29
|
+
begin
|
30
|
+
#{body}
|
31
|
+
rescue Exception => a
|
32
|
+
p "unhandled exception"
|
33
|
+
p a
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
TestSuite.main unless $RUBYJS
|
38
|
+
}
|
39
|
+
|
40
|
+
return script
|
41
|
+
end
|
data/test/run_benchs.rb
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require 'tempfile'
|
3
|
+
params = YAML.load(File.read('test/benchmark/params.yaml'))
|
4
|
+
benchs = Dir["test/benchmark/bm_*.{rb,js}"]
|
5
|
+
OPTS = "--opt NoArgumentArityChecks --opt OptimizeArithOps"
|
6
|
+
|
7
|
+
def run_rubyjs(param, klassname, file)
|
8
|
+
par = param ? param.inspect : "nil"
|
9
|
+
cmd_rubyjs_gen =
|
10
|
+
%{./rubyjs_gen -I./test -o - -o /tmp/#{klassname} -r common -r benchmark/common #{OPTS} -m #{klassname} -a "main(undefined, #{par})" #{file}}
|
11
|
+
|
12
|
+
cmd_run_js = %{/usr/bin/time ./utils/js/run.sh 2>&1}
|
13
|
+
|
14
|
+
result = `#{cmd_rubyjs_gen} | #{cmd_run_js}`
|
15
|
+
arr = result.split("\n")
|
16
|
+
time = arr.pop.split(" ")[2].sub(",", ".").to_f # user
|
17
|
+
return [file, klassname, param, time.to_f, arr.join("\n")]
|
18
|
+
end
|
19
|
+
|
20
|
+
def run_js(param, klassname, file)
|
21
|
+
par = param ? param.inspect : "null"
|
22
|
+
|
23
|
+
script = ""
|
24
|
+
script << File.read('./test/benchmark/common.js')
|
25
|
+
script << "\n"
|
26
|
+
script << File.read(file)
|
27
|
+
script << "\n"
|
28
|
+
script << "main(#{par});"
|
29
|
+
|
30
|
+
jscode = Tempfile.new('rubyjs')
|
31
|
+
jscode.write(script)
|
32
|
+
jscode.close(false)
|
33
|
+
|
34
|
+
cmd_run_js = %{/usr/bin/time ./utils/js/run.sh 2>&1}
|
35
|
+
|
36
|
+
result = `#{cmd_run_js} < #{jscode.path}`
|
37
|
+
arr = result.split("\n")
|
38
|
+
time = arr.pop.split(" ")[2].sub(",", ".").to_f # user
|
39
|
+
return [file, klassname, param, time.to_f, arr.join("\n")]
|
40
|
+
end
|
41
|
+
|
42
|
+
benchs.sort.each do |file|
|
43
|
+
basename = File.basename(file)[0..-4]
|
44
|
+
klassname = basename.gsub(/(^|_)./) {|m| m[-1,1].upcase}
|
45
|
+
humanname = basename.gsub('_', ' ').capitalize
|
46
|
+
ext = File.extname(file)
|
47
|
+
|
48
|
+
(params[klassname] || [nil]).each do |i|
|
49
|
+
case ext
|
50
|
+
when '.rb'
|
51
|
+
p run_rubyjs(i, klassname, file)
|
52
|
+
when '.js'
|
53
|
+
p run_js(i, klassname, file)
|
54
|
+
else
|
55
|
+
raise
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
data/test/run_tests.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'tempfile'
|
2
|
+
require 'test/gen_test_suite'
|
3
|
+
|
4
|
+
if ARGV.empty?
|
5
|
+
tests = Dir['test/test_*.rb']
|
6
|
+
else
|
7
|
+
tests = Dir["test/test_{" + ARGV.join(',') + "}.rb"]
|
8
|
+
end
|
9
|
+
|
10
|
+
rubycode = Tempfile.new('rubyjs')
|
11
|
+
script = gen_test_suite(tests)
|
12
|
+
rubycode.write(script)
|
13
|
+
rubycode.close(false)
|
14
|
+
|
15
|
+
jsout = `./bin/rubyjs -I./test -a ";main()" -m TestSuite #{rubycode.path} | ./utils/js/run.sh`
|
16
|
+
rbout = `ruby -I./test < #{rubycode.path}`
|
17
|
+
|
18
|
+
if jsout == rbout
|
19
|
+
else
|
20
|
+
puts "FAILED"
|
21
|
+
exit 1
|
22
|
+
end
|
data/test/test_args.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
class TestArgs
|
2
|
+
def m(a, b=1, c="hallo", *args)
|
3
|
+
p a
|
4
|
+
p b
|
5
|
+
p c
|
6
|
+
p args
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.main
|
10
|
+
obj = new()
|
11
|
+
|
12
|
+
obj.m(0)
|
13
|
+
puts "--"
|
14
|
+
obj.m(1,2)
|
15
|
+
puts "--"
|
16
|
+
obj.m(1,2,9)
|
17
|
+
puts "--"
|
18
|
+
obj.m(1,2,9,5)
|
19
|
+
puts "--"
|
20
|
+
obj.m(1,2,9,5,6)
|
21
|
+
puts "--"
|
22
|
+
obj.m(1,2,9,5,6,7,8,9,10,11,12)
|
23
|
+
end
|
24
|
+
end
|
data/test/test_array.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
class TestArray
|
2
|
+
if $RUBYJS
|
3
|
+
def array
|
4
|
+
[1, 2, `null`, [`null`, `null`, 4]]
|
5
|
+
end
|
6
|
+
else
|
7
|
+
def array
|
8
|
+
[1, 2, nil, [nil, nil, 4]]
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def test
|
13
|
+
# delete
|
14
|
+
a = [ "a", "b", "b", "b", "c" ]
|
15
|
+
p a.delete("b") #=> "b"
|
16
|
+
p a #=> ["a", "c"]
|
17
|
+
p a.delete("z") #=> nil
|
18
|
+
|
19
|
+
puts "test native JS array mapping"
|
20
|
+
p array()
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.main
|
24
|
+
new.test
|
25
|
+
end
|
26
|
+
end
|
data/test/test_case.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
class TestCase
|
2
|
+
def test
|
3
|
+
case 1+1
|
4
|
+
when 1, 3
|
5
|
+
puts "NOT OKAY"
|
6
|
+
when 2
|
7
|
+
puts "OKAY"
|
8
|
+
else
|
9
|
+
puts "NOT OKAY"
|
10
|
+
end
|
11
|
+
|
12
|
+
p (Array === [])
|
13
|
+
p (RuntimeError === RuntimeError.new)
|
14
|
+
|
15
|
+
case 1
|
16
|
+
when Fixnum
|
17
|
+
puts "OK"
|
18
|
+
when 1
|
19
|
+
puts "OK"
|
20
|
+
end
|
21
|
+
|
22
|
+
case 4
|
23
|
+
when 0..3
|
24
|
+
puts "NOT OKAY"
|
25
|
+
when 1...4
|
26
|
+
puts "NOT OKAY"
|
27
|
+
when 2..4
|
28
|
+
puts "OKAY"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.main
|
33
|
+
new.test
|
34
|
+
end
|
35
|
+
end
|
data/test/test_class.rb
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
module X
|
2
|
+
end
|
3
|
+
|
4
|
+
class A
|
5
|
+
include X
|
6
|
+
end
|
7
|
+
|
8
|
+
class B < A
|
9
|
+
end
|
10
|
+
|
11
|
+
class C < B
|
12
|
+
end
|
13
|
+
|
14
|
+
class D
|
15
|
+
end
|
16
|
+
|
17
|
+
class TestClass
|
18
|
+
def self.main
|
19
|
+
p A.new.instance_of?(A) # => true
|
20
|
+
p A.new.instance_of?(B) # => false
|
21
|
+
p B.new.instance_of?(A) # => false
|
22
|
+
p A.new.instance_of?(X) # => false
|
23
|
+
p B.new.instance_of?(X) # => false
|
24
|
+
|
25
|
+
p A.new.kind_of?(A) # => true
|
26
|
+
p A.new.kind_of?(B) # => false
|
27
|
+
p B.new.kind_of?(A) # => true
|
28
|
+
p A.new.kind_of?(X) # => true
|
29
|
+
p B.new.kind_of?(X) # => true
|
30
|
+
|
31
|
+
p C.new.kind_of?(X) # => true
|
32
|
+
p C.new.kind_of?(A) # => true
|
33
|
+
p C.new.kind_of?(B) # => true
|
34
|
+
p C.new.kind_of?(C) # => true
|
35
|
+
p C.new.kind_of?(D) # => false
|
36
|
+
p C.new.kind_of?(Object) # => true
|
37
|
+
p C.new.kind_of?(Kernel) # => true
|
38
|
+
p C.new.kind_of?(Class) # => false
|
39
|
+
|
40
|
+
p ("hallo".class.name)
|
41
|
+
p (nil.class.name)
|
42
|
+
p (nil.instance_of?(NilClass))
|
43
|
+
p ("hallo".instance_of?(String))
|
44
|
+
p ("hallo".class)
|
45
|
+
p A
|
46
|
+
p B
|
47
|
+
p C
|
48
|
+
p D
|
49
|
+
p X
|
50
|
+
|
51
|
+
p X.name
|
52
|
+
p A.name
|
53
|
+
p B.name
|
54
|
+
end
|
55
|
+
end
|
data/test/test_eql.rb
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
class TestException
|
2
|
+
def self.main
|
3
|
+
|
4
|
+
p "before block"
|
5
|
+
begin
|
6
|
+
p "in block"
|
7
|
+
end
|
8
|
+
p "after block"
|
9
|
+
|
10
|
+
###
|
11
|
+
begin
|
12
|
+
p "block"
|
13
|
+
rescue
|
14
|
+
p "rescue"
|
15
|
+
rescue Exception => a
|
16
|
+
p "another rescue"
|
17
|
+
p a
|
18
|
+
else
|
19
|
+
p "else"
|
20
|
+
end
|
21
|
+
|
22
|
+
p RuntimeError.new("test")
|
23
|
+
|
24
|
+
puts "before begin"
|
25
|
+
begin
|
26
|
+
puts "before raise"
|
27
|
+
raise Exception, "blah"
|
28
|
+
puts "after raise"
|
29
|
+
rescue
|
30
|
+
puts "noooo"
|
31
|
+
rescue Exception => a
|
32
|
+
p a
|
33
|
+
puts "yes"
|
34
|
+
ensure
|
35
|
+
puts "ensure"
|
36
|
+
end
|
37
|
+
puts "after begin"
|
38
|
+
|
39
|
+
puts "--"
|
40
|
+
|
41
|
+
begin
|
42
|
+
puts "abc"
|
43
|
+
raise "r"
|
44
|
+
rescue
|
45
|
+
p $!
|
46
|
+
puts "b"
|
47
|
+
ensure
|
48
|
+
puts "e"
|
49
|
+
end
|
50
|
+
|
51
|
+
#
|
52
|
+
# Test arity checks
|
53
|
+
#
|
54
|
+
|
55
|
+
begin
|
56
|
+
p("hallo".to_s(2))
|
57
|
+
rescue ArgumentError => a
|
58
|
+
p a
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|