opal 0.3.18 → 0.3.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.
Files changed (259) hide show
  1. data/.gitignore +1 -1
  2. data/Gemfile +1 -3
  3. data/README.md +472 -10
  4. data/Rakefile +10 -52
  5. data/core/array.rb +9 -14
  6. data/core/basic_object.rb +7 -10
  7. data/core/boolean.rb +5 -1
  8. data/core/class.rb +15 -38
  9. data/core/dir.rb +89 -0
  10. data/core/enumerable.rb +133 -57
  11. data/core/error.rb +15 -1
  12. data/core/file.rb +85 -0
  13. data/core/hash.rb +186 -32
  14. data/core/kernel.rb +30 -31
  15. data/core/load_order +4 -2
  16. data/core/module.rb +42 -62
  17. data/core/numeric.rb +7 -1
  18. data/core/object.rb +1 -1
  19. data/core/proc.rb +6 -2
  20. data/core/range.rb +16 -28
  21. data/core/regexp.rb +3 -3
  22. data/core/runtime.js +281 -350
  23. data/core/string.rb +100 -110
  24. data/docs/CNAME +1 -0
  25. data/docs/Rakefile +55 -0
  26. data/docs/css/styles.css +50 -0
  27. data/docs/css/syntax.css +63 -0
  28. data/docs/layout/post.html +3 -0
  29. data/docs/layout/pre.html +11 -0
  30. data/examples/dependencies/app.rb +3 -0
  31. data/lib/opal.rb +2 -1
  32. data/lib/opal/builder.rb +36 -10
  33. data/lib/opal/builder_task.rb +51 -24
  34. data/lib/opal/grammar.rb +2509 -2439
  35. data/lib/opal/grammar.y +38 -5
  36. data/lib/opal/lexer.rb +18 -2
  37. data/lib/opal/parser.rb +375 -349
  38. data/lib/opal/scope.rb +24 -2
  39. data/lib/opal/version.rb +1 -1
  40. data/spec/builder/build_order_spec.rb +20 -0
  41. data/spec/builder/lib_name_for_spec.rb +24 -0
  42. data/spec/grammar/call_spec.rb +9 -6
  43. data/spec/grammar/lambda_spec.rb +64 -0
  44. data/spec/grammar/sclass_spec.rb +5 -3
  45. data/{core/spec → test}/core/array/allocate_spec.rb +0 -0
  46. data/{core/spec → test}/core/array/append_spec.rb +0 -0
  47. data/{core/spec → test}/core/array/assoc_spec.rb +0 -0
  48. data/{core/spec → test}/core/array/at_spec.rb +0 -0
  49. data/{core/spec → test}/core/array/clear_spec.rb +0 -0
  50. data/{core/spec → test}/core/array/clone_spec.rb +0 -0
  51. data/{core/spec → test}/core/array/collect_spec.rb +0 -0
  52. data/{core/spec → test}/core/array/compact_spec.rb +0 -0
  53. data/{core/spec → test}/core/array/concat_spec.rb +0 -0
  54. data/{core/spec → test}/core/array/constructor_spec.rb +0 -0
  55. data/{core/spec → test}/core/array/count_spec.rb +0 -0
  56. data/{core/spec → test}/core/array/delete_at_spec.rb +0 -0
  57. data/{core/spec → test}/core/array/delete_if_spec.rb +0 -0
  58. data/{core/spec → test}/core/array/delete_spec.rb +0 -0
  59. data/{core/spec → test}/core/array/each_index_spec.rb +0 -0
  60. data/{core/spec → test}/core/array/each_spec.rb +0 -0
  61. data/{core/spec → test}/core/array/element_reference_spec.rb +0 -0
  62. data/{core/spec → test}/core/array/empty_spec.rb +0 -0
  63. data/{core/spec → test}/core/array/eql_spec.rb +0 -0
  64. data/{core/spec → test}/core/array/fetch_spec.rb +0 -0
  65. data/{core/spec → test}/core/array/first_spec.rb +0 -0
  66. data/{core/spec → test}/core/array/flatten_spec.rb +0 -0
  67. data/{core/spec → test}/core/array/include_spec.rb +0 -0
  68. data/{core/spec → test}/core/array/insert_spec.rb +0 -0
  69. data/{core/spec → test}/core/array/last_spec.rb +0 -0
  70. data/{core/spec → test}/core/array/length_spec.rb +0 -0
  71. data/{core/spec → test}/core/array/map_spec.rb +0 -0
  72. data/{core/spec → test}/core/array/plus_spec.rb +0 -0
  73. data/{core/spec → test}/core/array/pop_spec.rb +0 -0
  74. data/{core/spec → test}/core/array/push_spec.rb +0 -0
  75. data/{core/spec → test}/core/array/rassoc_spec.rb +0 -0
  76. data/{core/spec → test}/core/array/reject_spec.rb +0 -0
  77. data/{core/spec → test}/core/array/replace_spec.rb +0 -0
  78. data/{core/spec → test}/core/array/reverse_each_spec.rb +0 -0
  79. data/{core/spec → test}/core/array/reverse_spec.rb +0 -0
  80. data/{core/spec → test}/core/array/size_spec.rb +0 -0
  81. data/{core/spec → test}/core/array/to_ary_spec.rb +0 -0
  82. data/{core/spec → test}/core/array/uniq_spec.rb +0 -0
  83. data/{core/spec → test}/core/array/zip_spec.rb +0 -0
  84. data/test/core/class/fixtures/classes.rb +9 -0
  85. data/test/core/class/new_spec.rb +108 -0
  86. data/{core/spec → test}/core/enumerable/all_spec.rb +0 -0
  87. data/{core/spec → test}/core/enumerable/any_spec.rb +0 -0
  88. data/{core/spec → test}/core/enumerable/collect_spec.rb +0 -0
  89. data/{core/spec → test}/core/enumerable/count_spec.rb +0 -0
  90. data/test/core/enumerable/detect_spec.rb +48 -0
  91. data/test/core/enumerable/drop_spec.rb +17 -0
  92. data/test/core/enumerable/drop_while_spec.rb +24 -0
  93. data/test/core/enumerable/each_with_index_spec.rb +11 -0
  94. data/test/core/enumerable/each_with_object_spec.rb +17 -0
  95. data/test/core/enumerable/entries_spec.rb +6 -0
  96. data/test/core/enumerable/find_all_spec.rb +13 -0
  97. data/test/core/enumerable/find_index_spec.rb +45 -0
  98. data/test/core/enumerable/find_spec.rb +48 -0
  99. data/test/core/enumerable/first_spec.rb +40 -0
  100. data/{core/spec → test}/core/enumerable/fixtures/classes.rb +19 -0
  101. data/test/core/enumerable/grep_spec.rb +21 -0
  102. data/test/core/enumerable/take_spec.rb +40 -0
  103. data/test/core/enumerable/to_a_spec.rb +6 -0
  104. data/{core/spec → test}/core/false/and_spec.rb +0 -0
  105. data/{core/spec → test}/core/false/inspect_spec.rb +0 -0
  106. data/{core/spec → test}/core/false/or_spec.rb +0 -0
  107. data/{core/spec → test}/core/false/to_s_spec.rb +0 -0
  108. data/{core/spec → test}/core/false/xor_spec.rb +0 -0
  109. data/test/core/file/expand_path_spec.rb +20 -0
  110. data/{core/spec → test}/core/hash/allocate_spec.rb +0 -0
  111. data/{core/spec → test}/core/hash/assoc_spec.rb +0 -0
  112. data/{core/spec → test}/core/hash/clear_spec.rb +0 -0
  113. data/{core/spec → test}/core/hash/clone_spec.rb +0 -0
  114. data/test/core/hash/default_spec.rb +9 -0
  115. data/{core/spec → test}/core/hash/delete_if_spec.rb +0 -0
  116. data/test/core/hash/each_key_spec.rb +15 -0
  117. data/test/core/hash/each_pair_spec.rb +30 -0
  118. data/test/core/hash/each_spec.rb +30 -0
  119. data/test/core/hash/each_value_spec.rb +15 -0
  120. data/{core/spec → test}/core/hash/element_reference_spec.rb +14 -0
  121. data/{core/spec → test}/core/hash/element_set_spec.rb +1 -0
  122. data/test/core/hash/empty_spec.rb +10 -0
  123. data/test/core/hash/fetch_spec.rb +24 -0
  124. data/test/core/hash/flatten_spec.rb +46 -0
  125. data/test/core/hash/has_key_spec.rb +24 -0
  126. data/test/core/hash/has_value_spec.rb +12 -0
  127. data/test/core/hash/include_spec.rb +24 -0
  128. data/test/core/hash/index_spec.rb +13 -0
  129. data/test/core/hash/indexes_spec.rb +9 -0
  130. data/test/core/hash/indices_spec.rb +9 -0
  131. data/test/core/hash/invert_spec.rb +12 -0
  132. data/test/core/hash/keep_if_spec.rb +18 -0
  133. data/test/core/hash/key_spec.rb +24 -0
  134. data/test/core/hash/keys_spec.rb +10 -0
  135. data/test/core/hash/length_spec.rb +10 -0
  136. data/test/core/hash/member_spec.rb +24 -0
  137. data/{core/spec → test}/core/hash/merge_spec.rb +0 -0
  138. data/{core/spec → test}/core/hash/new_spec.rb +0 -0
  139. data/test/core/hash/rassoc_spec.rb +34 -0
  140. data/test/core/hash/replace_spec.rb +7 -0
  141. data/test/core/hash/select_spec.rb +52 -0
  142. data/test/core/hash/shift_spec.rb +19 -0
  143. data/test/core/hash/size_spec.rb +10 -0
  144. data/test/core/hash/update_spec.rb +17 -0
  145. data/test/core/hash/value_spec.rb +12 -0
  146. data/test/core/hash/values_at_spec.rb +9 -0
  147. data/test/core/hash/values_spec.rb +7 -0
  148. data/test/core/kernel/eql_spec.rb +15 -0
  149. data/test/core/kernel/equal_value_spec.rb +12 -0
  150. data/test/core/kernel/loop_spec.rb +23 -0
  151. data/test/core/kernel/nil_spec.rb +7 -0
  152. data/test/core/kernel/proc_spec.rb +9 -0
  153. data/test/core/kernel/rand_spec.rb +14 -0
  154. data/test/core/kernel/respond_to_spec.rb +24 -0
  155. data/test/core/kernel/send_spec.rb +56 -0
  156. data/test/core/kernel/tap_spec.rb +10 -0
  157. data/test/core/kernel/to_s_spec.rb +5 -0
  158. data/{core/spec → test}/core/matchdata/to_a_spec.rb +0 -0
  159. data/{core/spec → test}/core/nil/and_spec.rb +0 -0
  160. data/{core/spec → test}/core/nil/inspect_spec.rb +0 -0
  161. data/{core/spec → test}/core/nil/nil_spec.rb +0 -0
  162. data/{core/spec → test}/core/nil/or_spec.rb +0 -0
  163. data/{core/spec → test}/core/nil/to_a_spec.rb +0 -0
  164. data/{core/spec → test}/core/nil/to_f_spec.rb +0 -0
  165. data/{core/spec → test}/core/nil/to_i_spec.rb +0 -0
  166. data/{core/spec → test}/core/nil/to_s_spec.rb +0 -0
  167. data/{core/spec → test}/core/nil/xor_spec.rb +0 -0
  168. data/{core/spec → test}/core/numeric/equal_value_spec.rb +0 -0
  169. data/test/core/range/begin_spec.rb +9 -0
  170. data/test/core/range/case_compare_spec.rb +16 -0
  171. data/test/core/range/end_spec.rb +9 -0
  172. data/{core/spec → test}/core/regexp/match_spec.rb +0 -0
  173. data/test/core/string/capitalize_spec.rb +10 -0
  174. data/test/core/string/casecmp_spec.rb +16 -0
  175. data/test/core/string/chomp_spec.rb +43 -0
  176. data/test/core/string/chop_spec.rb +10 -0
  177. data/test/core/string/chr_spec.rb +13 -0
  178. data/test/core/string/comparison_spec.rb +13 -0
  179. data/test/core/string/downcase_spec.rb +6 -0
  180. data/test/core/string/element_reference_spec.rb +72 -0
  181. data/test/core/string/empty_spec.rb +8 -0
  182. data/test/core/string/end_with_spec.rb +12 -0
  183. data/test/core/string/fixtures/classes.rb +3 -0
  184. data/test/core/string/gsub_spec.rb +17 -0
  185. data/test/core/string/include_spec.rb +12 -0
  186. data/test/core/string/intern_spec.rb +9 -0
  187. data/test/core/string/length_spec.rb +9 -0
  188. data/test/core/string/lstrip_spec.rb +7 -0
  189. data/test/core/string/match_spec.rb +27 -0
  190. data/test/core/string/next_spec.rb +10 -0
  191. data/test/core/string/ord_spec.rb +9 -0
  192. data/test/core/string/partition_spec.rb +10 -0
  193. data/test/core/string/reverse_spec.rb +7 -0
  194. data/test/core/string/rstrip_spec.rb +7 -0
  195. data/test/core/string/size_spec.rb +9 -0
  196. data/test/core/string/slice_spec.rb +72 -0
  197. data/test/core/string/split_spec.rb +5 -0
  198. data/test/core/string/start_with_spec.rb +12 -0
  199. data/test/core/string/strip_spec.rb +6 -0
  200. data/test/core/string/sub_spec.rb +22 -0
  201. data/test/core/string/succ_spec.rb +10 -0
  202. data/test/core/string/sum_spec.rb +5 -0
  203. data/test/core/string/swapcase_spec.rb +18 -0
  204. data/test/core/string/to_a_spec.rb +9 -0
  205. data/test/core/string/to_f_spec.rb +14 -0
  206. data/test/core/string/to_i_spec.rb +25 -0
  207. data/test/core/string/to_s_spec.rb +13 -0
  208. data/test/core/string/to_str_spec.rb +13 -0
  209. data/test/core/string/to_sym_spec.rb +9 -0
  210. data/test/core/string/upcase_spec.rb +6 -0
  211. data/test/core/symbol/to_proc_spec.rb +12 -0
  212. data/{core/spec → test}/core/true/and_spec.rb +0 -0
  213. data/{core/spec → test}/core/true/inspect_spec.rb +0 -0
  214. data/{core/spec → test}/core/true/or_spec.rb +0 -0
  215. data/{core/spec → test}/core/true/to_s_spec.rb +0 -0
  216. data/{core/spec → test}/core/true/xor_spec.rb +0 -0
  217. data/test/index.html +11 -0
  218. data/{core/spec → test}/language/alias_spec.rb +4 -0
  219. data/{core/spec → test}/language/and_spec.rb +0 -0
  220. data/{core/spec → test}/language/array_spec.rb +0 -0
  221. data/{core/spec → test}/language/block_spec.rb +0 -0
  222. data/{core/spec → test}/language/break_spec.rb +0 -0
  223. data/{core/spec → test}/language/case_spec.rb +0 -0
  224. data/{core/spec → test}/language/defined_spec.rb +0 -0
  225. data/{core/spec → test}/language/ensure_spec.rb +0 -0
  226. data/test/language/fixtures/yield.rb +23 -0
  227. data/{core/spec → test}/language/hash_spec.rb +0 -0
  228. data/{core/spec → test}/language/if_spec.rb +0 -0
  229. data/test/language/literal_lambda_spec.rb +47 -0
  230. data/{core/spec → test}/language/loop_spec.rb +0 -0
  231. data/{core/spec → test}/language/metaclass_spec.rb +0 -0
  232. data/{core/spec → test}/language/next_spec.rb +0 -0
  233. data/{core/spec → test}/language/or_spec.rb +0 -0
  234. data/{core/spec → test}/language/predefined_spec.rb +0 -0
  235. data/{core/spec → test}/language/regexp_spec.rb +0 -0
  236. data/{core/spec → test}/language/send_spec.rb +0 -0
  237. data/{core/spec → test}/language/singleton_class_spec.rb +0 -0
  238. data/{core/spec → test}/language/super_spec.rb +0 -0
  239. data/{core/spec → test}/language/symbol_spec.rb +0 -0
  240. data/{core/spec → test}/language/undef_spec.rb +0 -0
  241. data/{core/spec → test}/language/unless_spec.rb +0 -0
  242. data/{core/spec → test}/language/until_spec.rb +0 -0
  243. data/{core/spec → test}/language/variables_spec.rb +0 -0
  244. data/{core/spec → test}/language/while_spec.rb +0 -0
  245. data/test/language/yield_spec.rb +100 -0
  246. data/test/opal/array/subclassing_spec.rb +32 -0
  247. data/test/opal/class/bridge_class_spec.rb +37 -0
  248. data/test/opal/exception/subclassing_spec.rb +17 -0
  249. data/test/opal/runtime/_methods_spec.rb +48 -0
  250. data/test/opal/runtime/class_hierarchy_spec.rb +22 -0
  251. data/test/opal/runtime/def_spec.rb +23 -0
  252. data/test/opal/string/subclassing_spec.rb +26 -0
  253. data/test/spec_helper.rb +3 -0
  254. metadata +437 -111
  255. data/core/spec/core/class/new_spec.rb +0 -16
  256. data/core/spec/core/hash/default_spec.rb +0 -4
  257. data/core/spec/core/symbol/to_proc_spec.rb +0 -6
  258. data/core/spec/index.html +0 -11
  259. data/spec/builder/build_source_spec.rb +0 -52
@@ -0,0 +1,52 @@
1
+ describe "Hash#select" do
2
+ before(:each) do
3
+ @hsh = {1 => 2, 3 => 4, 5 => 6}
4
+ @empty = {}
5
+ end
6
+
7
+ it "yields two arguments: key and value" do
8
+ all_args = []
9
+ {1 => 2, 3 => 4}.select { |*args| all_args << args }
10
+ all_args.should == [[1, 2], [3, 4]]
11
+ end
12
+
13
+ it "returns a Hash of entries for which block is true" do
14
+ a_pairs = {'a' => 9, 'c' => 4, 'b' => 5, 'd' => 2}.select { |k,v| v % 2 == 0 }
15
+ a_pairs.should be_kind_of(Hash)
16
+ a_pairs.should == {'c' => 4, 'd' => 2}
17
+ end
18
+
19
+ it "processes entries with the same order as reject" do
20
+ h = {:a => 9, :c => 4, :b => 5, :d => 2}
21
+
22
+ select_pairs = []
23
+ reject_pairs = []
24
+ h.select { |*pair| select_pairs << pair }
25
+ h.reject { |*pair| reject_pairs << pair }
26
+
27
+ select_pairs.should == reject_pairs
28
+ end
29
+ end
30
+
31
+ describe "Hash#select!" do
32
+ before(:each) do
33
+ @hsh = {1 => 2, 3 => 4, 5 => 6}
34
+ @empty = {}
35
+ end
36
+
37
+ it "is equivalent to keep_if if changes are made" do
38
+ {:a => 2}.select! { |k,v| v <= 1 }.should ==
39
+ {:a => 2}.keep_if { |k, v| v <= 1 }
40
+
41
+ h = {1 => 2, 3 => 4}
42
+ all_args_select = []
43
+ all_args_keep_if = []
44
+ h.dup.select! { |*args| all_args_select << args }
45
+ h.dup.keep_if { |*args| all_args_keep_if << args }
46
+ all_args_select.should == all_args_keep_if
47
+ end
48
+
49
+ it "returns nil if no changes were made" do
50
+ {:a => 1}.select! { |k,v| v <= 1 }.should == nil
51
+ end
52
+ end
@@ -0,0 +1,19 @@
1
+ describe "Hash#shift" do
2
+ it "removes a pair from hash and return it" do
3
+ h = {:a => 1, :b => 2, "c" => 3, nil => 4, [] => 5}
4
+ h2 = h.dup
5
+
6
+ h.size.times do |i|
7
+ r = h.shift
8
+ # r.should be_kind_of(Array)
9
+ # h2[r.first].should == r.last
10
+ # h.size.should == h2.size - i - 1
11
+ end
12
+
13
+ h.should == {}
14
+ end
15
+
16
+ it "removes nil from an empty hash" do
17
+ {}.shift.should == nil
18
+ end
19
+ end
@@ -0,0 +1,10 @@
1
+ describe "Hash#size" do
2
+ it "returns the number of entries" do
3
+ {:a => 1, :b => 'c'}.size.should == 2
4
+ {:a => 1, :b => 2, :a => 2}.size.should == 2
5
+ {:a => 1, :b => 1, :c => 1}.size.should == 3
6
+ Hash.new.size.should == 0
7
+ Hash.new(5).size.should == 0
8
+ Hash.new { 5 }.size.should == 0
9
+ end
10
+ end
@@ -0,0 +1,17 @@
1
+ describe "Hash#update" do
2
+ it "adds the entries from other, overwriting duplicate keys. Returns self" do
3
+ h = {:_1 => 'a', :_2 => '3'}
4
+ h.update(:_1 => '9', :_9 => 2).should equal(h)
5
+ h.should == {:_1 => "9", :_2 => "3", :_9 => 2}
6
+ end
7
+
8
+ it "sets any duplicate key to the value of block if passed a block" do
9
+ h1 = {:a => 2, :b => -1}
10
+ h2 = {:a => -2, :c => 1}
11
+ h1.update(h2) { |k,x,y| 3.14 }.should equal(h1)
12
+ h1.should == {:c => 1, :b => -1, :a => 3.14}
13
+
14
+ h1.update(h1) { nil }
15
+ h1.should == {:a => nil, :b => nil, :c => nil}
16
+ end
17
+ end
@@ -0,0 +1,12 @@
1
+ describe "Hash#value?" do
2
+ it "returns true if the value exists in the hash" do
3
+ {:a => :b}.value?(:a).should == false
4
+ {1 => 2}.value?(2).should == true
5
+ h = Hash.new 5
6
+ h.value?(5).should == false
7
+ end
8
+
9
+ it "uses == semantics for comparing values" do
10
+ {5 => 2.0}.value?(2).should == true
11
+ end
12
+ end
@@ -0,0 +1,9 @@
1
+ describe "Hash#values_at" do
2
+ it "returns an array of values for the given keys" do
3
+ h = {:a => 9, :b => 'a', :c => -10, :d => nil}
4
+ h.values_at.should be_kind_of(Array)
5
+ h.values_at.should == []
6
+ h.values_at(:a, :d, :b).should be_kind_of(Array)
7
+ h.values_at(:a, :d, :b).should == [9, nil, 'a']
8
+ end
9
+ end
@@ -0,0 +1,7 @@
1
+ describe "Hash#values" do
2
+ it "returns an array of values" do
3
+ h = {1 => :a, 'a' => :a, 'the' => 'lang'}
4
+ h.values.should be_kind_of(Array)
5
+ h.values.should == [:a, :a, 'lang']
6
+ end
7
+ end
@@ -0,0 +1,15 @@
1
+ describe "Kernel#eql?" do
2
+ it "returns true if obj and anObject are the same object." do
3
+ o1 = Object.new
4
+ o2 = Object.new
5
+ o1.eql?(o1).should be_true
6
+ o2.eql?(o2).should be_true
7
+ o1.eql?(o2).should be_false
8
+ end
9
+
10
+ it "returns true if obj and anObject have the same value." do
11
+ :hola.eql?(1).should be_false
12
+ 1.eql?(1).should be_true
13
+ :hola.eql?(:hola).should be_true
14
+ end
15
+ end
@@ -0,0 +1,12 @@
1
+ describe "Kernel#==" do
2
+ it "returns true only if obj and other are the same object" do
3
+ o1 = Object.new
4
+ o2 = Object.new
5
+ (o1 == o1).should == true
6
+ (o2 == o2).should == true
7
+ (o1 == o2).should == false
8
+ (nil == nil).should == true
9
+ (o1 == nil).should == false
10
+ (nil == o2).should == false
11
+ end
12
+ end
@@ -0,0 +1,23 @@
1
+ describe "Kernel.loop" do
2
+ it "calls block until it is terminated by a break" do
3
+ i = 0
4
+ loop do
5
+ i += 1
6
+ break if i == 10
7
+ end
8
+
9
+ i.should == 10
10
+ end
11
+
12
+ it "returns value passed to break" do
13
+ loop do
14
+ break 123
15
+ end.should == 123
16
+ end
17
+
18
+ it "returns nil if no value passed to break" do
19
+ loop do
20
+ break
21
+ end.should == nil
22
+ end
23
+ end
@@ -0,0 +1,7 @@
1
+ describe "Kernel#nil?" do
2
+ it "should return false for all object that are not nil" do
3
+ Object.new.nil?.should be_false
4
+ 0.nil?.should be_false
5
+ false.nil?.should be_false
6
+ end
7
+ end
@@ -0,0 +1,9 @@
1
+ describe "Kernel#proc" do
2
+ it "returns a Proc object" do
3
+ proc { true }.kind_of?(Proc).should == true
4
+ end
5
+
6
+ it "raises an ArgumentError when no block is given" do
7
+ lambda { proc }.should raise_error(ArgumentError)
8
+ end
9
+ end
@@ -0,0 +1,14 @@
1
+ describe "Kernel.rand" do
2
+ it "returns a float if no argument is passed" do
3
+ # rand.should be_kind_of(Float)
4
+ end
5
+
6
+ it "returns an integer for an integer argument" do
7
+ # rand(77).should be_kind_of(Integer)
8
+ end
9
+
10
+ it "returns a numeric in opal" do
11
+ rand.should be_kind_of(Numeric)
12
+ rand(77).should be_kind_of(Numeric)
13
+ end
14
+ end
@@ -0,0 +1,24 @@
1
+ class RespondToSpecs
2
+ def self.bar
3
+ 'done'
4
+ end
5
+
6
+ def undefed_method
7
+ true
8
+ end
9
+
10
+ undef undefed_method
11
+ end
12
+
13
+ describe "Kernel.respond_to?" do
14
+ it "indicates if a singleton object responds to a particular message" do
15
+ RespondToSpecs.respond_to?(:bar).should == true
16
+ RespondToSpecs.respond_to?(:baz).should == false
17
+ end
18
+ end
19
+
20
+ describe "Kernel#respond_to?" do
21
+ before :each do
22
+ @a = RespondToSpecs.new
23
+ end
24
+ end
@@ -0,0 +1,56 @@
1
+ module KernelSpecs
2
+ class Foo
3
+ def bar
4
+ 'done'
5
+ end
6
+
7
+ alias :aka :bar
8
+
9
+ def baz(*args) args end
10
+
11
+ def foo(first, *rest) [first, *rest] end
12
+
13
+ def buz(first = true) first end
14
+
15
+ def self.bar
16
+ 'done'
17
+ end
18
+ end
19
+ end
20
+
21
+ describe "Kernel#send" do
22
+ it "invokes the named public method" do
23
+ KernelSpecs::Foo.new.send(:bar).should == 'done'
24
+ end
25
+
26
+ it "invokes the named alias of a public method" do
27
+ KernelSpecs::Foo.new.send(:aka).should == 'done'
28
+ end
29
+ end
30
+
31
+ describe "Kernel#send" do
32
+ it "invokes the named method" do
33
+ KernelSpecs::Foo.new.send(:bar).should == 'done'
34
+ end
35
+
36
+ it "invokes a class method if called on a class" do
37
+ KernelSpecs::Foo.send(:bar).should == 'done'
38
+ end
39
+
40
+ it "succeeds if passed an arbitrary number of arguments as a splat parameter" do
41
+ KernelSpecs::Foo.new.send(:baz).should == []
42
+ KernelSpecs::Foo.new.send(:baz, :quux).should == [:quux]
43
+ KernelSpecs::Foo.new.send(:baz, :quux, :foo).should == [:quux, :foo]
44
+ end
45
+
46
+ it "succeeds when passing 1 or more arguments as a required and a splat parameter" do
47
+ KernelSpecs::Foo.new.send(:foo, :quux).should == [:quux]
48
+ KernelSpecs::Foo.new.send(:foo, :quux, :bar).should == [:quux, :bar]
49
+ KernelSpecs::Foo.new.send(:foo, :quux, :bar, :baz).should == [:quux, :bar, :baz]
50
+ end
51
+
52
+ it "succeeds when passing 0 arguments to a method with one parameter with a default" do
53
+ KernelSpecs::Foo.new.send(:buz).should == true
54
+ KernelSpecs::Foo.new.send(:buz, :arg).should == :arg
55
+ end
56
+ end
@@ -0,0 +1,10 @@
1
+ describe "Kernel#tap" do
2
+ it "always yields self and returns self" do
3
+ a = Object.new
4
+ a.tap {|o| o.should equal(a); 42}.should equal(a)
5
+ end
6
+
7
+ it "raises a LocalJumpError when no block given" do
8
+ lambda { 3.tap }.should raise_error(LocalJumpError)
9
+ end
10
+ end
@@ -0,0 +1,5 @@
1
+ describe "Kernel#to_s" do
2
+ it "returns a String containing the name of self's class" do
3
+ Object.new.to_s.should =~ /Object/
4
+ end
5
+ end
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,9 @@
1
+ describe "Range#begin" do
2
+ it "returns the first element of self" do
3
+ (-1..1).begin.should == -1
4
+ (0..1).begin.should == 0
5
+ ('Q'..'T').begin.should == 'Q'
6
+ ('Q'...'T').begin.should == 'Q'
7
+ (0.5..2.4).begin.should == 0.5
8
+ end
9
+ end
@@ -0,0 +1,16 @@
1
+ describe "Range#===" do
2
+ it "returns true if other is an element of self" do
3
+ ((0..5) === 2).should == true
4
+ ((-5..5) === 0).should == true
5
+ ((-1...1) === 10.5).should == false
6
+ ((-10..-2) === -2.5).should == true
7
+ (('C'..'X') === 'M').should == true
8
+ (('C'..'X') === 'A').should == false
9
+ (('B'...'W') === 'W').should == false
10
+ (('B'...'W') === 'Q').should == true
11
+ ((0.5..2.4) === 2).should == true
12
+ ((0.5..2.4) === 2.5).should == false
13
+ ((0.5...2.4) === 2.4).should == true
14
+ ((0.5...2.4) === 2.4).should == false
15
+ end
16
+ end
@@ -0,0 +1,9 @@
1
+ describe "Range#end" do
2
+ it "end returns the last element of self" do
3
+ (-1..1).end.should == 1
4
+ (0..1).end.should == 1
5
+ ("A".."Q").end.should == "Q"
6
+ ("A"..."Q").end.should == "Q"
7
+ (0.5..2.4).end.should == 2.4
8
+ end
9
+ end
@@ -0,0 +1,10 @@
1
+ describe "String#capitalize" do
2
+ it "returns a copy of self with the first character converted to uppercase and the remainder to lowercase" do
3
+ "".capitalize.should == ""
4
+ "h".capitalize.should == "H"
5
+ "H".capitalize.should == "H"
6
+ "hello".capitalize.should == "Hello"
7
+ "HELLO".capitalize.should == "Hello"
8
+ "123ABC".capitalize.should == "123abc"
9
+ end
10
+ end
@@ -0,0 +1,16 @@
1
+ describe "String#casecmp" do
2
+ it "returns -1 when less than other" do
3
+ "a".casecmp("b").should == -1
4
+ "A".casecmp("b").should == -1
5
+ end
6
+
7
+ it "returns 0 when equal to other" do
8
+ "a".casecmp("a").should == 0
9
+ "A".casecmp("a").should == 0
10
+ end
11
+
12
+ it "returns 1 when greater than other" do
13
+ "b".casecmp("a").should == 1
14
+ "B".casecmp("a").should == 1
15
+ end
16
+ end
@@ -0,0 +1,43 @@
1
+ describe "String#chomp with separator" do
2
+ it "returns a new string with the given record separator removed" do
3
+ "hello".chomp("llo").should == "he"
4
+ "hellollo".chomp("llo").should == "hello"
5
+ end
6
+
7
+ it "removes carriage return (except \\r) chars multiple times when separator is an empty string" do
8
+ "".chomp("").should == ""
9
+ "hello".chomp("").should == "hello"
10
+ "hello\n".chomp("").should == "hello"
11
+ "hello\nx".chomp("").should == "hello\nx"
12
+ "hello\r\n".chomp("").should == "hello"
13
+ "hello\r\n\r\n\n\n\r\n".chomp("").should == "hello"
14
+
15
+ "hello\r".chomp("").should == "hello\r"
16
+ "hello\n\r".chomp("").should == "hello\n\r"
17
+ "hello\r\r\r\n".chomp("").should == "hello\r\r"
18
+ end
19
+
20
+ it "removes carriage return chars(\\n, \\r, \\r\\n) when separator is \\n" do
21
+ "hello".chomp("\n").should == "hello"
22
+ "hello\n".chomp("\n").should == "hello"
23
+ "hello\r\n".chomp("\n").should == "hello"
24
+ "hello\n\r".chomp("\n").should == "hello\n"
25
+ "hello\r".chomp("\n").should == "hello"
26
+ "hello \n there".chomp("\n").should == "hello \n there"
27
+ "hello\r\n\r\n\n\n\r\n".chomp("\n").should == "hello\r\n\r\n\n\n"
28
+
29
+ "hello\n\r".chomp("\r").should == "hello\n"
30
+ "hello\n\r\n".chomp("\r\n").should == "hello\n"
31
+ end
32
+
33
+ it "returns self if the separator is nil" do
34
+ "hello\n\n".chomp(nil).should == "hello\n\n"
35
+ end
36
+
37
+ it "returns an empty string when called on an empty string" do
38
+ "".chomp("\n").should == ""
39
+ "".chomp("\r").should == ""
40
+ "".chomp("").should == ""
41
+ "".chomp(nil).should == ""
42
+ end
43
+ end