opal 0.5.2 → 0.5.4
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.
- checksums.yaml +4 -4
- data/README.md +2 -0
- data/lib/opal.rb +0 -5
- data/lib/opal/compiler.rb +24 -44
- data/lib/opal/nodes/base.rb +5 -8
- data/lib/opal/nodes/call.rb +4 -0
- data/lib/opal/nodes/class.rb +6 -7
- data/lib/opal/nodes/def.rb +4 -4
- data/lib/opal/nodes/definitions.rb +0 -14
- data/lib/opal/nodes/iter.rb +51 -38
- data/lib/opal/nodes/literal.rb +21 -24
- data/lib/opal/nodes/module.rb +4 -4
- data/lib/opal/nodes/runtime_helpers.rb +45 -0
- data/lib/opal/nodes/scope.rb +280 -0
- data/lib/opal/nodes/singleton_class.rb +4 -5
- data/lib/opal/nodes/super.rb +1 -1
- data/lib/opal/nodes/top.rb +9 -7
- data/lib/opal/nodes/yield.rb +14 -3
- data/lib/opal/parser.rb +4 -18
- data/lib/opal/parser/grammar.rb +3745 -3667
- data/lib/opal/parser/grammar.y +1692 -1778
- data/lib/opal/parser/keywords.rb +35 -35
- data/lib/opal/parser/lexer.rb +356 -325
- data/lib/opal/parser/sexp.rb +1 -1
- data/lib/opal/version.rb +1 -1
- data/opal.gemspec +1 -0
- data/opal/core/array.rb +320 -81
- data/opal/core/enumerable.rb +46 -5
- data/opal/core/hash.rb +6 -64
- data/opal/core/helpers.rb +67 -0
- data/opal/core/method.rb +1 -1
- data/opal/core/module.rb +4 -4
- data/opal/core/range.rb +1 -12
- data/opal/core/regexp.rb +2 -8
- data/opal/core/runtime.js +74 -3
- data/opal/core/string.rb +99 -74
- data/opal/opal.rb +3 -72
- data/spec/filters/bugs/array.rb +2 -30
- data/spec/filters/bugs/basic_object.rb +0 -1
- data/spec/filters/bugs/string.rb +26 -21
- data/spec/filters/unsupported/enumerator.rb +3 -0
- data/spec/filters/unsupported/float.rb +1 -0
- data/spec/filters/unsupported/immutable_strings.rb +15 -0
- data/spec/filters/unsupported/tainted.rb +58 -30
- data/spec/filters/unsupported/trusted.rb +35 -15
- data/spec/opal/parser/class_spec.rb +4 -4
- data/spec/opal/parser/def_spec.rb +4 -4
- data/spec/opal/parser/lvar_spec.rb +6 -6
- data/spec/opal/parser/module_spec.rb +4 -4
- data/spec/opal/parser/sclass_spec.rb +2 -2
- data/spec/stdlib/native/exposure_spec.rb +33 -0
- data/stdlib/buffer.rb +1 -1
- data/stdlib/buffer/view.rb +1 -1
- data/stdlib/native.rb +193 -174
- data/stdlib/opal-parser.rb +0 -6
- data/stdlib/pp.rb +9 -0
- data/tasks/mspec.rake +3 -1
- metadata +9 -9
- data/lib/opal/nodes/base_scope.rb +0 -11
- data/lib/opal/target_scope.rb +0 -281
- data/spec/filters/20.rb +0 -4
- data/spec/filters/unsupported/array_subclasses.rb +0 -37
data/spec/filters/bugs/string.rb
CHANGED
@@ -1,37 +1,42 @@
|
|
1
1
|
opal_filter "String" do
|
2
|
+
fails "String#capitalize is locale insensitive (only upcases a-z and only downcases A-Z)"
|
3
|
+
|
4
|
+
fails "String#center with length, padding raises an ArgumentError if padstr is empty"
|
5
|
+
fails "String#center with length, padding raises a TypeError when padstr can't be converted to a string"
|
6
|
+
fails "String#center with length, padding calls #to_str to convert padstr to a String"
|
7
|
+
fails "String#center with length, padding raises a TypeError when length can't be converted to an integer"
|
8
|
+
fails "String#center with length, padding calls #to_int to convert length to an integer"
|
2
9
|
fails "String#center with length, padding pads with whitespace if no padstr is given"
|
3
10
|
fails "String#center with length, padding returns a new string of specified length with self centered and padded with padstr"
|
4
11
|
|
5
|
-
fails "String#
|
12
|
+
fails "String#downcase is locale insensitive (only replaces A-Z)"
|
6
13
|
|
7
|
-
fails "String#
|
8
|
-
fails "String#
|
9
|
-
fails "String#length returns the length of self"
|
14
|
+
fails "String#end_with? converts its argument using :to_str"
|
15
|
+
fails "String#end_with? returns true if other is empty"
|
10
16
|
|
11
|
-
fails "String#index
|
17
|
+
fails "String#index raises a TypeError if passed a Symbol"
|
18
|
+
# we need regexp rewriting for these
|
12
19
|
fails "String#index with Regexp supports \\G which matches at the given start offset"
|
13
20
|
fails "String#index with Regexp starts the search at the given offset"
|
14
21
|
fails "String#index with Regexp returns the index of the first match of regexp"
|
15
|
-
fails "String#index calls #to_int to convert the second argument"
|
16
|
-
fails "String#index calls #to_str to convert the first argument"
|
17
|
-
fails "String#index raises a TypeError if passed a Symbol"
|
18
22
|
|
23
|
+
fails "String#intern does not special case certain operators"
|
19
24
|
fails "String#intern special cases +(binary) and -(binary)"
|
20
|
-
|
25
|
+
|
26
|
+
fails "String#length returns the length of self"
|
27
|
+
|
28
|
+
fails "String#lines should split on the default record separator and return enumerator if not block is given"
|
29
|
+
|
30
|
+
fails "String#size returns the length of self"
|
21
31
|
|
22
32
|
fails "String#start_with? ignores arguments not convertible to string"
|
23
33
|
fails "String#start_with? converts its argument using :to_str"
|
24
|
-
|
25
|
-
fails "String#end_with? returns true if other is empty"
|
26
|
-
fails "String#downcase is locale insensitive (only replaces A-Z)"
|
27
|
-
fails "String#intern does not special case certain operators"
|
34
|
+
|
28
35
|
fails "String#to_sym does not special case certain operators"
|
29
|
-
fails "String#
|
30
|
-
|
31
|
-
fails "String#
|
32
|
-
|
33
|
-
|
34
|
-
fails "String#
|
35
|
-
fails "String#chomp when passed an Object raises a TypeError if #to_str does not return a String"
|
36
|
-
fails "String#chomp when passed no argument returns a copy of the String when it is not modified"
|
36
|
+
fails "String#to_sym special cases +(binary) and -(binary)"
|
37
|
+
|
38
|
+
fails "String#upcase is locale insensitive (only replaces a-z)"
|
39
|
+
|
40
|
+
# 1.9.3 => 2.0
|
41
|
+
fails "String#end_with? ignores arguments not convertible to string"
|
37
42
|
end
|
@@ -10,4 +10,7 @@ opal_filter "Enumerator as generator" do
|
|
10
10
|
fails "Enumerator#rewind does nothing if the object doesn't have a #rewind method"
|
11
11
|
fails "Enumerator#rewind works with peek to reset the position"
|
12
12
|
fails "Enumerator#rewind calls the enclosed object's rewind method if one exists"
|
13
|
+
|
14
|
+
# 1.9.3 => 2.0
|
15
|
+
fails "Enumerator.new ignores block if arg given"
|
13
16
|
end
|
@@ -6,4 +6,19 @@ opal_filter "immutable strings" do
|
|
6
6
|
fails "Time#strftime formats time according to the directives in the given format string"
|
7
7
|
fails "Time#strftime with %z formats a local time with positive UTC offset as '+HHMM'"
|
8
8
|
fails "Time#strftime with %z formats a local time with negative UTC offset as '-HHMM'"
|
9
|
+
|
10
|
+
fails "String#chomp when passed no argument returns a copy of the String when it is not modified"
|
11
|
+
|
12
|
+
fails "String#chop returns a new string when applied to an empty string"
|
13
|
+
|
14
|
+
fails "String#chop! removes the final character"
|
15
|
+
fails "String#chop! removes the final carriage return"
|
16
|
+
fails "String#chop! removes the final newline"
|
17
|
+
fails "String#chop! removes the final carriage return, newline"
|
18
|
+
fails "String#chop! removes the carrige return, newline if they are the only characters"
|
19
|
+
fails "String#chop! does not remove more than the final carriage return, newline"
|
20
|
+
fails "String#chop! returns self if modifications were made"
|
21
|
+
fails "String#chop! returns nil when called on an empty string"
|
22
|
+
fails "String#chop! raises a RuntimeError on a frozen instance that is modified"
|
23
|
+
fails "String#chop! raises a RuntimeError on a frozen instance that would not be modified"
|
9
24
|
end
|
@@ -1,58 +1,72 @@
|
|
1
1
|
opal_filter 'tainted' do
|
2
|
-
fails "
|
3
|
-
|
4
|
-
fails "Array
|
5
|
-
fails "Array
|
6
|
-
fails "Array
|
7
|
-
fails "Array#shift passed a number n as an argument keeps taint status"
|
8
|
-
fails "Array#shift passed a number n as an argument returns an untainted array even if the array is tainted"
|
9
|
-
fails "Array#pop passed a number n as an argument keeps taint status"
|
10
|
-
fails "Array#pop passed a number n as an argument returns an untainted array even if the array is tainted"
|
11
|
-
fails "Array#pop keeps taint status"
|
12
|
-
fails "Array#+ does not get infected even if an original array is tainted"
|
2
|
+
fails "Kernel#to_s returns a tainted result if self is tainted"
|
3
|
+
|
4
|
+
fails "Array#* with a string with a tainted separator taints the result if the array has two or more elements"
|
5
|
+
fails "Array#* with a string with a tainted separator does not taint the result if the array has only one element"
|
6
|
+
fails "Array#* with a string with a tainted separator does not taint the result if the array is empty"
|
13
7
|
fails "Array#* with an integer copies the taint status of the original array if the passed count is not 0"
|
14
8
|
fails "Array#* with an integer copies the taint status of the original array even if the array is empty"
|
15
9
|
fails "Array#* with an integer copies the taint status of the original array even if the passed count is 0"
|
16
|
-
|
17
|
-
fails "Array
|
18
|
-
|
10
|
+
|
11
|
+
fails "Array#+ does not get infected even if an original array is tainted"
|
12
|
+
|
13
|
+
fails "Array#clear keeps tainted status"
|
14
|
+
|
19
15
|
fails "Array#clone copies taint status from the original"
|
20
|
-
|
16
|
+
|
21
17
|
fails "Array#collect does not copy tainted status"
|
18
|
+
|
19
|
+
fails "Array#collect! keeps tainted status"
|
20
|
+
|
21
|
+
fails "Array#compact does not keep tainted status even if all elements are removed"
|
22
|
+
|
23
|
+
fails "Array#compact! keeps tainted status even if all elements are removed"
|
24
|
+
|
22
25
|
fails "Array#concat keeps tainted status"
|
23
26
|
fails "Array#concat keeps the tainted status of elements"
|
27
|
+
|
28
|
+
fails "Array#delete keeps tainted status"
|
29
|
+
|
30
|
+
fails "Array#delete_at keeps tainted status"
|
31
|
+
|
32
|
+
fails "Array#delete_if keeps tainted status"
|
33
|
+
|
24
34
|
fails "Array#dup copies taint status from the original"
|
35
|
+
|
25
36
|
fails "Array#inspect taints the result if an element is tainted"
|
26
37
|
fails "Array#inspect does not taint the result if the Array is tainted but empty"
|
27
38
|
fails "Array#inspect taints the result if the Array is non-empty and tainted"
|
28
|
-
|
29
|
-
fails "Array#to_s does not taint the result if the Array is tainted but empty"
|
30
|
-
fails "Array#to_s taints the result if the Array is non-empty and tainted"
|
39
|
+
|
31
40
|
fails "Array#join with a tainted separator taints the result if the array has two or more elements"
|
32
41
|
fails "Array#join with a tainted separator does not taint the result if the array has only one element"
|
33
42
|
fails "Array#join with a tainted separator does not taint the result if the array is empty"
|
34
43
|
fails "Array#join taints the result if the result of coercing an element is tainted"
|
35
44
|
fails "Array#join does not taint the result if the Array is tainted but empty"
|
36
45
|
fails "Array#join taints the result if the Array is tainted and non-empty"
|
37
|
-
fails "Array#* with a string with a tainted separator taints the result if the array has two or more elements"
|
38
|
-
fails "Array#* with a string with a tainted separator does not taint the result if the array has only one element"
|
39
|
-
fails "Array#* with a string with a tainted separator does not taint the result if the array is empty"
|
40
46
|
|
41
|
-
fails "
|
47
|
+
fails "Array#pop passed a number n as an argument keeps taint status"
|
48
|
+
fails "Array#pop passed a number n as an argument returns an untainted array even if the array is tainted"
|
49
|
+
fails "Array#pop keeps taint status"
|
42
50
|
|
43
|
-
fails "
|
51
|
+
fails "Array#map! keeps tainted status"
|
52
|
+
fails "Array#map does not copy tainted status"
|
44
53
|
|
45
|
-
fails "
|
46
|
-
fails "
|
47
|
-
|
48
|
-
fails "
|
49
|
-
fails "
|
54
|
+
fails "Array#shift passed a number n as an argument keeps taint status"
|
55
|
+
fails "Array#shift passed a number n as an argument returns an untainted array even if the array is tainted"
|
56
|
+
|
57
|
+
fails "Array#to_s taints the result if an element is tainted"
|
58
|
+
fails "Array#to_s does not taint the result if the Array is tainted but empty"
|
59
|
+
fails "Array#to_s taints the result if the Array is non-empty and tainted"
|
60
|
+
|
61
|
+
fails "Hash#reject taints the resulting hash"
|
50
62
|
|
51
|
-
fails "Pathname.new is tainted if path is tainted"
|
52
|
-
fails "String#downcase taints result when self is tainted"
|
53
63
|
fails "String#capitalize taints resulting string when self is tainted"
|
64
|
+
|
65
|
+
fails "String#downcase taints result when self is tainted"
|
66
|
+
|
54
67
|
fails "String#center with length, padding when padding is tainted and self is untainted returns a tainted string if and only if length is longer than self"
|
55
68
|
fails "String#center with length, padding taints result when self or padstr is tainted"
|
69
|
+
|
56
70
|
fails "String#chomp when passed a String does not taint the result when the argument is tainted"
|
57
71
|
fails "String#chomp when passed a String taints the result if self is tainted"
|
58
72
|
fails "String#chomp when passed '\\n' taints the result if self is tainted"
|
@@ -60,4 +74,18 @@ opal_filter 'tainted' do
|
|
60
74
|
fails "String#chomp when passed nil taints the result if self is tainted"
|
61
75
|
fails "String#chomp when passed nil returns a copy of the String"
|
62
76
|
fails "String#chomp when passed no argument taints the result if self is tainted"
|
77
|
+
|
78
|
+
fails "String#chop taints result when self is tainted"
|
79
|
+
|
80
|
+
fails "String#reverse taints the result if self is tainted"
|
81
|
+
|
82
|
+
fails "String#swapcase taints resulting string when self is tainted"
|
83
|
+
|
84
|
+
fails "String#to_s taints the result when self is tainted"
|
85
|
+
|
86
|
+
fails "String#to_str taints the result when self is tainted"
|
87
|
+
|
88
|
+
fails "String#upcase taints result when self is tainted"
|
89
|
+
|
90
|
+
fails "Pathname.new is tainted if path is tainted"
|
63
91
|
end
|
@@ -1,41 +1,61 @@
|
|
1
1
|
opal_filter "Object#trusted/untrusted" do
|
2
|
-
fails "
|
3
|
-
|
4
|
-
fails "Array#pop keeps untrusted status"
|
2
|
+
fails "Kernel#to_s returns an untrusted result if self is untrusted"
|
3
|
+
|
5
4
|
fails "Array#+ does not infected even if an original array is untrusted"
|
5
|
+
|
6
6
|
fails "Array#* with an integer copies the untrusted status of the original array if the passed count is not 0"
|
7
7
|
fails "Array#* with an integer copies the untrusted status of the original array even if the array is empty"
|
8
8
|
fails "Array#* with an integer copies the untrusted status of the original array even if the passed count is 0"
|
9
|
+
fails "Array#* with a string with an untrusted separator untrusts the result if the array has two or more elements"
|
10
|
+
fails "Array#* with a string with an untrusted separator does not untrust the result if the array has only one element"
|
11
|
+
fails "Array#* with a string with an untrusted separator does not untrust the result if the array is empty"
|
12
|
+
|
9
13
|
fails "Array#delete keeps untrusted status"
|
14
|
+
|
10
15
|
fails "Array#delete_if keeps untrusted status"
|
16
|
+
|
11
17
|
fails "Array#delete_at keeps untrusted status"
|
12
|
-
|
13
|
-
fails "Array#compact does not keep untrusted status even if all elements are removed"
|
18
|
+
|
14
19
|
fails "Array#clear keeps untrusted status"
|
15
|
-
|
20
|
+
|
16
21
|
fails "Array#clone copies untrusted status from the original"
|
17
|
-
|
22
|
+
|
18
23
|
fails "Array#collect does not copy untrusted status"
|
24
|
+
|
25
|
+
fails "Array#compact does not keep untrusted status even if all elements are removed"
|
26
|
+
|
27
|
+
fails "Array#compact! keeps untrusted status even if all elements are removed"
|
28
|
+
|
29
|
+
fails "Array#collect! keeps untrusted status"
|
30
|
+
|
19
31
|
fails "Array#concat keeps untrusted status"
|
20
32
|
fails "Array#concat is not infected untrustedness by the other"
|
21
33
|
fails "Array#concat keeps the untrusted status of elements"
|
34
|
+
|
22
35
|
fails "Array#dup copies untrusted status from the original"
|
23
|
-
|
36
|
+
|
24
37
|
fails "Array#inspect untrusts the result if an element is untrusted"
|
25
38
|
fails "Array#inspect does not untrust the result if the Array is untrusted but empty"
|
26
39
|
fails "Array#inspect untrusts the result if the Array is untrusted"
|
27
|
-
|
28
|
-
fails "Array#to_s does not untrust the result if the Array is untrusted but empty"
|
29
|
-
fails "Array#to_s untrusts the result if the Array is untrusted"
|
40
|
+
|
30
41
|
fails "Array#join with an untrusted separator untrusts the result if the array has two or more elements"
|
31
42
|
fails "Array#join with an untrusted separator does not untrust the result if the array has only one element"
|
32
43
|
fails "Array#join with an untrusted separator does not untrust the result if the array is empty"
|
33
44
|
fails "Array#join untrusts the result if the result of coercing an element is untrusted"
|
34
45
|
fails "Array#join does not untrust the result if the Array is untrusted but empty"
|
35
46
|
fails "Array#join untrusts the result if the Array is untrusted and non-empty"
|
36
|
-
fails "Array#* with a string with an untrusted separator untrusts the result if the array has two or more elements"
|
37
|
-
fails "Array#* with a string with an untrusted separator does not untrust the result if the array has only one element"
|
38
|
-
fails "Array#* with a string with an untrusted separator does not untrust the result if the array is empty"
|
39
47
|
|
40
|
-
fails "
|
48
|
+
fails "Array#map does not copy untrusted status"
|
49
|
+
|
50
|
+
fails "Array#pop passed a number n as an argument keeps untrusted status"
|
51
|
+
fails "Array#pop passed a number n as an argument returns a trusted array even if the array is untrusted"
|
52
|
+
fails "Array#pop keeps untrusted status"
|
53
|
+
|
54
|
+
fails "Array#map! keeps untrusted status"
|
55
|
+
|
56
|
+
fails "Array#to_s untrusts the result if an element is untrusted"
|
57
|
+
fails "Array#to_s does not untrust the result if the Array is untrusted but empty"
|
58
|
+
fails "Array#to_s untrusts the result if the Array is untrusted"
|
59
|
+
|
60
|
+
fails "String#chop untrusts result when self is untrusted"
|
41
61
|
end
|
@@ -1,16 +1,16 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe "The class keyword" do
|
4
|
-
it "returns
|
5
|
-
opal_parse('class A; end').should == [:class, :A, nil, [:
|
4
|
+
it "returns an empty s(:block) when given an empty body" do
|
5
|
+
opal_parse('class A; end').should == [:class, :A, nil, [:block]]
|
6
6
|
end
|
7
7
|
|
8
8
|
it "does not place single expressions into a s(:block)" do
|
9
|
-
opal_parse('class A; 1; end').should == [:class, :A, nil, [:
|
9
|
+
opal_parse('class A; 1; end').should == [:class, :A, nil, [:int, 1]]
|
10
10
|
end
|
11
11
|
|
12
12
|
it "adds multiple body expressions into a s(:block)" do
|
13
|
-
opal_parse('class A; 1; 2; end').should == [:class, :A, nil, [:
|
13
|
+
opal_parse('class A; 1; 2; end').should == [:class, :A, nil, [:block, [:int, 1], [:int, 2]]]
|
14
14
|
end
|
15
15
|
|
16
16
|
it "uses nil as a placeholder when no superclass is given" do
|
@@ -3,21 +3,21 @@ require 'spec_helper'
|
|
3
3
|
describe "The def keyword" do
|
4
4
|
describe "for normal definitions" do
|
5
5
|
it "should return s(:def)" do
|
6
|
-
opal_parse("def a; end").should == [:def, nil, :a, [:args], [:
|
6
|
+
opal_parse("def a; end").should == [:def, nil, :a, [:args], [:block, [:nil]]]
|
7
7
|
end
|
8
8
|
|
9
9
|
it "adds s(:nil) on an empty body" do
|
10
|
-
opal_parse("def foo; end").last.should == [:
|
10
|
+
opal_parse("def foo; end").last.should == [:block, [:nil]]
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
14
|
describe "for singleton definitions" do
|
15
15
|
it "should return s(:def)" do
|
16
|
-
opal_parse("def self.a; end").should == [:def, [:self], :a, [:args], [:
|
16
|
+
opal_parse("def self.a; end").should == [:def, [:self], :a, [:args], [:block, [:nil]]]
|
17
17
|
end
|
18
18
|
|
19
19
|
it "adds s(:nil) on an empty body" do
|
20
|
-
opal_parse("def self.foo; end").last.should == [:
|
20
|
+
opal_parse("def self.foo; end").last.should == [:block, [:nil]]
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
@@ -15,24 +15,24 @@ describe "An lvar" do
|
|
15
15
|
|
16
16
|
describe "inside a def" do
|
17
17
|
it "should created by a norm arg" do
|
18
|
-
opal_parse("def a(b); b; end").should == [:def, nil, :a, [:args, :b], [:
|
19
|
-
opal_parse("def a(b, c); c; end").should == [:def, nil, :a, [:args, :b, :c], [:
|
18
|
+
opal_parse("def a(b); b; end").should == [:def, nil, :a, [:args, :b], [:block, [:lvar, :b]]]
|
19
|
+
opal_parse("def a(b, c); c; end").should == [:def, nil, :a, [:args, :b, :c], [:block, [:lvar, :c]]]
|
20
20
|
end
|
21
21
|
|
22
22
|
it "should be created by an opt arg" do
|
23
|
-
opal_parse("def a(b=10); b; end").should == [:def, nil, :a, [:args, :b, [:block, [:lasgn, :b, [:int, 10]]]], [:
|
23
|
+
opal_parse("def a(b=10); b; end").should == [:def, nil, :a, [:args, :b, [:block, [:lasgn, :b, [:int, 10]]]], [:block, [:lvar, :b]]]
|
24
24
|
end
|
25
25
|
|
26
26
|
it "should be created by a rest arg" do
|
27
|
-
opal_parse("def a(*b); b; end").should == [:def, nil, :a, [:args, :"*b"], [:
|
27
|
+
opal_parse("def a(*b); b; end").should == [:def, nil, :a, [:args, :"*b"], [:block, [:lvar, :b]]]
|
28
28
|
end
|
29
29
|
|
30
30
|
it "should be created by a block arg" do
|
31
|
-
opal_parse("def a(&b); b; end").should == [:def, nil, :a, [:args, :"&b"], [:
|
31
|
+
opal_parse("def a(&b); b; end").should == [:def, nil, :a, [:args, :"&b"], [:block, [:lvar, :b]]]
|
32
32
|
end
|
33
33
|
|
34
34
|
it "should not be created from locals outside the def" do
|
35
|
-
opal_parse("a = 10; def b; a; end").should == [:block, [:lasgn, :a, [:int, 10]], [:def, nil, :b, [:args], [:
|
35
|
+
opal_parse("a = 10; def b; a; end").should == [:block, [:lasgn, :a, [:int, 10]], [:def, nil, :b, [:args], [:block, [:call, nil, :a, [:arglist]]]]]
|
36
36
|
end
|
37
37
|
end
|
38
38
|
end
|
@@ -1,16 +1,16 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe "The module keyword" do
|
4
|
-
it "returns
|
5
|
-
opal_parse('module A; end').should == [:module, :A, [:
|
4
|
+
it "returns an empty s(:block) when given an empty body" do
|
5
|
+
opal_parse('module A; end').should == [:module, :A, [:block]]
|
6
6
|
end
|
7
7
|
|
8
8
|
it "does not place single expressions into a s(:block)" do
|
9
|
-
opal_parse('module A; 1; end').should == [:module, :A, [:
|
9
|
+
opal_parse('module A; 1; end').should == [:module, :A, [:int, 1]]
|
10
10
|
end
|
11
11
|
|
12
12
|
it "adds multiple body expressions into a s(:block)" do
|
13
|
-
opal_parse('module A; 1; 2; end').should == [:module, :A, [:
|
13
|
+
opal_parse('module A; 1; 2; end').should == [:module, :A, [:block, [:int, 1], [:int, 2]]]
|
14
14
|
end
|
15
15
|
|
16
16
|
it "should accept just a constant for the module name" do
|
@@ -6,11 +6,11 @@ describe "Singleton classes" do
|
|
6
6
|
end
|
7
7
|
|
8
8
|
it "does not place single expressions into an s(:block)" do
|
9
|
-
opal_parse('class << A; 1; end')[2].should == [:
|
9
|
+
opal_parse('class << A; 1; end')[2].should == [:int, 1]
|
10
10
|
end
|
11
11
|
|
12
12
|
it "adds multiple body expressions into a s(:block)" do
|
13
|
-
opal_parse('class << A; 1; 2; end')[2].should == [:
|
13
|
+
opal_parse('class << A; 1; 2; end')[2].should == [:block, [:int, 1], [:int, 2]]
|
14
14
|
end
|
15
15
|
|
16
16
|
it "should accept any expressions for singleton part" do
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'native'
|
2
|
+
|
3
|
+
describe 'Native exposure' do
|
4
|
+
describe Class do
|
5
|
+
describe '#native_alias' do
|
6
|
+
it 'exposes a method to javascript' do
|
7
|
+
c = Class.new do
|
8
|
+
def ruby_method
|
9
|
+
:ruby
|
10
|
+
end
|
11
|
+
|
12
|
+
native_alias :rubyMethod, :ruby_method
|
13
|
+
end
|
14
|
+
|
15
|
+
`#{c.new}.rubyMethod()`.should == :ruby
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe '#native_class' do
|
20
|
+
it 'exposes a Class on the JS global object' do
|
21
|
+
c = Class.new do
|
22
|
+
def self.name
|
23
|
+
'Pippo'
|
24
|
+
end
|
25
|
+
|
26
|
+
native_class
|
27
|
+
end
|
28
|
+
|
29
|
+
`Pippo`.should == c
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|