opal 0.3.18 → 0.3.19

Sign up to get free protection for your applications and to get access to all the features.
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