partialruby 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,83 @@
1
+ require "partialruby"
2
+
3
+ include PartialRuby
4
+
5
+ describe Context, "PartialRuby context" do
6
+
7
+ class BlockTest
8
+ def self.foo(*args)
9
+ yield(*args)
10
+ end
11
+
12
+ def self.bar(*args)
13
+ end
14
+ end
15
+
16
+ it "should pass block statements" do
17
+ BlockTest.should_receive :bar
18
+ PartialRuby.eval("BlockTest.foo{ BlockTest.bar }", binding)
19
+ end
20
+
21
+ def self.test_block_argument(args, args_result)
22
+ it "should pass block statements with arguments #{args_result}" do
23
+ BlockTest.should_receive(:bar).with(*args_result)
24
+ PartialRuby.eval("BlockTest.foo(#{args}) { |x| BlockTest.bar(x) }", binding)
25
+ end
26
+ end
27
+
28
+ def self.test_block_arguments(args, args_result)
29
+ it "should pass block statements with arguments #{args_result}" do
30
+ BlockTest.should_receive(:bar).with(*args_result)
31
+ PartialRuby.eval("BlockTest.foo(#{args}) { |*x| BlockTest.bar(*x) }", binding)
32
+ end
33
+ end
34
+
35
+ test_block_argument "1", [1]
36
+ test_block_argument "'test'", ["test"]
37
+
38
+ test_block_arguments "1,2", [1,2]
39
+ test_block_arguments "'test',2", ["test",2]
40
+
41
+ it "should implement yield statement" do
42
+ def foo
43
+ PartialRuby.eval("yield", binding)
44
+ end
45
+ foo{}
46
+ end
47
+
48
+ it "should implement yield statement with one argument" do
49
+ def foo_2
50
+ PartialRuby.eval("yield(4)", binding)
51
+ end
52
+
53
+ a = nil
54
+ foo_2{|x| a = x }
55
+ a.should be == 4
56
+ end
57
+
58
+ it "should implement yield statement with two argument" do
59
+ def foo_2
60
+ PartialRuby.eval("yield(4,5)", binding)
61
+ end
62
+
63
+ a = nil
64
+ b = nil
65
+ foo_2{|x,y| a = x; b = y }
66
+ a.should be == 4
67
+ b.should be == 5
68
+ end
69
+
70
+ it "should implement yield statement with multiple arguments" do
71
+ def foo_2
72
+ x = [4,5]
73
+ PartialRuby.eval("yield(*x)", binding)
74
+ end
75
+
76
+ a = nil
77
+ b = nil
78
+ foo_2{|x,y| a = x; b = y }
79
+ a.should be == 4
80
+ b.should be == 5
81
+ end
82
+
83
+ end
data/spec/call_spec.rb ADDED
@@ -0,0 +1,26 @@
1
+ require "partialruby"
2
+
3
+ include PartialRuby
4
+
5
+ describe Context, "PartialRuby context" do
6
+ class X
7
+ def self.foo(*args)
8
+ end
9
+ end
10
+
11
+ it "should make call without arguments" do
12
+
13
+ X.should_receive(:foo)
14
+ PartialRuby.eval("X.foo", binding)
15
+ end
16
+
17
+ def self.test_args(args, args_result)
18
+ it "should make call without arguments #{args} and receive #{args_result.inspect}" do
19
+
20
+ X.should_receive(:foo).with(*args_result)
21
+ PartialRuby.eval("X.foo(#{args})", binding)
22
+ end
23
+ end
24
+
25
+ test_args "1,2,3", [1,2,3]
26
+ end
@@ -0,0 +1,34 @@
1
+ require "partialruby"
2
+
3
+ include PartialRuby
4
+
5
+ describe Context, "PartialRuby context" do
6
+
7
+ def self.test_classname(classname)
8
+ it "should declare class with name #{classname}" do
9
+ PartialRuby.eval("class #{classname}; end", binding)
10
+ newclass = eval(classname)
11
+ newclass.should be == newclass
12
+ end
13
+ end
14
+
15
+ def self.test_modulename(modulename)
16
+ it "should declare module with name #{modulename}" do
17
+ PartialRuby.eval("module #{modulename}; end", binding)
18
+ newmodl = eval(modulename)
19
+ newmodl.should be == newmodl
20
+ end
21
+
22
+ end
23
+
24
+ test_classname "X"
25
+
26
+ module TestModuleA
27
+ end
28
+ test_classname "TestModuleA::X"
29
+ test_classname "::X"
30
+
31
+ test_modulename "TestModuleA::Y"
32
+ test_modulename "::Y"
33
+
34
+ end
@@ -0,0 +1,33 @@
1
+ require "partialruby"
2
+
3
+ include PartialRuby
4
+
5
+ describe Context, "PartialRuby context" do
6
+ def self.test_const_read(*const_names)
7
+ const_names.each do |const_name|
8
+ it "should read constant of name #{const_name}" do
9
+ eval("#{const_name} = 9")
10
+ PartialRuby.eval("#{const_name}", binding).should be == 9
11
+ end
12
+ end
13
+ end
14
+
15
+ def self.test_const_assign(*const_names)
16
+ const_names.each do |const_name|
17
+ it "should assign constant of name #{const_name}" do
18
+ PartialRuby.eval("#{const_name} = 10", binding)
19
+ eval("#{const_name}").should be == 10
20
+ end
21
+ end
22
+ end
23
+
24
+ test_const_read "TEST_CONST"
25
+ test_const_assign "TEST_CONST2"
26
+
27
+ test_const_read "Fixnum::TEST_CONST"
28
+ test_const_assign "Fixnum::TEST_CONST2"
29
+
30
+ test_const_read "::TEST_CONST3"
31
+ test_const_assign "::TEST_CONST4"
32
+
33
+ end
data/spec/def_spec.rb ADDED
@@ -0,0 +1,35 @@
1
+ require "partialruby"
2
+
3
+ include PartialRuby
4
+
5
+ describe Context, "PartialRuby context" do
6
+
7
+ def self.test_method_def(method_name, arguments=nil, arguments_value=nil)
8
+
9
+ if arguments
10
+ it "should define method of name #{method_name} with arguments #{arguments}: #{arguments_value}" do
11
+ PartialRuby.eval("def #{method_name}(#{arguments}); end; #{method_name}(#{arguments_value})", binding)
12
+ end
13
+ else
14
+ it "should define method of name #{method_name} with no arguments" do
15
+ PartialRuby.eval("def #{method_name}; end; #{method_name}()", binding)
16
+ end
17
+ end
18
+ end
19
+
20
+ ["foo", "bar"].each do |method_name|
21
+ test_method_def method_name
22
+ { "a" => "1", "a,b" => "1,2"}.each do |k,v|
23
+ test_method_def method_name, k, v
24
+ end
25
+ end
26
+
27
+ it "should define singleton method" do
28
+ x = "test object"
29
+ PartialRuby.eval("def x.foo; end", binding)
30
+ end
31
+
32
+ it "should compile return statements" do
33
+ PartialRuby.eval("def test_foo; return 4; end; test_foo", binding).should be == 4
34
+ end
35
+ end
data/spec/eval_spec.rb ADDED
@@ -0,0 +1,85 @@
1
+ require "partialruby"
2
+
3
+ include PartialRuby
4
+
5
+ describe Context, "PartialRuby context" do
6
+
7
+ it "should eval literal 'hello world'" do
8
+ PartialRuby.eval('"hello world"', binding).should be == "hello world"
9
+ end
10
+
11
+ it "should eval hello world string" do
12
+ PartialRuby.eval 'print "hello world\n"', binding
13
+ end
14
+
15
+ it "should define a class" do
16
+
17
+ module TestEmptyClass
18
+ PartialRuby.eval 'class X; end', binding
19
+ end
20
+
21
+ TestEmptyClass::X.should be == TestEmptyClass::X
22
+ end
23
+
24
+ it "should define a class with a method" do
25
+
26
+ module TestClassWithFoo
27
+ PartialRuby.eval 'class X; def foo; end; end', binding
28
+ end
29
+
30
+ TestClassWithFoo::X.should be == TestClassWithFoo::X
31
+ end
32
+
33
+ it "should define a class with a method and the method must be callable" do
34
+
35
+ module TestClassWithFoo2
36
+ PartialRuby.eval 'class X; def foo; end; end', binding
37
+ end
38
+
39
+ x = TestClassWithFoo2::X.new
40
+ x.foo.should be == nil
41
+ end
42
+
43
+ it "should define a class with two methods and the methods must be callable" do
44
+
45
+ module TestClassWithFoo3
46
+ PartialRuby.eval 'class X; def foo; end; def bar; end; end', binding
47
+ end
48
+
49
+ x = TestClassWithFoo3::X.new
50
+ x.foo.should be == nil
51
+ x.bar.should be == nil
52
+ end
53
+
54
+ # This does not work in the original ruby!
55
+ # it "should write a local variable" do
56
+ # PartialRuby.eval "a = 5", binding
57
+ # a.should be == 5
58
+ # end
59
+
60
+ def self.test_local_with_value(value)
61
+ it "should allow represent literal #{value}" do
62
+ PartialRuby.eval(value, binding).should be == eval(value)
63
+ end
64
+
65
+ it "should read a local variable with value #{value}" do
66
+ a = eval(value)
67
+ PartialRuby.eval("a", binding).should be == eval(value)
68
+ end
69
+
70
+ it "should declare and read a local variable with value #{value}" do
71
+ PartialRuby.eval("a = #{value}; a", binding).should be == eval(value)
72
+ end
73
+ end
74
+
75
+ test_local_with_value "5"
76
+ test_local_with_value "5.5"
77
+ test_local_with_value "'teststring'"
78
+ test_local_with_value "[5]"
79
+ test_local_with_value "[5,6,7,8,9]"
80
+ test_local_with_value "[[9,6],7,8,9]"
81
+
82
+ test_local_with_value "{ 1 => 3, 5 => 9}"
83
+
84
+
85
+ end
@@ -0,0 +1,53 @@
1
+ require "partialruby"
2
+
3
+ include PartialRuby
4
+
5
+ describe Context, "PartialRuby context" do
6
+
7
+ def self.assert_ruby_expr(expr, expected = nil)
8
+
9
+ exception = nil
10
+
11
+ begin
12
+ expected ||= eval(expr)
13
+ rescue Exception => e
14
+ exception = e
15
+ end
16
+
17
+ if exception
18
+ it "should raise #{exception} on expresion #{expr}" do
19
+ lambda{
20
+ PartialRuby.eval(expr,binding)
21
+ }.should raise_error(exception.class)
22
+ end
23
+ else
24
+ it "should return #{expected} on expresion #{expr}" do
25
+ PartialRuby.eval(expr,binding).to_s.should be == expected.to_s
26
+ end
27
+ end
28
+ end
29
+
30
+ assert_ruby_expr("raise Exception")
31
+ assert_ruby_expr("begin; raise Exception; rescue; 5; end")
32
+ assert_ruby_expr("begin; raise Exception; rescue Exception; 4; end")
33
+ assert_ruby_expr("begin; raise Exception; rescue Exception => e; 9; ensure; 4; end")
34
+ assert_ruby_expr("begin; raise '999'; rescue RuntimeError; end")
35
+ assert_ruby_expr("begin; raise '999'; rescue RuntimeError; end; 5")
36
+ assert_ruby_expr("begin; raise '999'; rescue RuntimeError, Exception; end")
37
+ assert_ruby_expr("begin; raise '999'; rescue RuntimeError, Exception; end; 5")
38
+
39
+ [
40
+ "rescue RuntimeError; end",
41
+ "rescue RuntimeError => e; end",
42
+ "rescue Errno::EINVAL; end",
43
+ "rescue Errno::EINVAL => e; end",
44
+ "rescue RuntimeError, Errno::EINVAL; end",
45
+ "rescue RuntimeError, Errno::EINVAL => e; e; end",
46
+ ].each do |x|
47
+ assert_ruby_expr("begin; raise Errno::EINVAL; #{x}")
48
+ assert_ruby_expr("begin; raise RuntimeError; #{x}")
49
+ assert_ruby_expr("begin; raise Errno::EINVAL; #{x}")
50
+ assert_ruby_expr("begin; raise RuntimeError; #{x}")
51
+ end
52
+
53
+ end
@@ -0,0 +1,38 @@
1
+ require "partialruby"
2
+
3
+ include PartialRuby
4
+
5
+ describe Context, "PartialRuby context" do
6
+
7
+ def self.assert_ruby_expr(expr, expected = nil)
8
+
9
+ expected ||= eval(expr)
10
+
11
+ it "should return #{expected} on expresion #{expr}" do
12
+ PartialRuby.eval(expr,binding).should be == expected
13
+ end
14
+ end
15
+
16
+ def self.test_if(keyword)
17
+ assert_ruby_expr keyword + " true; true; else; false; end"
18
+ assert_ruby_expr keyword + " true; true; else; true; end"
19
+ assert_ruby_expr keyword + " true; false; else; true; end"
20
+ assert_ruby_expr keyword + " true; false; else; false; end"
21
+ end
22
+
23
+ test_if "if"
24
+ test_if "unless"
25
+
26
+ assert_ruby_expr "i = 5 ; while(i>0); i=i-1; end; i"
27
+ assert_ruby_expr "i = 5 ; until(i==0); i=i-1; end; i"
28
+
29
+
30
+ (1..4).each do |x|
31
+ assert_ruby_expr "case #{x}; when 1; 2; end"
32
+ assert_ruby_expr "case #{x}; when 1; 2; when 2; 3; end"
33
+ assert_ruby_expr "case #{x}; when 1; 2; when 2; 3; end"
34
+ assert_ruby_expr "case #{x}; when 1; 2; when 2; 3; when 3; 4; else; 9; end"
35
+ assert_ruby_expr "case #{x}; when (if true; 1; else; false; end),9; 2; when 2; 3; else; 9; end"
36
+ end
37
+
38
+ end
data/spec/gvar_spec.rb ADDED
@@ -0,0 +1,18 @@
1
+ require "partialruby"
2
+
3
+ include PartialRuby
4
+
5
+ describe Context, "PartialRuby context" do
6
+
7
+ def self.assert_ruby_expr(expr, expected = nil)
8
+
9
+ expected ||= eval(expr)
10
+
11
+ it "should return #{expected} on expresion #{expr}" do
12
+ PartialRuby.eval(expr,binding).should be == expected
13
+ end
14
+ end
15
+
16
+ assert_ruby_expr "$b"
17
+ assert_ruby_expr "$a = 4; $a"
18
+ end
data/spec/ivar_spec.rb ADDED
@@ -0,0 +1,18 @@
1
+ require "partialruby"
2
+
3
+ include PartialRuby
4
+
5
+ describe Context, "PartialRuby context" do
6
+
7
+ def self.assert_ruby_expr(expr, expected = nil)
8
+
9
+ expected ||= eval(expr)
10
+
11
+ it "should return #{expected} on expresion #{expr}" do
12
+ PartialRuby.eval(expr,binding).should be == expected
13
+ end
14
+ end
15
+
16
+ assert_ruby_expr "@b"
17
+ assert_ruby_expr "@a = 4; @a"
18
+ end
@@ -0,0 +1,24 @@
1
+ require "partialruby"
2
+
3
+ include PartialRuby
4
+
5
+ describe Context, "PartialRuby context" do
6
+
7
+ def self.assert_ruby_expr(expr, expected = nil)
8
+
9
+ expected ||= eval(expr)
10
+
11
+ it "should return #{expected} on expresion #{expr}" do
12
+ PartialRuby.eval(expr,binding).should be == expected
13
+ end
14
+ end
15
+
16
+ assert_ruby_expr "'xxx'"
17
+ assert_ruby_expr "43"
18
+ assert_ruby_expr "(0..9)"
19
+ assert_ruby_expr "{ 1 => 2, 3 => 4 }"
20
+ assert_ruby_expr "[1,2,3,4,5]"
21
+ assert_ruby_expr "/aaa/"
22
+
23
+ assert_ruby_expr 'a="x"; "xxxxx#{a}"'
24
+ end