opal 0.3.29 → 0.3.30
Sign up to get free protection for your applications and to get access to all the features.
- data/core/date.rb +34 -0
- data/core/hash.rb +98 -157
- data/core/json.rb +1 -2
- data/core/kernel.rb +157 -1
- data/core/load_order +2 -1
- data/core/proc.rb +3 -1
- data/core/string.rb +6 -7
- data/core/time.rb +4 -0
- data/lib/opal.rb +1 -0
- data/lib/opal/erb.rb +13 -0
- data/lib/opal/lexer.rb +9 -9
- data/lib/opal/parser.rb +22 -18
- data/lib/opal/scope.rb +1 -1
- data/lib/opal/version.rb +1 -1
- data/spec/core/date/new_spec.rb +8 -0
- data/spec/core/date/to_s_spec.rb +5 -0
- data/spec/core/date/today_spec.rb +5 -0
- data/spec/core/kernel/format_spec.rb +122 -0
- data/spec/core/kernel/method_spec.rb +31 -0
- data/spec/core/kernel/printf_spec.rb +9 -0
- data/spec/core/kernel/sprintf_spec.rb +5 -0
- data/spec/core/string/format_spec.rb +9 -0
- data/spec/grammar/begin_spec.rb +4 -0
- data/spec/grammar/call_spec.rb +22 -1
- data/spec/parser/erb_spec.rb +32 -0
- data/spec/parser/simple_spec.rb +4 -1
- data/spec/spec_helper.rb +4 -0
- metadata +23 -3
@@ -0,0 +1,122 @@
|
|
1
|
+
describe "Kernel#format" do
|
2
|
+
it "should prepend '+' or '-' for numbers when flag '+' is specified" do
|
3
|
+
format("%+d", 1).should == "+1"
|
4
|
+
format("%+x", -1).should == "-1"
|
5
|
+
end
|
6
|
+
|
7
|
+
it "should prepend ' ' or '-' for numbers when flag ' ' is specified" do
|
8
|
+
format("% d", 1).should == " 1"
|
9
|
+
format("% x", 1).should == " 1"
|
10
|
+
format("% x", -1).should == "-1"
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should align left when flag '-' is specified" do
|
14
|
+
format("%-5d", 123).should == "123 "
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should prepend '0's when flag '0' is specified" do
|
18
|
+
format("%010d", 10).should == "0000000010"
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should output at least specified number of characters when width is specified" do
|
22
|
+
format("%5d", 123).should == " 123"
|
23
|
+
format("%+5d", 11).should == " +11"
|
24
|
+
format("%+-5d", 11).should == "+11 "
|
25
|
+
format("%+05d", 11).should == "+0011"
|
26
|
+
|
27
|
+
format("%0*x", 5, 10).should == "0000a"
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "with precision" do
|
31
|
+
it "should output specified number of digits for integers" do
|
32
|
+
format("%10.5d", 1).should == " 00001"
|
33
|
+
format("%+10.5x", 1).should == " +00001"
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should output specified number of significant digits for floats" do
|
37
|
+
format("%10.5f", 1).should == " 1.00000"
|
38
|
+
format("%10.5f", 10).should == " 10.00000"
|
39
|
+
|
40
|
+
(format("%10.5e", 1) =~ /^1\.00000e\+0*0$/).should_not == nil
|
41
|
+
(format("%10.5e", 10) =~ /^1\.00000e\+0*1$/).should_not == nil
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should output at most specified number of characters for strings" do
|
45
|
+
format("%10.2s", "foo").should == " fo"
|
46
|
+
|
47
|
+
format("%5.5s", "foo").should == " foo"
|
48
|
+
format("%5.5s", "foobar").should == "fooba"
|
49
|
+
|
50
|
+
format("%.5s", "foobar").should == "fooba"
|
51
|
+
format("%.*s", 5, "foobar").should == "fooba"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should format a character with specifier 'c'" do
|
56
|
+
format("%c", 97).should == "a"
|
57
|
+
format("%c", 'a').should == "a"
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should format a string with specifier 's'" do
|
61
|
+
format("%s", "foo").should == "foo"
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should format an object with specifier 'p'" do
|
65
|
+
format("%p", "foo").should == "\"foo\""
|
66
|
+
end
|
67
|
+
|
68
|
+
it "should format an integer with specifier 'd' or 'i'" do
|
69
|
+
format("%d", -1).should == "-1"
|
70
|
+
format("%d", 3.1).should == "3"
|
71
|
+
end
|
72
|
+
|
73
|
+
it "should format an integer with specifier 'u'" do
|
74
|
+
format("%u", -1).should == "-1"
|
75
|
+
end
|
76
|
+
|
77
|
+
it "should format an integer with specifier 'b', 'B', 'o', 'x' or 'X'" do
|
78
|
+
format("%b", 10).should == "1010"
|
79
|
+
format("%B", 10).should == "1010"
|
80
|
+
format("%o", 10).should == "12"
|
81
|
+
format("%x", 10).should == "a"
|
82
|
+
format("%X", 10).should == "A"
|
83
|
+
|
84
|
+
format("%x", -1).should == "-1" # incompatible
|
85
|
+
end
|
86
|
+
|
87
|
+
it "should format a floating number with specifier 'f', 'e', 'E', 'g' or 'G'" do
|
88
|
+
format("%f", 1.0).should == "1.000000"
|
89
|
+
(format("%e", 1.0) =~ /^1\.000000e\+0*0$/).should_not == nil
|
90
|
+
format("%g", 1.0).should == "1.00000" # incompatible
|
91
|
+
|
92
|
+
format("%f", 10.1).should == "10.100000"
|
93
|
+
(format("%E", 10.1) =~ /^1\.010000E\+0*1$/).should_not == nil
|
94
|
+
format("%g", 10.1).should == "10.1000" # incompatible
|
95
|
+
|
96
|
+
(format("%g", 1000000) =~ /^1.00000e\+0*6$/).should_not == nil
|
97
|
+
(format("%G", 0.0000001) =~ /^1.00000E-0*7$/).should_not == nil
|
98
|
+
end
|
99
|
+
|
100
|
+
it "should format special floating number special values" do
|
101
|
+
format("%f", 1.0/0).should == "Infinity"
|
102
|
+
format("%f", -1.0/0).should == "-Infinity"
|
103
|
+
format("%f", 0.0/0).should == "NaN"
|
104
|
+
|
105
|
+
format("%E", 1.0/0).should == "INFINITY"
|
106
|
+
format("%E", -1.0/0).should == "-INFINITY"
|
107
|
+
format("%E", 0.0/0).should == "NAN"
|
108
|
+
end
|
109
|
+
|
110
|
+
it "should take specified index of argument if '$' is specified" do
|
111
|
+
format("%d, %x, %o", 1, 2, 3).should == "1, 2, 3"
|
112
|
+
format("%3$d, %2$x, %1$o", 1, 2, 3).should == "3, 2, 1"
|
113
|
+
|
114
|
+
format("%1$d, %1$x, %1$o", 10).should == "10, a, 12"
|
115
|
+
|
116
|
+
format("%1$*2$.*3$f", 1, 5, 2).should == " 1.00"
|
117
|
+
end
|
118
|
+
|
119
|
+
it "can output % by escaping it" do
|
120
|
+
format("%%").should == "%"
|
121
|
+
end
|
122
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module KernelSpecs
|
2
|
+
class Foo
|
3
|
+
def bar
|
4
|
+
'done'
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.baz
|
8
|
+
'class done'
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "Kernel#method" do
|
14
|
+
it "returns a method object for a valid method" do
|
15
|
+
m = KernelSpecs::Foo.new.method(:bar)
|
16
|
+
m.should be_kind_of(Method)
|
17
|
+
m.call.should == 'done'
|
18
|
+
end
|
19
|
+
|
20
|
+
it "returns a method object for a valid singleton method" do
|
21
|
+
m = KernelSpecs::Foo.method(:baz)
|
22
|
+
m.should be_kind_of Method
|
23
|
+
m.call.should == 'class done'
|
24
|
+
end
|
25
|
+
|
26
|
+
it "raises a NameError for an invalid method name" do
|
27
|
+
lambda {
|
28
|
+
KernelSpecs::Foo.new.method(:invalid_and_silly_method_name)
|
29
|
+
}.should raise_error(NameError)
|
30
|
+
end
|
31
|
+
end
|
data/spec/grammar/begin_spec.rb
CHANGED
@@ -28,6 +28,10 @@ describe "The begin keyword" do
|
|
28
28
|
opal_parse('begin 1; rescue => @a; 2; end').should == [:rescue, [:lit, 1], [:resbody, [:array, [:iasgn, :@a, [:gvar, :$!]]], [:lit, 2]]]
|
29
29
|
opal_parse('begin 1; rescue Klass => @a; 2; end').should == [:rescue, [:lit, 1], [:resbody, [:array, [:const, :Klass],[:iasgn, :@a, [:gvar, :$!]]], [:lit, 2]]]
|
30
30
|
end
|
31
|
+
|
32
|
+
it "should parse newline right after rescue" do
|
33
|
+
opal_parse("begin; 1; rescue\n 2; end").should == [:rescue, [:lit, 1], [:resbody, [:array], [:lit, 2]]]
|
34
|
+
end
|
31
35
|
end
|
32
36
|
|
33
37
|
describe "with an 'ensure' block" do
|
data/spec/grammar/call_spec.rb
CHANGED
@@ -80,4 +80,25 @@ describe "Optional paren calls" do
|
|
80
80
|
opal_parse("x (1).y").should == [:call, nil, :x, [:arglist, [:call, [:lit, 1], :y, [:arglist]]]]
|
81
81
|
opal_parse("x(1).y").should == [:call, [:call, nil, :x, [:arglist, [:lit, 1]]], :y, [:arglist]]
|
82
82
|
end
|
83
|
-
end
|
83
|
+
end
|
84
|
+
|
85
|
+
describe "Operator precedence" do
|
86
|
+
it "should be raised with parentheses" do
|
87
|
+
opal_parse("(1 + 2) + (3 - 4)").should == [:operator, :+,
|
88
|
+
[:operator, :+, [:lit, 1], [:lit, 2]],
|
89
|
+
[:operator, :-, [:lit, 3], [:lit, 4]],
|
90
|
+
]
|
91
|
+
opal_parse("(1 + 2) - (3 - 4)").should == [:operator, :-,
|
92
|
+
[:operator, :+, [:lit, 1], [:lit, 2]],
|
93
|
+
[:operator, :-, [:lit, 3], [:lit, 4]],
|
94
|
+
]
|
95
|
+
opal_parse("(1 + 2) * (3 - 4)").should == [:operator, :*,
|
96
|
+
[:operator, :+, [:lit, 1], [:lit, 2]],
|
97
|
+
[:operator, :-, [:lit, 3], [:lit, 4]],
|
98
|
+
]
|
99
|
+
opal_parse("(1 + 2) / (3 - 4)").should == [:operator, :/,
|
100
|
+
[:operator, :+, [:lit, 1], [:lit, 2]],
|
101
|
+
[:operator, :-, [:lit, 3], [:lit, 4]],
|
102
|
+
]
|
103
|
+
end
|
104
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
describe "Opal.parse_erb" do
|
2
|
+
before do
|
3
|
+
@simple = opal_eval_compiled(Opal.parse_erb("<div><%= @some_data %></div>", "simple_test"))
|
4
|
+
@quoted = opal_eval_compiled(Opal.parse_erb('<div class="foo">hello <%= "there " + @name %></div>', "quoted_test"))
|
5
|
+
end
|
6
|
+
|
7
|
+
it "should be an instance of Template" do
|
8
|
+
@simple.should be_kind_of(Template)
|
9
|
+
end
|
10
|
+
|
11
|
+
it "calling the block with a context should render the block" do
|
12
|
+
@some_data = "hello"
|
13
|
+
@simple.render(self).should == "<div>hello</div>"
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should accept quotes in strings" do
|
17
|
+
@name = "adam"
|
18
|
+
@quoted.render(self).should == "<div class=\"foo\">hello there adam</div>"
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'stores created templates in Template[] by name' do
|
22
|
+
Template['simple_test'].should == @simple
|
23
|
+
Template['quoted_test'].should == @quoted
|
24
|
+
end
|
25
|
+
|
26
|
+
describe '.parse' do
|
27
|
+
it 'parses erb content by running it through compiler' do
|
28
|
+
opal_eval_compiled Opal.parse_erb("hi there", 'test_parse')
|
29
|
+
Template['test_parse'].should be_kind_of(Template)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/spec/parser/simple_spec.rb
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
describe "Opal::Parser" do
|
2
2
|
it "should parse simple ruby values" do
|
3
3
|
opal_eval('3.142').should == 3.142
|
4
|
+
opal_eval('123e1').should == 1230.0
|
5
|
+
opal_eval('123E+10').should == 1230000000000.0
|
6
|
+
opal_eval('123e-9').should == 0.000000123
|
4
7
|
opal_eval('false').should == false
|
5
8
|
opal_eval('true').should == true
|
6
9
|
opal_eval('nil').should == nil
|
@@ -41,4 +44,4 @@ describe "Opal::Parser" do
|
|
41
44
|
ParserClassDefinition.bar.should == 42
|
42
45
|
ParserClassDefinition.new.foo.should == 500
|
43
46
|
end
|
44
|
-
end
|
47
|
+
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: opal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.30
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-12-02 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: Ruby runtime and core library for javascript.
|
15
15
|
email: adam.beynon@gmail.com
|
@@ -31,6 +31,7 @@ files:
|
|
31
31
|
- core/boolean.rb
|
32
32
|
- core/class.rb
|
33
33
|
- core/comparable.rb
|
34
|
+
- core/date.rb
|
34
35
|
- core/enumerable.rb
|
35
36
|
- core/error.rb
|
36
37
|
- core/hash.rb
|
@@ -52,6 +53,7 @@ files:
|
|
52
53
|
- core/time.rb
|
53
54
|
- lib/opal.rb
|
54
55
|
- lib/opal/builder.rb
|
56
|
+
- lib/opal/erb.rb
|
55
57
|
- lib/opal/grammar.rb
|
56
58
|
- lib/opal/grammar.y
|
57
59
|
- lib/opal/lexer.rb
|
@@ -133,6 +135,9 @@ files:
|
|
133
135
|
- spec/core/class/instance_methods_spec.rb
|
134
136
|
- spec/core/class/last_value_spec.rb
|
135
137
|
- spec/core/class/new_spec.rb
|
138
|
+
- spec/core/date/new_spec.rb
|
139
|
+
- spec/core/date/to_s_spec.rb
|
140
|
+
- spec/core/date/today_spec.rb
|
136
141
|
- spec/core/enumerable/all_spec.rb
|
137
142
|
- spec/core/enumerable/any_spec.rb
|
138
143
|
- spec/core/enumerable/collect_spec.rb
|
@@ -207,18 +212,22 @@ files:
|
|
207
212
|
- spec/core/kernel/equal_spec.rb
|
208
213
|
- spec/core/kernel/equal_value_spec.rb
|
209
214
|
- spec/core/kernel/extend_spec.rb
|
215
|
+
- spec/core/kernel/format_spec.rb
|
210
216
|
- spec/core/kernel/instance_eval_spec.rb
|
211
217
|
- spec/core/kernel/instance_variable_get_spec.rb
|
212
218
|
- spec/core/kernel/instance_variable_set_spec.rb
|
213
219
|
- spec/core/kernel/loop_spec.rb
|
214
220
|
- spec/core/kernel/match_spec.rb
|
221
|
+
- spec/core/kernel/method_spec.rb
|
215
222
|
- spec/core/kernel/methods_spec.rb
|
216
223
|
- spec/core/kernel/nil_spec.rb
|
217
224
|
- spec/core/kernel/p_spec.rb
|
225
|
+
- spec/core/kernel/printf_spec.rb
|
218
226
|
- spec/core/kernel/proc_spec.rb
|
219
227
|
- spec/core/kernel/rand_spec.rb
|
220
228
|
- spec/core/kernel/respond_to_spec.rb
|
221
229
|
- spec/core/kernel/send_spec.rb
|
230
|
+
- spec/core/kernel/sprintf_spec.rb
|
222
231
|
- spec/core/kernel/tap_spec.rb
|
223
232
|
- spec/core/kernel/to_json_spec.rb
|
224
233
|
- spec/core/kernel/to_s_spec.rb
|
@@ -298,6 +307,7 @@ files:
|
|
298
307
|
- spec/core/string/element_reference_spec.rb
|
299
308
|
- spec/core/string/empty_spec.rb
|
300
309
|
- spec/core/string/end_with_spec.rb
|
310
|
+
- spec/core/string/format_spec.rb
|
301
311
|
- spec/core/string/gsub_spec.rb
|
302
312
|
- spec/core/string/include_spec.rb
|
303
313
|
- spec/core/string/intern_spec.rb
|
@@ -412,6 +422,7 @@ files:
|
|
412
422
|
- spec/language/variables_spec.rb
|
413
423
|
- spec/language/while_spec.rb
|
414
424
|
- spec/language/yield_spec.rb
|
425
|
+
- spec/parser/erb_spec.rb
|
415
426
|
- spec/parser/simple_spec.rb
|
416
427
|
- spec/spec_helper.rb
|
417
428
|
- spec/test_case.html
|
@@ -435,7 +446,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
435
446
|
version: '0'
|
436
447
|
requirements: []
|
437
448
|
rubyforge_project:
|
438
|
-
rubygems_version: 1.8.
|
449
|
+
rubygems_version: 1.8.24
|
439
450
|
signing_key:
|
440
451
|
specification_version: 3
|
441
452
|
summary: Ruby runtime and core library for javascript
|
@@ -513,6 +524,9 @@ test_files:
|
|
513
524
|
- spec/core/class/instance_methods_spec.rb
|
514
525
|
- spec/core/class/last_value_spec.rb
|
515
526
|
- spec/core/class/new_spec.rb
|
527
|
+
- spec/core/date/new_spec.rb
|
528
|
+
- spec/core/date/to_s_spec.rb
|
529
|
+
- spec/core/date/today_spec.rb
|
516
530
|
- spec/core/enumerable/all_spec.rb
|
517
531
|
- spec/core/enumerable/any_spec.rb
|
518
532
|
- spec/core/enumerable/collect_spec.rb
|
@@ -587,18 +601,22 @@ test_files:
|
|
587
601
|
- spec/core/kernel/equal_spec.rb
|
588
602
|
- spec/core/kernel/equal_value_spec.rb
|
589
603
|
- spec/core/kernel/extend_spec.rb
|
604
|
+
- spec/core/kernel/format_spec.rb
|
590
605
|
- spec/core/kernel/instance_eval_spec.rb
|
591
606
|
- spec/core/kernel/instance_variable_get_spec.rb
|
592
607
|
- spec/core/kernel/instance_variable_set_spec.rb
|
593
608
|
- spec/core/kernel/loop_spec.rb
|
594
609
|
- spec/core/kernel/match_spec.rb
|
610
|
+
- spec/core/kernel/method_spec.rb
|
595
611
|
- spec/core/kernel/methods_spec.rb
|
596
612
|
- spec/core/kernel/nil_spec.rb
|
597
613
|
- spec/core/kernel/p_spec.rb
|
614
|
+
- spec/core/kernel/printf_spec.rb
|
598
615
|
- spec/core/kernel/proc_spec.rb
|
599
616
|
- spec/core/kernel/rand_spec.rb
|
600
617
|
- spec/core/kernel/respond_to_spec.rb
|
601
618
|
- spec/core/kernel/send_spec.rb
|
619
|
+
- spec/core/kernel/sprintf_spec.rb
|
602
620
|
- spec/core/kernel/tap_spec.rb
|
603
621
|
- spec/core/kernel/to_json_spec.rb
|
604
622
|
- spec/core/kernel/to_s_spec.rb
|
@@ -678,6 +696,7 @@ test_files:
|
|
678
696
|
- spec/core/string/element_reference_spec.rb
|
679
697
|
- spec/core/string/empty_spec.rb
|
680
698
|
- spec/core/string/end_with_spec.rb
|
699
|
+
- spec/core/string/format_spec.rb
|
681
700
|
- spec/core/string/gsub_spec.rb
|
682
701
|
- spec/core/string/include_spec.rb
|
683
702
|
- spec/core/string/intern_spec.rb
|
@@ -792,6 +811,7 @@ test_files:
|
|
792
811
|
- spec/language/variables_spec.rb
|
793
812
|
- spec/language/while_spec.rb
|
794
813
|
- spec/language/yield_spec.rb
|
814
|
+
- spec/parser/erb_spec.rb
|
795
815
|
- spec/parser/simple_spec.rb
|
796
816
|
- spec/spec_helper.rb
|
797
817
|
- spec/test_case.html
|