opal 0.3.11 → 0.3.15

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 (282) hide show
  1. data/.gitignore +13 -0
  2. data/Gemfile +10 -0
  3. data/LICENSE +20 -0
  4. data/README.md +11 -116
  5. data/Rakefile +126 -0
  6. data/bin/opal +1 -2
  7. data/docs/spec_runner.html +16 -0
  8. data/index.html +434 -0
  9. data/lib/opal.rb +14 -15
  10. data/lib/opal/builder.rb +46 -148
  11. data/lib/opal/command.rb +45 -115
  12. data/lib/opal/context.rb +139 -78
  13. data/lib/opal/dependency_builder.rb +34 -0
  14. data/lib/opal/environment.rb +92 -0
  15. data/lib/opal/parser/grammar.rb +4915 -0
  16. data/lib/opal/{parser.y → parser/grammar.y} +430 -284
  17. data/lib/opal/parser/lexer.rb +1329 -0
  18. data/lib/opal/parser/parser.rb +1460 -0
  19. data/lib/opal/parser/scope.rb +140 -0
  20. data/lib/opal/parser/sexp.rb +17 -0
  21. data/lib/opal/version.rb +2 -1
  22. data/opal.gemspec +23 -0
  23. data/opal.js +3149 -4162
  24. data/runtime/README.md +25 -0
  25. data/runtime/corelib/alpha.rb +10 -0
  26. data/runtime/corelib/array.rb +962 -0
  27. data/runtime/corelib/basic_object.rb +66 -0
  28. data/runtime/corelib/boolean.rb +44 -0
  29. data/runtime/corelib/class.rb +43 -0
  30. data/runtime/corelib/comparable.rb +25 -0
  31. data/runtime/corelib/complex.rb +2 -0
  32. data/runtime/corelib/dir.rb +29 -0
  33. data/runtime/corelib/enumerable.rb +316 -0
  34. data/runtime/corelib/enumerator.rb +80 -0
  35. data/runtime/corelib/error.rb +25 -0
  36. data/runtime/corelib/file.rb +80 -0
  37. data/runtime/corelib/hash.rb +503 -0
  38. data/runtime/corelib/io.rb +44 -0
  39. data/runtime/corelib/kernel.rb +237 -0
  40. data/runtime/corelib/load_order +29 -0
  41. data/runtime/corelib/match_data.rb +37 -0
  42. data/runtime/corelib/module.rb +171 -0
  43. data/runtime/corelib/native.rb +50 -0
  44. data/runtime/corelib/nil_class.rb +47 -0
  45. data/runtime/corelib/numeric.rb +219 -0
  46. data/runtime/corelib/object.rb +21 -0
  47. data/runtime/corelib/proc.rb +42 -0
  48. data/runtime/corelib/range.rb +38 -0
  49. data/runtime/corelib/rational.rb +16 -0
  50. data/runtime/corelib/regexp.rb +63 -0
  51. data/runtime/corelib/string.rb +185 -0
  52. data/runtime/corelib/struct.rb +97 -0
  53. data/runtime/corelib/time.rb +196 -0
  54. data/runtime/corelib/top_self.rb +7 -0
  55. data/runtime/gemlib/alpha.rb +5 -0
  56. data/runtime/gemlib/kernel.rb +17 -0
  57. data/runtime/gemlib/load_order +2 -0
  58. data/runtime/kernel/class.js +256 -0
  59. data/runtime/kernel/debug.js +42 -0
  60. data/runtime/kernel/init.js +114 -0
  61. data/runtime/kernel/load_order +5 -0
  62. data/runtime/kernel/loader.js +151 -0
  63. data/runtime/kernel/runtime.js +414 -0
  64. data/runtime/spec/README.md +34 -0
  65. data/runtime/spec/core/array/allocate_spec.rb +15 -0
  66. data/runtime/spec/core/array/append_spec.rb +31 -0
  67. data/runtime/spec/core/array/assoc_spec.rb +29 -0
  68. data/runtime/spec/core/array/at_spec.rb +38 -0
  69. data/runtime/spec/core/array/clear_spec.rb +22 -0
  70. data/runtime/spec/core/array/collect_spec.rb +3 -0
  71. data/runtime/spec/core/array/compact_spec.rb +42 -0
  72. data/runtime/spec/core/array/concat_spec.rb +21 -0
  73. data/runtime/spec/core/array/constructor_spec.rb +24 -0
  74. data/runtime/spec/core/array/count_spec.rb +11 -0
  75. data/runtime/spec/core/array/delete_at_spec.rb +31 -0
  76. data/runtime/spec/core/array/delete_if_spec.rb +24 -0
  77. data/runtime/spec/core/array/delete_spec.rb +26 -0
  78. data/runtime/spec/core/array/each_index_spec.rb +33 -0
  79. data/runtime/spec/core/array/each_spec.rb +11 -0
  80. data/runtime/spec/core/array/element_reference_spec.rb +136 -0
  81. data/runtime/spec/core/array/element_set_spec.rb +7 -0
  82. data/runtime/spec/core/array/empty_spec.rb +10 -0
  83. data/runtime/spec/core/array/eql_spec.rb +3 -0
  84. data/runtime/spec/core/array/equal_value_spec.rb +3 -0
  85. data/runtime/spec/core/array/fetch_spec.rb +26 -0
  86. data/runtime/spec/core/array/first_spec.rb +54 -0
  87. data/runtime/spec/core/array/fixtures/classes.rb +8 -0
  88. data/runtime/spec/core/array/flatten_spec.rb +41 -0
  89. data/runtime/spec/core/array/include_spec.rb +20 -0
  90. data/runtime/spec/core/array/insert_spec.rb +59 -0
  91. data/runtime/spec/core/array/last_spec.rb +57 -0
  92. data/runtime/spec/core/array/length_spec.rb +3 -0
  93. data/runtime/spec/core/array/map_spec.rb +3 -0
  94. data/runtime/spec/core/array/plus_spec.rb +16 -0
  95. data/runtime/spec/core/array/pop_spec.rb +79 -0
  96. data/runtime/spec/core/array/push_spec.rb +19 -0
  97. data/runtime/spec/core/array/rassoc_spec.rb +12 -0
  98. data/runtime/spec/core/array/reject_spec.rb +54 -0
  99. data/runtime/spec/core/array/replace_spec.rb +3 -0
  100. data/runtime/spec/core/array/reverse_each_spec.rb +18 -0
  101. data/runtime/spec/core/array/reverse_spec.rb +9 -0
  102. data/runtime/spec/core/array/shared/collect.rb +53 -0
  103. data/runtime/spec/core/array/shared/eql.rb +19 -0
  104. data/runtime/spec/core/array/shared/length.rb +6 -0
  105. data/runtime/spec/core/array/shared/replace.rb +31 -0
  106. data/runtime/spec/core/class/new_spec.rb +19 -0
  107. data/runtime/spec/core/enumerable/all_spec.rb +102 -0
  108. data/runtime/spec/core/enumerable/any_spec.rb +115 -0
  109. data/runtime/spec/core/enumerable/collect_spec.rb +3 -0
  110. data/runtime/spec/core/enumerable/count_spec.rb +29 -0
  111. data/runtime/spec/core/enumerable/detect_spec.rb +3 -0
  112. data/runtime/spec/core/enumerable/find_spec.rb +3 -0
  113. data/runtime/spec/core/enumerable/fixtures/classes.rb +26 -0
  114. data/runtime/spec/core/enumerable/shared/collect.rb +12 -0
  115. data/runtime/spec/core/enumerable/shared/entries.rb +7 -0
  116. data/runtime/spec/core/enumerable/shared/find.rb +49 -0
  117. data/runtime/spec/core/enumerable/to_a_spec.rb +7 -0
  118. data/runtime/spec/core/false/and_spec.rb +11 -0
  119. data/runtime/spec/core/false/inspect_spec.rb +7 -0
  120. data/runtime/spec/core/false/or_spec.rb +11 -0
  121. data/runtime/spec/core/false/to_s_spec.rb +7 -0
  122. data/runtime/spec/core/false/xor_spec.rb +11 -0
  123. data/runtime/spec/core/hash/allocate_spec.rb +15 -0
  124. data/runtime/spec/core/hash/assoc_spec.rb +29 -0
  125. data/runtime/spec/core/hash/clear_spec.rb +21 -0
  126. data/runtime/spec/core/hash/clone_spec.rb +12 -0
  127. data/runtime/spec/core/hash/default_spec.rb +6 -0
  128. data/runtime/spec/core/hash/delete_if_spec.rb +15 -0
  129. data/runtime/spec/core/hash/element_reference_spec.rb +16 -0
  130. data/runtime/spec/core/hash/element_set_spec.rb +8 -0
  131. data/runtime/spec/core/hash/new_spec.rb +13 -0
  132. data/runtime/spec/core/matchdata/to_a_spec.rb +7 -0
  133. data/runtime/spec/core/nil/and_spec.rb +12 -0
  134. data/runtime/spec/core/nil/inspect_spec.rb +8 -0
  135. data/runtime/spec/core/nil/nil_spec.rb +8 -0
  136. data/runtime/spec/core/nil/or_spec.rb +12 -0
  137. data/runtime/spec/core/nil/to_a_spec.rb +8 -0
  138. data/runtime/spec/core/nil/to_f_spec.rb +12 -0
  139. data/runtime/spec/core/nil/to_i_spec.rb +12 -0
  140. data/runtime/spec/core/nil/to_s_spec.rb +8 -0
  141. data/runtime/spec/core/nil/xor_spec.rb +12 -0
  142. data/runtime/spec/core/numeric/equal_value_spec.rb +11 -0
  143. data/runtime/spec/core/object/is_a_spec.rb +2 -0
  144. data/runtime/spec/core/object/shared/kind_of.rb +0 -0
  145. data/runtime/spec/core/regexp/match_spec.rb +23 -0
  146. data/runtime/spec/core/regexp/shared/match.rb +11 -0
  147. data/runtime/spec/core/symbol/to_proc_spec.rb +8 -0
  148. data/runtime/spec/core/true/and_spec.rb +11 -0
  149. data/runtime/spec/core/true/inspect_spec.rb +7 -0
  150. data/runtime/spec/core/true/or_spec.rb +11 -0
  151. data/runtime/spec/core/true/to_s_spec.rb +7 -0
  152. data/runtime/spec/core/true/xor_spec.rb +11 -0
  153. data/runtime/spec/language/alias_spec.rb +25 -0
  154. data/runtime/spec/language/and_spec.rb +62 -0
  155. data/runtime/spec/language/array_spec.rb +68 -0
  156. data/runtime/spec/language/block_spec.rb +105 -0
  157. data/runtime/spec/language/break_spec.rb +49 -0
  158. data/runtime/spec/language/case_spec.rb +165 -0
  159. data/runtime/spec/language/defined_spec.rb +80 -0
  160. data/runtime/spec/language/ensure_spec.rb +82 -0
  161. data/runtime/spec/language/fixtures/block.rb +19 -0
  162. data/runtime/spec/language/fixtures/break.rb +39 -0
  163. data/runtime/spec/language/fixtures/defined.rb +9 -0
  164. data/runtime/spec/language/fixtures/ensure.rb +37 -0
  165. data/runtime/spec/language/fixtures/next.rb +46 -0
  166. data/runtime/spec/language/fixtures/send.rb +36 -0
  167. data/runtime/spec/language/fixtures/super.rb +43 -0
  168. data/runtime/spec/language/hash_spec.rb +43 -0
  169. data/runtime/spec/language/if_spec.rb +278 -0
  170. data/runtime/spec/language/loop_spec.rb +32 -0
  171. data/runtime/spec/language/next_spec.rb +128 -0
  172. data/runtime/spec/language/or_spec.rb +65 -0
  173. data/runtime/spec/language/predefined_spec.rb +21 -0
  174. data/runtime/spec/language/regexp/interpolation_spec.rb +9 -0
  175. data/runtime/spec/language/regexp_spec.rb +7 -0
  176. data/runtime/spec/language/send_spec.rb +105 -0
  177. data/runtime/spec/language/string_spec.rb +4 -0
  178. data/runtime/spec/language/super_spec.rb +18 -0
  179. data/runtime/spec/language/symbol_spec.rb +41 -0
  180. data/runtime/spec/language/undef_spec.rb +16 -0
  181. data/runtime/spec/language/unless_spec.rb +44 -0
  182. data/runtime/spec/language/until_spec.rb +137 -0
  183. data/runtime/spec/language/variables_spec.rb +28 -0
  184. data/runtime/spec/language/versions/hash_1.9.rb +20 -0
  185. data/runtime/spec/language/while_spec.rb +175 -0
  186. data/runtime/spec/library/stringscanner/scan_spec.rb +36 -0
  187. data/runtime/spec/opal/forwardable/def_instance_delegator_spec.rb +49 -0
  188. data/runtime/spec/opal/opal/defined_spec.rb +15 -0
  189. data/runtime/spec/opal/opal/function_spec.rb +11 -0
  190. data/runtime/spec/opal/opal/native_spec.rb +16 -0
  191. data/runtime/spec/opal/opal/null_spec.rb +10 -0
  192. data/runtime/spec/opal/opal/number_spec.rb +11 -0
  193. data/runtime/spec/opal/opal/object_spec.rb +16 -0
  194. data/runtime/spec/opal/opal/string_spec.rb +11 -0
  195. data/runtime/spec/opal/opal/typeof_spec.rb +9 -0
  196. data/runtime/spec/opal/opal/undefined_spec.rb +10 -0
  197. data/runtime/spec/opal/true/case_compare_spec.rb +12 -0
  198. data/runtime/spec/opal/true/class_spec.rb +10 -0
  199. data/runtime/spec/spec_helper.rb +25 -0
  200. data/runtime/stdlib/base64.rb +91 -0
  201. data/runtime/stdlib/date.rb +4 -0
  202. data/{stdlib → runtime/stdlib}/dev.rb +0 -0
  203. data/runtime/stdlib/forwardable.rb +33 -0
  204. data/runtime/stdlib/optparse.rb +0 -0
  205. data/runtime/stdlib/pp.rb +6 -0
  206. data/{stdlib → runtime/stdlib}/racc/parser.rb +0 -0
  207. data/runtime/stdlib/rbconfig.rb +0 -0
  208. data/runtime/stdlib/si.rb +17 -0
  209. data/runtime/stdlib/strscan.rb +53 -0
  210. data/runtime/stdlib/uri.rb +111 -0
  211. data/runtime/stdlib/uri/common.rb +1014 -0
  212. data/runtime/stdlib/uri/ftp.rb +261 -0
  213. data/runtime/stdlib/uri/generic.rb +1599 -0
  214. data/runtime/stdlib/uri/http.rb +106 -0
  215. data/runtime/stdlib/uri/https.rb +22 -0
  216. data/runtime/stdlib/uri/ldap.rb +260 -0
  217. data/runtime/stdlib/uri/ldaps.rb +20 -0
  218. data/runtime/stdlib/uri/mailto.rb +280 -0
  219. data/spec/builder/build_source_spec.rb +52 -0
  220. data/spec/builder/fixtures/build_source/adam.rb +0 -0
  221. data/spec/builder/fixtures/build_source/bar/a.rb +0 -0
  222. data/spec/builder/fixtures/build_source/bar/wow/b.rb +0 -0
  223. data/spec/builder/fixtures/build_source/bar/wow/cow/c.rb +0 -0
  224. data/spec/builder/fixtures/build_source/beynon.rb +0 -0
  225. data/spec/builder/fixtures/build_source/charles.js +0 -0
  226. data/spec/builder/fixtures/build_source/foo/a.rb +0 -0
  227. data/spec/builder/fixtures/build_source/foo/b.rb +0 -0
  228. data/spec/builder/fixtures/build_source/foo/x.js +0 -0
  229. data/spec/builder/fixtures/build_source/foo/y.js +0 -0
  230. data/spec/builder/output_path_spec.rb +50 -0
  231. data/spec/grammar/alias_spec.rb +26 -0
  232. data/spec/grammar/and_spec.rb +13 -0
  233. data/spec/grammar/array_spec.rb +22 -0
  234. data/spec/grammar/attrasgn_spec.rb +28 -0
  235. data/spec/grammar/begin_spec.rb +38 -0
  236. data/spec/grammar/block_spec.rb +12 -0
  237. data/spec/grammar/break_spec.rb +17 -0
  238. data/spec/grammar/call_spec.rb +58 -0
  239. data/spec/grammar/class_spec.rb +35 -0
  240. data/spec/grammar/const_spec.rb +13 -0
  241. data/spec/grammar/cvar_spec.rb +11 -0
  242. data/spec/grammar/def_spec.rb +60 -0
  243. data/spec/grammar/false_spec.rb +17 -0
  244. data/spec/grammar/file_spec.rb +7 -0
  245. data/spec/grammar/gvar_spec.rb +13 -0
  246. data/spec/grammar/hash_spec.rb +17 -0
  247. data/spec/grammar/iasgn_spec.rb +9 -0
  248. data/spec/grammar/if_spec.rb +26 -0
  249. data/spec/grammar/iter_spec.rb +59 -0
  250. data/spec/grammar/ivar_spec.rb +9 -0
  251. data/spec/grammar/lasgn_spec.rb +8 -0
  252. data/spec/grammar/line_spec.rb +8 -0
  253. data/spec/grammar/lvar_spec.rb +38 -0
  254. data/spec/grammar/module_spec.rb +27 -0
  255. data/spec/grammar/nil_spec.rb +17 -0
  256. data/spec/grammar/not_spec.rb +27 -0
  257. data/spec/grammar/op_asgn1_spec.rb +23 -0
  258. data/spec/grammar/op_asgn2_spec.rb +23 -0
  259. data/spec/grammar/or_spec.rb +13 -0
  260. data/spec/grammar/return_spec.rb +17 -0
  261. data/spec/grammar/sclass_spec.rb +20 -0
  262. data/spec/grammar/self_spec.rb +17 -0
  263. data/spec/grammar/str_spec.rb +96 -0
  264. data/spec/grammar/super_spec.rb +20 -0
  265. data/spec/grammar/true_spec.rb +17 -0
  266. data/spec/grammar/undef_spec.rb +15 -0
  267. data/spec/grammar/unless_spec.rb +13 -0
  268. data/spec/grammar/while_spec.rb +15 -0
  269. data/spec/grammar/xstr_spec.rb +116 -0
  270. data/spec/grammar/yield_spec.rb +20 -0
  271. data/spec/spec_helper.rb +9 -0
  272. metadata +346 -21
  273. data/lib/opal/bundle.rb +0 -34
  274. data/lib/opal/lexer.rb +0 -902
  275. data/lib/opal/nodes.rb +0 -2150
  276. data/lib/opal/parser.rb +0 -4894
  277. data/lib/opal/rake/bundle_task.rb +0 -63
  278. data/opal-parser.js +0 -8343
  279. data/stdlib/strscan.rb +0 -52
  280. data/templates/init/Rakefile +0 -7
  281. data/templates/init/index.html +0 -17
  282. data/templates/init/lib/__NAME__.rb +0 -2
@@ -0,0 +1,3 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+ require File.expand_path('../fixtures/classes', __FILE__)
3
+ require File.expand_path('../shared/collect', __FILE__)
@@ -0,0 +1,29 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+ require File.expand_path('../fixtures/classes', __FILE__)
3
+
4
+ describe "Enumerable#count" do
5
+ before :each do
6
+ @elements = [1, 2, 4, 2]
7
+ @numerous = EnumerableSpecs::Numerous.new(*@elements)
8
+ end
9
+
10
+ it "returns size when no argument or a block" do
11
+ @numerous.count.should == 4
12
+ end
13
+
14
+ it "counts nils if given nil as an argument" do
15
+ EnumerableSpecs::Numerous.new(nil, nil, nil, false).count(nil).should == 3
16
+ end
17
+
18
+ it "accepts an argument for comparison using ==" do
19
+ @numerous.count(2).should == 2
20
+ end
21
+
22
+ it "uses a block for comparison" do
23
+ @numerous.count{|x| x%2==0 }.should == 3
24
+ end
25
+
26
+ it "ignores the block when given an argument" do
27
+ #@numerous.count(4){|x| x%2==0 }.should == 1
28
+ end
29
+ end
@@ -0,0 +1,3 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+ require File.expand_path('../fixtures/classes', __FILE__)
3
+ require File.expand_path('../shared/find', __FILE__)
@@ -0,0 +1,3 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+ require File.expand_path('../fixtures/classes', __FILE__)
3
+ require File.expand_path('../shared/find', __FILE__)
@@ -0,0 +1,26 @@
1
+ module EnumerableSpecs
2
+
3
+ class Numerous
4
+ include Enumerable
5
+ def initialize(*list)
6
+ @list = list.empty? ? [2, 5, 3, 6, 1, 4] : list
7
+ end
8
+
9
+ def each
10
+ @list.each { |i| yield i }
11
+ end
12
+ end
13
+
14
+ class Empty
15
+ include Enumerable
16
+ def each
17
+ end
18
+ end
19
+
20
+ class ThrowingEach
21
+ include Enumerable
22
+ def each
23
+ raise "from each"
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,12 @@
1
+ describe "Enumerable#collect" do
2
+ before :each do
3
+ ScratchPad.record []
4
+ end
5
+
6
+ it "returns a new array with the results of passing each element to block" do
7
+ entries = [0, 1, 3, 4, 5, 6]
8
+ numerous = EnumerableSpecs::Numerous.new(*entries)
9
+ numerous.collect { |i| i % 2 }.should == [0, 1, 1, 0, 1, 0]
10
+ numerous.collect { |i| i }.should == entries
11
+ end
12
+ end
@@ -0,0 +1,7 @@
1
+ #describe :enumerable_entries, :shared => true do
2
+ describe :enumerable_entires do
3
+ it "returns an array containing the elements" do
4
+ numerous = EnumerableSpecs::Numerous.new(1, nil, 'a', 2, false, true)
5
+ numerous.to_a.should == [1, nil, "a", 2, false, true]
6
+ end
7
+ end
@@ -0,0 +1,49 @@
1
+ describe "Enumerable#find" do
2
+ # #detect and #find are aliases, so we only need one function
3
+ before :each do
4
+ ScratchPad.record []
5
+ @elements = [2, 4, 6, 8, 10]
6
+ @numerous = EnumerableSpecs::Numerous.new(*@elements)
7
+ @empty = []
8
+ end
9
+
10
+ it "passes each entry in enum to block while block when block is false" do
11
+ visited_elements = []
12
+ @numerous.find do |element|
13
+ visited_elements << element
14
+ false
15
+ end
16
+ visited_elements.should == @elements
17
+ end
18
+
19
+ it "returns nil when the block is false and there is no ifnore proc given" do
20
+ @numerous.find {|e| false }.should == nil
21
+ end
22
+
23
+ it "returns the first element for which the block is not false" do
24
+ @elements.each do |element|
25
+ @numerous.find {|e| e > element - 1 }.should == element
26
+ end
27
+ end
28
+
29
+ it "returns the value of the ifnone proc if the block is false" do
30
+ fail_proc = lambda { "cheeseburgers" }
31
+ @numerous.find(fail_proc) { |e| false }.should == "cheeseburgers"
32
+ end
33
+
34
+ it "doesn't call the ifnone proc if an element is found" do
35
+ fail_proc = lambda { raise "This shouldn't have been called" }
36
+ @numerous.find(fail_proc) {|e| e == @elements.first }.should == 2
37
+ end
38
+
39
+ it "calls the ifnone proc only once when the block is false" do
40
+ times = 0
41
+ fail_proc = lambda { times += 1; raise if times > 1; "cheeseburgers" }
42
+ @numerous.find(fail_proc) {|e| false }.should == "cheeseburgers"
43
+ end
44
+
45
+ it "calls the ifnone proc when there are no elements" do
46
+ fail_proc = lambda { "yay" }
47
+ @empty.find(fail_proc) {|e| true }.should == "yay"
48
+ end
49
+ end
@@ -0,0 +1,7 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+ require File.expand_path('../fixtures/classes', __FILE__)
3
+ require File.expand_path('../shared/entries', __FILE__)
4
+
5
+ describe "Enumerable#to_a" do
6
+ it_behaves_like(:enumerable_entries, :to_a)
7
+ end
@@ -0,0 +1,11 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe "FalseClass#&" do
4
+ it "returns false" do
5
+ (false & true).should == false
6
+ (false & false).should == false
7
+ (false & nil).should == false
8
+ (false & "").should == false
9
+ (false & mock('x')).should == false
10
+ end
11
+ end
@@ -0,0 +1,7 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe "FalseClass#inspect" do
4
+ it "returns the string 'false'" do
5
+ false.inspect.should == "false"
6
+ end
7
+ end
@@ -0,0 +1,11 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe "FalseClass#|" do
4
+ it "returns false if other is nil or false, otherwise true" do
5
+ (false | false).should == false
6
+ (false | true).should == true
7
+ (false | nil).should == false
8
+ (false | "").should == true
9
+ (false | mock('x')).should == true
10
+ end
11
+ end
@@ -0,0 +1,7 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe "FalseClass#to_s" do
4
+ it "returns the string 'false'" do
5
+ false.to_s.should == "false"
6
+ end
7
+ end
@@ -0,0 +1,11 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe "FalseClass#^" do
4
+ it "returns false if other is nil or false, otherwise true" do
5
+ (false ^ false).should == false
6
+ (false ^ true).should == true
7
+ (false ^ nil).should == false
8
+ (false ^ "").should == true
9
+ (false ^ mock('x')).should == true
10
+ end
11
+ end
@@ -0,0 +1,15 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe "Hash.allocate" do
4
+ it "returns an instance of Hash" do
5
+ hsh = Hash.allocate
6
+ hsh.should be_kind_of(Hash)
7
+ end
8
+
9
+ it "returns a fully-formed instance of Hash" do
10
+ hsh = Hash.allocate
11
+ hsh.size.should == 0
12
+ hsh[:a] = 1
13
+ hsh.should == { :a => 1 }
14
+ end
15
+ end
@@ -0,0 +1,29 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ #ruby_version_is "1.9" do
4
+ describe "Hash#assoc" do
5
+ before(:each) do
6
+ @h = {:apple => :green, :orange => :orange, :grape => :green, :banana => :yellow}
7
+ end
8
+
9
+ it "returns an Array is the argument is == to a key of the Hash" do
10
+ @h.assoc(:apple).should be_kind_of(Array)
11
+ end
12
+
13
+ it "returns a 2-element Array if the argument is == to a key of the Hash" do
14
+ @h.assoc(:grape).size.should == 2
15
+ end
16
+
17
+ it "sets the first element of the Array to the located key" do
18
+ @h.assoc(:banana).first.should == :banana
19
+ end
20
+
21
+ it "sets the last element of the Array to the value of the located key" do
22
+ @h.assoc(:banana).last.should == :yellow
23
+ end
24
+
25
+ it "returns nil if the argument if not a key of the Hash" do
26
+ @h.assoc(:green).should be_nil
27
+ end
28
+ end
29
+ #end
@@ -0,0 +1,21 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe "Hash#clear" do
4
+ it "removes all key, value pairs" do
5
+ h = {1 => 2, 3 => 4}
6
+ h.clear.should equal(h)
7
+ h.should == {}
8
+ end
9
+
10
+ it "does not remove default values" do
11
+ h = {}
12
+ h.default = 5
13
+ h.clear
14
+ h.default.should == 5
15
+
16
+ h = {"a" => 100, "b" => 200}
17
+ h.default = "Go fish"
18
+ h.clear
19
+ h["z"].should == "Go fish"
20
+ end
21
+ end
@@ -0,0 +1,12 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe "Hash#clone" do
4
+ it "copies instance variable but not the objects they refer to" do
5
+ hash = {'key' => 'value'}
6
+
7
+ clone = hash.clone
8
+
9
+ clone.should == hash
10
+ clone.object_id.should_not == hash.object_id
11
+ end
12
+ end
@@ -0,0 +1,6 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe "Hash#default" do
4
+ it "returns the default value" do
5
+ end
6
+ end
@@ -0,0 +1,15 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe "Hash#delete_if" do
4
+ it "yields two arguments: key and value" do
5
+ all_args = []
6
+ {1 => 2, 3 => 4}.delete_if { |*args| all_args << args }
7
+ all_args.should == [[1, 2], [3, 4]]
8
+ end
9
+
10
+ it "removes every entry for which block is true and returns self" do
11
+ h = {:a => 1, :b => 2, :c => 3, :d => 4}
12
+ h.delete_if { |k,v| v % 2 == 1 }.should equal(h)
13
+ h.should == {:b => 2, :d => 4}
14
+ end
15
+ end
@@ -0,0 +1,16 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe "Hash#[]" do
4
+ it "returns the value for the key" do
5
+ obj = Object.new
6
+ h = {1 => 2, 3 => 4, "foo" => "bar", obj => obj, [] => "baz"}
7
+ h[1].should == 2
8
+ h[3].should == 4
9
+ h["foo"].should == "bar"
10
+ h[obj].should == obj
11
+ end
12
+
13
+ it "returns nil as default default value" do
14
+ {0 => 0}[5].should == nil
15
+ end
16
+ end
@@ -0,0 +1,8 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe "Hash#[]=" do
4
+ it "associates the key with the value and return the value" do
5
+ h = {:a => 1}
6
+ (h[:b] = 2).should == 2
7
+ end
8
+ end
@@ -0,0 +1,13 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe "Hash.new" do
4
+ it "creates an empty Hash if passed no arguments" do
5
+ Hash.new.should == {}
6
+ Hash.new.size.should == 0
7
+ end
8
+
9
+ it "creates a new Hash with default object if passed a default argument" do
10
+ Hash.new(5).default.should == 5
11
+ Hash.new({}).default.should == {}
12
+ end
13
+ end
@@ -0,0 +1,7 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe "MatchData#to_a" do
4
+ it "returns an array of matches" do
5
+ /(.)(.)(\d+)(\d)/.match("THX1138").to_a.should == ["HX1138", "H", "X", "113", "8"]
6
+ end
7
+ end
@@ -0,0 +1,12 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe "NilClass#&" do
4
+ it "returns false" do
5
+ (nil & nil).should == false
6
+ (nil & true).should == false
7
+ (nil & false).should == false
8
+ (nil & "").should == false
9
+ (nil & mock('x')).should == false
10
+ end
11
+ end
12
+
@@ -0,0 +1,8 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe "NilClass#inspect" do
4
+ it "returns the string 'nil'" do
5
+ nil.inspect.should == "nil"
6
+ end
7
+ end
8
+
@@ -0,0 +1,8 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe "NilClass#nil?" do
4
+ it "returns true" do
5
+ nil.nil?.should == true
6
+ end
7
+ end
8
+
@@ -0,0 +1,12 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe "NilClass#|" do
4
+ it "returns false if other is nil or false, otherwise true" do
5
+ (nil | nil).should == false
6
+ (nil | true).should == true
7
+ (nil | false).should == false
8
+ (nil | "").should == true
9
+ (nil | 'x').should == true
10
+ end
11
+ end
12
+
@@ -0,0 +1,8 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe "NilClass#to_a" do
4
+ it "returns an empty array" do
5
+ nil.to_a.should == []
6
+ end
7
+ end
8
+
@@ -0,0 +1,12 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe "NilClass#to_f" do
4
+ it "returns 0.0" do
5
+ nil.to_f.should == 0.0
6
+ end
7
+
8
+ it "does not cause NilClass to be coerced to Float" do
9
+ (0.0 == nil).should == false
10
+ end
11
+ end
12
+