AmberVM 0.0.19
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.
- data/README +38 -0
- data/bin/ambervm +278 -0
- data/lib/amber/acts_as_rvm_type.rb +157 -0
- data/lib/amber/classes/association.rb +36 -0
- data/lib/amber/classes/block.rb +52 -0
- data/lib/amber/classes/boolean.rb +40 -0
- data/lib/amber/classes/class.rb +50 -0
- data/lib/amber/classes/error.rb +22 -0
- data/lib/amber/classes/list.rb +96 -0
- data/lib/amber/classes/null.rb +35 -0
- data/lib/amber/classes/number.rb +95 -0
- data/lib/amber/classes/object.rb +56 -0
- data/lib/amber/classes/string.rb +79 -0
- data/lib/amber/classes.rb +113 -0
- data/lib/amber/environment.rb +251 -0
- data/lib/amber/fukubukuro/ecma_core.rb +409 -0
- data/lib/amber/fukubukuro.rb +866 -0
- data/lib/amber/functions/all.rb +3 -0
- data/lib/amber/functions/array/append.rb +50 -0
- data/lib/amber/functions/array/at.rb +50 -0
- data/lib/amber/functions/array/set_at.rb +50 -0
- data/lib/amber/functions/array.rb +30 -0
- data/lib/amber/functions/association/assoc_get.rb +55 -0
- data/lib/amber/functions/association/assoc_set.rb +56 -0
- data/lib/amber/functions/bitwise/bitwise_and.rb +41 -0
- data/lib/amber/functions/bitwise/bitwise_not.rb +41 -0
- data/lib/amber/functions/bitwise/bitwise_or.rb +41 -0
- data/lib/amber/functions/bitwise/bitwise_xor.rb +41 -0
- data/lib/amber/functions/bitwise.rb +3 -0
- data/lib/amber/functions/collection/get.rb +66 -0
- data/lib/amber/functions/collection/set.rb +67 -0
- data/lib/amber/functions/collection/size.rb +54 -0
- data/lib/amber/functions/general/cmp.rb +43 -0
- data/lib/amber/functions/general/eq.rb +45 -0
- data/lib/amber/functions/general/gt.rb +45 -0
- data/lib/amber/functions/general/gte.rb +45 -0
- data/lib/amber/functions/general/lt.rb +45 -0
- data/lib/amber/functions/general/lte.rb +45 -0
- data/lib/amber/functions/general/neq.rb +45 -0
- data/lib/amber/functions/general/type.rb +43 -0
- data/lib/amber/functions/general.rb +3 -0
- data/lib/amber/functions/io/print.rb +45 -0
- data/lib/amber/functions/io.rb +3 -0
- data/lib/amber/functions/list/align.rb +73 -0
- data/lib/amber/functions/list/join.rb +45 -0
- data/lib/amber/functions/list/map.rb +58 -0
- data/lib/amber/functions/list/split.rb +55 -0
- data/lib/amber/functions/list.rb +3 -0
- data/lib/amber/functions/logic/and.rb +55 -0
- data/lib/amber/functions/logic/not.rb +40 -0
- data/lib/amber/functions/logic/or.rb +50 -0
- data/lib/amber/functions/logic.rb +3 -0
- data/lib/amber/functions/math/abs.rb +39 -0
- data/lib/amber/functions/math/acos.rb +39 -0
- data/lib/amber/functions/math/add.rb +40 -0
- data/lib/amber/functions/math/asin.rb +39 -0
- data/lib/amber/functions/math/atan.rb +39 -0
- data/lib/amber/functions/math/ceil.rb +39 -0
- data/lib/amber/functions/math/cos.rb +39 -0
- data/lib/amber/functions/math/dec.rb +39 -0
- data/lib/amber/functions/math/div.rb +44 -0
- data/lib/amber/functions/math/exp.rb +39 -0
- data/lib/amber/functions/math/floor.rb +39 -0
- data/lib/amber/functions/math/inc.rb +39 -0
- data/lib/amber/functions/math/log.rb +39 -0
- data/lib/amber/functions/math/mod.rb +41 -0
- data/lib/amber/functions/math/mul.rb +43 -0
- data/lib/amber/functions/math/neg.rb +43 -0
- data/lib/amber/functions/math/power.rb +43 -0
- data/lib/amber/functions/math/rand.rb +36 -0
- data/lib/amber/functions/math/round.rb +39 -0
- data/lib/amber/functions/math/shl.rb +41 -0
- data/lib/amber/functions/math/shr.rb +41 -0
- data/lib/amber/functions/math/sin.rb +39 -0
- data/lib/amber/functions/math/sub.rb +43 -0
- data/lib/amber/functions/math/tan.rb +39 -0
- data/lib/amber/functions/math.rb +3 -0
- data/lib/amber/functions/objects/send.rb +22 -0
- data/lib/amber/functions/rails/print.rb +44 -0
- data/lib/amber/functions/rails.rb +3 -0
- data/lib/amber/functions/string/ansi.rb +24 -0
- data/lib/amber/functions/string/capstr.rb +23 -0
- data/lib/amber/functions/string/center.rb +25 -0
- data/lib/amber/functions/string/chr.rb +16 -0
- data/lib/amber/functions/string/ljust.rb +26 -0
- data/lib/amber/functions/string/regmatch.rb +34 -0
- data/lib/amber/functions/string/rjust.rb +26 -0
- data/lib/amber/functions/string.rb +3 -0
- data/lib/amber/functions.rb +103 -0
- data/lib/amber/interpreter.rb +1380 -0
- data/lib/amber/languages/brainfuck.rb +153 -0
- data/lib/amber/languages/ecma/compiler.rb +1661 -0
- data/lib/amber/languages/ecma/core-math.js +67 -0
- data/lib/amber/languages/ecma/core-objects.js +57 -0
- data/lib/amber/languages/ecma.rb +9 -0
- data/lib/amber/languages/ecma_fuku/compiler.rb +1622 -0
- data/lib/amber/languages/ecma_fuku/core-math.js +67 -0
- data/lib/amber/languages/ecma_fuku/core-objects.js +56 -0
- data/lib/amber/languages/ecma_fuku.rb +13 -0
- data/lib/amber/languages/math/compiler.rb +70 -0
- data/lib/amber/languages/math/tokenizer.rb +69 -0
- data/lib/amber/languages/math/tree.rb +110 -0
- data/lib/amber/languages/math.rb +26 -0
- data/lib/amber/languages.rb +99 -0
- data/lib/amber/library.rb +79 -0
- data/lib/amber/optimisation.rb +299 -0
- data/lib/amber/plugin.rb +337 -0
- data/lib/amber/rails.rb +90 -0
- data/lib/amber.rb +106 -0
- data/spec/amber/class_spec.rb +27 -0
- data/spec/amber/enviroment_spec.rb +61 -0
- data/spec/amber/function_spec.rb +25 -0
- data/spec/amber/functions/association/assoc_get_spec.rb +41 -0
- data/spec/amber/functions/association/assoc_set_spec.rb +43 -0
- data/spec/amber/functions/collection/get_spec.rb +12 -0
- data/spec/amber/functions/collection/set_spec.rb +10 -0
- data/spec/amber/functions/collection/size_spec.rb +10 -0
- data/spec/amber/functions/list/split_spec.rb +47 -0
- data/spec/amber/functions/string/ansi_spec.rb +44 -0
- data/spec/amber/functions/string/capstr_spec.rb +42 -0
- data/spec/amber/functions/string/center_spec.rb +49 -0
- data/spec/amber/functions/string/ljust_spec.rb +49 -0
- data/spec/amber/functions/string/regmatch_spec.rb +52 -0
- data/spec/amber/functions/string/rjust_spec.rb +49 -0
- data/spec/amber/interpreter/assignment_spec.rb +22 -0
- data/spec/amber/interpreter/condition_spec.rb +103 -0
- data/spec/amber/interpreter/constant_spec.rb +31 -0
- data/spec/amber/interpreter/core_call_spec.rb +72 -0
- data/spec/amber/interpreter/interpreter_spec.rb +11 -0
- data/spec/amber/interpreter/parameter_spec.rb +24 -0
- data/spec/amber/interpreter/sequence_spec.rb +47 -0
- data/spec/amber/interpreter/variable_spec.rb +24 -0
- data/spec/amber/plugin_spec.rb +10 -0
- data/spec/classes/atom/association_spec.rb +39 -0
- data/spec/classes/atom/block_spec.rb +25 -0
- data/spec/classes/atom/boolean_spec.rb +67 -0
- data/spec/classes/atom/error_spec.rb +43 -0
- data/spec/classes/atom/list_spec.rb +68 -0
- data/spec/classes/atom/number_spec.rb +132 -0
- data/spec/classes/atom/string_spec.rb +175 -0
- data/spec/languages/ecma/ecma_array_spec.rb +79 -0
- data/spec/languages/ecma/ecma_closure_spec.rb +38 -0
- data/spec/languages/ecma/ecma_literals_spec.rb +71 -0
- data/spec/languages/ecma/ecma_objects_spec.rb +165 -0
- data/spec/languages/ecma/ecma_old_spec.rb +540 -0
- data/spec/languages/ecma/ecma_spec.rb +64 -0
- data/spec/languages/ecma_fuku/ecma_array_spec.rb +61 -0
- data/spec/languages/ecma_fuku/ecma_closure_spec.rb +33 -0
- data/spec/languages/ecma_fuku/ecma_function_spec.rb +84 -0
- data/spec/languages/ecma_fuku/ecma_literals_spec.rb +55 -0
- data/spec/languages/ecma_fuku/ecma_objects_spec.rb +133 -0
- data/spec/languages/ecma_fuku/ecma_old_spec.rb +415 -0
- data/spec/languages/ecma_fuku/ecma_operator_spec.rb +33 -0
- data/spec/languages/ecma_fuku/ecma_spec.rb +52 -0
- data/spec/languages/math/compiler_spec.rb +49 -0
- data/spec/languages/math/tokenizer_spec.rb +73 -0
- data/spec/languages/math/tree_spec.rb +153 -0
- metadata +225 -0
@@ -0,0 +1,64 @@
|
|
1
|
+
$: << 'lib'
|
2
|
+
|
3
|
+
require 'amber'
|
4
|
+
require 'amber/languages'
|
5
|
+
require 'amber/languages/ecma'
|
6
|
+
|
7
|
+
describe AmberVM::Languages::ECMA do
|
8
|
+
before(:each) do
|
9
|
+
@compiler = AmberVM::Languages::ECMA.new
|
10
|
+
@env = @compiler.env
|
11
|
+
end
|
12
|
+
|
13
|
+
def run code, &tests
|
14
|
+
env = @env.dup
|
15
|
+
yield(@compiler.compile(code).execute(@env), @env)
|
16
|
+
yield(@compiler.compile(code).optimize.execute(env), env)
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "variables" do
|
20
|
+
it "should get varibles" do
|
21
|
+
@env['test'] = 42
|
22
|
+
code = <<-CODE
|
23
|
+
test;
|
24
|
+
CODE
|
25
|
+
|
26
|
+
run code do |result, env|
|
27
|
+
result.should == 42
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should allow to assign literals to variables" do
|
32
|
+
code = <<-CODE
|
33
|
+
test = 23;
|
34
|
+
CODE
|
35
|
+
run code do |result, env|
|
36
|
+
result.should == 23
|
37
|
+
env['test'].val.should == 23
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should autocast strings when using <var>++" do
|
42
|
+
code = <<-CODE
|
43
|
+
test = '1.2';
|
44
|
+
test++;
|
45
|
+
CODE
|
46
|
+
run code do |result, env|
|
47
|
+
result.should == '1.2'
|
48
|
+
env['test'].val.should == 2.2
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe '+ operator' do
|
54
|
+
it 'should behave like ECMA' do
|
55
|
+
code = <<-CODE
|
56
|
+
1 + "3";
|
57
|
+
CODE
|
58
|
+
run code do |result, env|
|
59
|
+
result.should == "13"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
$: << 'lib'
|
2
|
+
require 'amber'
|
3
|
+
require 'amber/languages'
|
4
|
+
require 'amber/languages/ecma_fuku'
|
5
|
+
|
6
|
+
describe AmberVM::Languages::ECMA_Fuku do
|
7
|
+
before(:each) do
|
8
|
+
@env = {}
|
9
|
+
@compiler = AmberVM::Languages::ECMA_Fuku.new
|
10
|
+
end
|
11
|
+
|
12
|
+
def run code
|
13
|
+
@compiler.compile(code).execute(@env)
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "arrays" do
|
17
|
+
it "should allow accessing data on an array" do
|
18
|
+
@env['test'] = [42]
|
19
|
+
result = run <<-CODE
|
20
|
+
test[0]
|
21
|
+
CODE
|
22
|
+
result.should == 42
|
23
|
+
end
|
24
|
+
it "should allow set data on an array" do
|
25
|
+
@env['test'] = [42]
|
26
|
+
result = run <<-CODE
|
27
|
+
test[0] = 23
|
28
|
+
CODE
|
29
|
+
result.should == 23
|
30
|
+
@env['test'].should == [23]
|
31
|
+
@env['test'][0].should == 23
|
32
|
+
end
|
33
|
+
it "should allow to concat arrays" do
|
34
|
+
a1 = [42]
|
35
|
+
@env['test'] = [a1]
|
36
|
+
result = run <<-CODE
|
37
|
+
test[0][0]
|
38
|
+
CODE
|
39
|
+
result.should == 42
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should allow to concat arrays when setting values" do
|
43
|
+
a1 = [42]
|
44
|
+
@env['test'] = [a1]
|
45
|
+
result = run <<-CODE
|
46
|
+
test[0][0] = 23
|
47
|
+
CODE
|
48
|
+
result.should == 23
|
49
|
+
@env['test'].should == [[23]]
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should wrap arrays" do
|
53
|
+
a1 = [42]
|
54
|
+
@env['test'] = a1
|
55
|
+
result = run <<-CODE
|
56
|
+
test[0] = 23
|
57
|
+
CODE
|
58
|
+
a1.should == [23]
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
$: << 'lib'
|
2
|
+
require 'amber'
|
3
|
+
require 'amber/languages'
|
4
|
+
require 'amber/languages/ecma_fuku'
|
5
|
+
|
6
|
+
describe AmberVM::Languages::ECMA_Fuku do
|
7
|
+
before(:each) do
|
8
|
+
@env = {} # AmberVM::Interpreter.env
|
9
|
+
@compiler = AmberVM::Languages::ECMA_Fuku.new
|
10
|
+
end
|
11
|
+
|
12
|
+
def run code
|
13
|
+
@compiler.compile(code).execute(@env)
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "closure" do
|
17
|
+
it "should be created" do
|
18
|
+
pending 'No closures implemented yet.'
|
19
|
+
result = run <<-CODE
|
20
|
+
function createClosure(x) {
|
21
|
+
return function() {
|
22
|
+
return x;
|
23
|
+
};
|
24
|
+
}
|
25
|
+
closure = createClosure(42);
|
26
|
+
createClosure("wrong!");
|
27
|
+
closure();
|
28
|
+
CODE
|
29
|
+
result.should == 42
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
$: << 'lib'
|
2
|
+
require 'amber'
|
3
|
+
require 'amber/languages'
|
4
|
+
require 'amber/languages/ecma_fuku'
|
5
|
+
|
6
|
+
describe AmberVM::Languages::ECMA_Fuku do
|
7
|
+
before(:each) do
|
8
|
+
@env = {}
|
9
|
+
@compiler = AmberVM::Languages::ECMA_Fuku.new
|
10
|
+
end
|
11
|
+
|
12
|
+
def run code
|
13
|
+
@compiler.compile(code).execute(@env)
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "functions" do
|
17
|
+
it "should handle function definitions without parameters" do
|
18
|
+
res = run <<-EOC
|
19
|
+
function f() {
|
20
|
+
return 42;
|
21
|
+
}
|
22
|
+
EOC
|
23
|
+
res.class.should == Proc
|
24
|
+
@env['f'].should be
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should handle function definitions with parameters" do
|
28
|
+
res = run <<-EOC
|
29
|
+
function g(x) {
|
30
|
+
return 42 + x;
|
31
|
+
}
|
32
|
+
EOC
|
33
|
+
res.class.should == Proc
|
34
|
+
@env['g'].should be
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should execute function definitions without parameters" do
|
38
|
+
result = run <<-EOC
|
39
|
+
function f() {
|
40
|
+
return 42;
|
41
|
+
}
|
42
|
+
f();
|
43
|
+
EOC
|
44
|
+
result.should == 42
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should execute function with parameters" do
|
48
|
+
result = run <<-EOC
|
49
|
+
function g(x) {
|
50
|
+
return 42 + x;
|
51
|
+
}
|
52
|
+
g(2)
|
53
|
+
EOC
|
54
|
+
result.should == 44
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should execute function that calls a function" do
|
58
|
+
result = run <<-EOC
|
59
|
+
function f() {
|
60
|
+
return 'inner';
|
61
|
+
}
|
62
|
+
function g() {
|
63
|
+
return f();
|
64
|
+
}
|
65
|
+
g();
|
66
|
+
EOC
|
67
|
+
result.should == 'inner'
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should execute member functions (methods)" do
|
71
|
+
result = run <<-CODE
|
72
|
+
o = {
|
73
|
+
b: function() {
|
74
|
+
return 1;
|
75
|
+
}
|
76
|
+
};
|
77
|
+
o.b();
|
78
|
+
CODE
|
79
|
+
result.should == 1
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
$: << 'lib'
|
2
|
+
require 'amber'
|
3
|
+
require 'amber/languages'
|
4
|
+
require 'amber/languages/ecma_fuku'
|
5
|
+
|
6
|
+
describe AmberVM::Languages::ECMA_Fuku do
|
7
|
+
before(:each) do
|
8
|
+
@compiler = AmberVM::Languages::ECMA_Fuku.new
|
9
|
+
@env = {}
|
10
|
+
end
|
11
|
+
def run code
|
12
|
+
@compiler.compile(code).execute(@env)
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "literals" do
|
16
|
+
it "should know String literals" do
|
17
|
+
res = run <<-CODE
|
18
|
+
"test"
|
19
|
+
CODE
|
20
|
+
res.should == "test"
|
21
|
+
end
|
22
|
+
it "should know Integer literals" do
|
23
|
+
res = run <<-CODE
|
24
|
+
42
|
25
|
+
CODE
|
26
|
+
res.should == 42
|
27
|
+
end
|
28
|
+
it "should know Float literals" do
|
29
|
+
res = run <<-CODE
|
30
|
+
4.2
|
31
|
+
CODE
|
32
|
+
res.should == 4.2
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should know complex Float literals" do
|
36
|
+
res = run <<-CODE
|
37
|
+
.2e-10
|
38
|
+
CODE
|
39
|
+
res.should == 0.2e-10
|
40
|
+
end
|
41
|
+
it "should know the false literals" do
|
42
|
+
res = run <<-CODE
|
43
|
+
false
|
44
|
+
CODE
|
45
|
+
res.should_not be_true
|
46
|
+
end
|
47
|
+
it "should know the true literals" do
|
48
|
+
res = run <<-CODE
|
49
|
+
true
|
50
|
+
CODE
|
51
|
+
res.should be_true
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
@@ -0,0 +1,133 @@
|
|
1
|
+
$: << 'lib'
|
2
|
+
require 'amber'
|
3
|
+
require 'amber/languages'
|
4
|
+
require 'amber/languages/ecma_fuku'
|
5
|
+
require 'ostruct'
|
6
|
+
|
7
|
+
describe AmberVM::Languages::ECMA_Fuku do
|
8
|
+
before(:each) do
|
9
|
+
@env = {}
|
10
|
+
@compiler = AmberVM::Languages::ECMA_Fuku.new
|
11
|
+
end
|
12
|
+
|
13
|
+
def run code
|
14
|
+
@compiler.compile(code).execute(@env)
|
15
|
+
end
|
16
|
+
|
17
|
+
describe "objects" do
|
18
|
+
|
19
|
+
it "should see outer functions" do
|
20
|
+
result = run <<-CODE
|
21
|
+
function a() {
|
22
|
+
return 1;
|
23
|
+
}
|
24
|
+
o = {
|
25
|
+
b: function() {
|
26
|
+
return a();
|
27
|
+
}
|
28
|
+
};
|
29
|
+
o.b();
|
30
|
+
CODE
|
31
|
+
result.should == 1
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should get variables" do
|
35
|
+
result = run <<-CODE
|
36
|
+
obj = { variable: 42 };
|
37
|
+
obj.variable
|
38
|
+
CODE
|
39
|
+
result.should == 42
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should set variables" do
|
43
|
+
result = run <<-CODE
|
44
|
+
obj = { variable: 42 };
|
45
|
+
obj.variable = 23
|
46
|
+
CODE
|
47
|
+
@env['obj'].variable.should == 23
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should allow to concat objects variables" do
|
51
|
+
result = run <<-CODE
|
52
|
+
obj = {};
|
53
|
+
obj2 = { variable: 42 };
|
54
|
+
obj.obj = obj2;
|
55
|
+
obj.obj.variable
|
56
|
+
CODE
|
57
|
+
result.should == 42
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should handle this.member" do
|
61
|
+
result = run <<-CODE
|
62
|
+
obj = {
|
63
|
+
a: 42,
|
64
|
+
b: function() {
|
65
|
+
return this.a;
|
66
|
+
}
|
67
|
+
};
|
68
|
+
obj.b();
|
69
|
+
CODE
|
70
|
+
result.should == 42
|
71
|
+
end
|
72
|
+
|
73
|
+
it "should handle this.method()" do
|
74
|
+
result = run <<-CODE
|
75
|
+
obj = {
|
76
|
+
a: function() {
|
77
|
+
return 42;
|
78
|
+
},
|
79
|
+
b: function() {
|
80
|
+
return this.a();
|
81
|
+
}
|
82
|
+
};
|
83
|
+
obj.b();
|
84
|
+
CODE
|
85
|
+
result.should == 42
|
86
|
+
end
|
87
|
+
|
88
|
+
end
|
89
|
+
|
90
|
+
describe "external objects" do
|
91
|
+
it "should get variables" do
|
92
|
+
object = OpenStruct.new
|
93
|
+
object.variable = 42
|
94
|
+
@env['obj'] = object
|
95
|
+
result = run <<-CODE
|
96
|
+
obj.variable
|
97
|
+
CODE
|
98
|
+
result.should == 42
|
99
|
+
end
|
100
|
+
|
101
|
+
it "should set variables" do
|
102
|
+
object = OpenStruct.new
|
103
|
+
object.variable = 42
|
104
|
+
@env['obj'] = object
|
105
|
+
result = run <<-CODE
|
106
|
+
obj.variable = 23
|
107
|
+
CODE
|
108
|
+
@env['obj'].variable.should == 23
|
109
|
+
end
|
110
|
+
|
111
|
+
it "should allow to concat objects variables" do
|
112
|
+
object = OpenStruct.new
|
113
|
+
object2 = OpenStruct.new
|
114
|
+
object.obj = object2
|
115
|
+
object2.variable = 42
|
116
|
+
@env['obj'] = object
|
117
|
+
result = run <<-CODE
|
118
|
+
obj.obj.variable
|
119
|
+
CODE
|
120
|
+
result.should == 42
|
121
|
+
end
|
122
|
+
|
123
|
+
it "should allow to assign literals to variables" do
|
124
|
+
result = run <<-CODE
|
125
|
+
test = 23
|
126
|
+
CODE
|
127
|
+
result.should == 23
|
128
|
+
@env['test'].should == 23
|
129
|
+
end
|
130
|
+
|
131
|
+
end
|
132
|
+
|
133
|
+
end
|