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.
- data/.gitignore +13 -0
- data/Gemfile +10 -0
- data/LICENSE +20 -0
- data/README.md +11 -116
- data/Rakefile +126 -0
- data/bin/opal +1 -2
- data/docs/spec_runner.html +16 -0
- data/index.html +434 -0
- data/lib/opal.rb +14 -15
- data/lib/opal/builder.rb +46 -148
- data/lib/opal/command.rb +45 -115
- data/lib/opal/context.rb +139 -78
- data/lib/opal/dependency_builder.rb +34 -0
- data/lib/opal/environment.rb +92 -0
- data/lib/opal/parser/grammar.rb +4915 -0
- data/lib/opal/{parser.y → parser/grammar.y} +430 -284
- data/lib/opal/parser/lexer.rb +1329 -0
- data/lib/opal/parser/parser.rb +1460 -0
- data/lib/opal/parser/scope.rb +140 -0
- data/lib/opal/parser/sexp.rb +17 -0
- data/lib/opal/version.rb +2 -1
- data/opal.gemspec +23 -0
- data/opal.js +3149 -4162
- data/runtime/README.md +25 -0
- data/runtime/corelib/alpha.rb +10 -0
- data/runtime/corelib/array.rb +962 -0
- data/runtime/corelib/basic_object.rb +66 -0
- data/runtime/corelib/boolean.rb +44 -0
- data/runtime/corelib/class.rb +43 -0
- data/runtime/corelib/comparable.rb +25 -0
- data/runtime/corelib/complex.rb +2 -0
- data/runtime/corelib/dir.rb +29 -0
- data/runtime/corelib/enumerable.rb +316 -0
- data/runtime/corelib/enumerator.rb +80 -0
- data/runtime/corelib/error.rb +25 -0
- data/runtime/corelib/file.rb +80 -0
- data/runtime/corelib/hash.rb +503 -0
- data/runtime/corelib/io.rb +44 -0
- data/runtime/corelib/kernel.rb +237 -0
- data/runtime/corelib/load_order +29 -0
- data/runtime/corelib/match_data.rb +37 -0
- data/runtime/corelib/module.rb +171 -0
- data/runtime/corelib/native.rb +50 -0
- data/runtime/corelib/nil_class.rb +47 -0
- data/runtime/corelib/numeric.rb +219 -0
- data/runtime/corelib/object.rb +21 -0
- data/runtime/corelib/proc.rb +42 -0
- data/runtime/corelib/range.rb +38 -0
- data/runtime/corelib/rational.rb +16 -0
- data/runtime/corelib/regexp.rb +63 -0
- data/runtime/corelib/string.rb +185 -0
- data/runtime/corelib/struct.rb +97 -0
- data/runtime/corelib/time.rb +196 -0
- data/runtime/corelib/top_self.rb +7 -0
- data/runtime/gemlib/alpha.rb +5 -0
- data/runtime/gemlib/kernel.rb +17 -0
- data/runtime/gemlib/load_order +2 -0
- data/runtime/kernel/class.js +256 -0
- data/runtime/kernel/debug.js +42 -0
- data/runtime/kernel/init.js +114 -0
- data/runtime/kernel/load_order +5 -0
- data/runtime/kernel/loader.js +151 -0
- data/runtime/kernel/runtime.js +414 -0
- data/runtime/spec/README.md +34 -0
- data/runtime/spec/core/array/allocate_spec.rb +15 -0
- data/runtime/spec/core/array/append_spec.rb +31 -0
- data/runtime/spec/core/array/assoc_spec.rb +29 -0
- data/runtime/spec/core/array/at_spec.rb +38 -0
- data/runtime/spec/core/array/clear_spec.rb +22 -0
- data/runtime/spec/core/array/collect_spec.rb +3 -0
- data/runtime/spec/core/array/compact_spec.rb +42 -0
- data/runtime/spec/core/array/concat_spec.rb +21 -0
- data/runtime/spec/core/array/constructor_spec.rb +24 -0
- data/runtime/spec/core/array/count_spec.rb +11 -0
- data/runtime/spec/core/array/delete_at_spec.rb +31 -0
- data/runtime/spec/core/array/delete_if_spec.rb +24 -0
- data/runtime/spec/core/array/delete_spec.rb +26 -0
- data/runtime/spec/core/array/each_index_spec.rb +33 -0
- data/runtime/spec/core/array/each_spec.rb +11 -0
- data/runtime/spec/core/array/element_reference_spec.rb +136 -0
- data/runtime/spec/core/array/element_set_spec.rb +7 -0
- data/runtime/spec/core/array/empty_spec.rb +10 -0
- data/runtime/spec/core/array/eql_spec.rb +3 -0
- data/runtime/spec/core/array/equal_value_spec.rb +3 -0
- data/runtime/spec/core/array/fetch_spec.rb +26 -0
- data/runtime/spec/core/array/first_spec.rb +54 -0
- data/runtime/spec/core/array/fixtures/classes.rb +8 -0
- data/runtime/spec/core/array/flatten_spec.rb +41 -0
- data/runtime/spec/core/array/include_spec.rb +20 -0
- data/runtime/spec/core/array/insert_spec.rb +59 -0
- data/runtime/spec/core/array/last_spec.rb +57 -0
- data/runtime/spec/core/array/length_spec.rb +3 -0
- data/runtime/spec/core/array/map_spec.rb +3 -0
- data/runtime/spec/core/array/plus_spec.rb +16 -0
- data/runtime/spec/core/array/pop_spec.rb +79 -0
- data/runtime/spec/core/array/push_spec.rb +19 -0
- data/runtime/spec/core/array/rassoc_spec.rb +12 -0
- data/runtime/spec/core/array/reject_spec.rb +54 -0
- data/runtime/spec/core/array/replace_spec.rb +3 -0
- data/runtime/spec/core/array/reverse_each_spec.rb +18 -0
- data/runtime/spec/core/array/reverse_spec.rb +9 -0
- data/runtime/spec/core/array/shared/collect.rb +53 -0
- data/runtime/spec/core/array/shared/eql.rb +19 -0
- data/runtime/spec/core/array/shared/length.rb +6 -0
- data/runtime/spec/core/array/shared/replace.rb +31 -0
- data/runtime/spec/core/class/new_spec.rb +19 -0
- data/runtime/spec/core/enumerable/all_spec.rb +102 -0
- data/runtime/spec/core/enumerable/any_spec.rb +115 -0
- data/runtime/spec/core/enumerable/collect_spec.rb +3 -0
- data/runtime/spec/core/enumerable/count_spec.rb +29 -0
- data/runtime/spec/core/enumerable/detect_spec.rb +3 -0
- data/runtime/spec/core/enumerable/find_spec.rb +3 -0
- data/runtime/spec/core/enumerable/fixtures/classes.rb +26 -0
- data/runtime/spec/core/enumerable/shared/collect.rb +12 -0
- data/runtime/spec/core/enumerable/shared/entries.rb +7 -0
- data/runtime/spec/core/enumerable/shared/find.rb +49 -0
- data/runtime/spec/core/enumerable/to_a_spec.rb +7 -0
- data/runtime/spec/core/false/and_spec.rb +11 -0
- data/runtime/spec/core/false/inspect_spec.rb +7 -0
- data/runtime/spec/core/false/or_spec.rb +11 -0
- data/runtime/spec/core/false/to_s_spec.rb +7 -0
- data/runtime/spec/core/false/xor_spec.rb +11 -0
- data/runtime/spec/core/hash/allocate_spec.rb +15 -0
- data/runtime/spec/core/hash/assoc_spec.rb +29 -0
- data/runtime/spec/core/hash/clear_spec.rb +21 -0
- data/runtime/spec/core/hash/clone_spec.rb +12 -0
- data/runtime/spec/core/hash/default_spec.rb +6 -0
- data/runtime/spec/core/hash/delete_if_spec.rb +15 -0
- data/runtime/spec/core/hash/element_reference_spec.rb +16 -0
- data/runtime/spec/core/hash/element_set_spec.rb +8 -0
- data/runtime/spec/core/hash/new_spec.rb +13 -0
- data/runtime/spec/core/matchdata/to_a_spec.rb +7 -0
- data/runtime/spec/core/nil/and_spec.rb +12 -0
- data/runtime/spec/core/nil/inspect_spec.rb +8 -0
- data/runtime/spec/core/nil/nil_spec.rb +8 -0
- data/runtime/spec/core/nil/or_spec.rb +12 -0
- data/runtime/spec/core/nil/to_a_spec.rb +8 -0
- data/runtime/spec/core/nil/to_f_spec.rb +12 -0
- data/runtime/spec/core/nil/to_i_spec.rb +12 -0
- data/runtime/spec/core/nil/to_s_spec.rb +8 -0
- data/runtime/spec/core/nil/xor_spec.rb +12 -0
- data/runtime/spec/core/numeric/equal_value_spec.rb +11 -0
- data/runtime/spec/core/object/is_a_spec.rb +2 -0
- data/runtime/spec/core/object/shared/kind_of.rb +0 -0
- data/runtime/spec/core/regexp/match_spec.rb +23 -0
- data/runtime/spec/core/regexp/shared/match.rb +11 -0
- data/runtime/spec/core/symbol/to_proc_spec.rb +8 -0
- data/runtime/spec/core/true/and_spec.rb +11 -0
- data/runtime/spec/core/true/inspect_spec.rb +7 -0
- data/runtime/spec/core/true/or_spec.rb +11 -0
- data/runtime/spec/core/true/to_s_spec.rb +7 -0
- data/runtime/spec/core/true/xor_spec.rb +11 -0
- data/runtime/spec/language/alias_spec.rb +25 -0
- data/runtime/spec/language/and_spec.rb +62 -0
- data/runtime/spec/language/array_spec.rb +68 -0
- data/runtime/spec/language/block_spec.rb +105 -0
- data/runtime/spec/language/break_spec.rb +49 -0
- data/runtime/spec/language/case_spec.rb +165 -0
- data/runtime/spec/language/defined_spec.rb +80 -0
- data/runtime/spec/language/ensure_spec.rb +82 -0
- data/runtime/spec/language/fixtures/block.rb +19 -0
- data/runtime/spec/language/fixtures/break.rb +39 -0
- data/runtime/spec/language/fixtures/defined.rb +9 -0
- data/runtime/spec/language/fixtures/ensure.rb +37 -0
- data/runtime/spec/language/fixtures/next.rb +46 -0
- data/runtime/spec/language/fixtures/send.rb +36 -0
- data/runtime/spec/language/fixtures/super.rb +43 -0
- data/runtime/spec/language/hash_spec.rb +43 -0
- data/runtime/spec/language/if_spec.rb +278 -0
- data/runtime/spec/language/loop_spec.rb +32 -0
- data/runtime/spec/language/next_spec.rb +128 -0
- data/runtime/spec/language/or_spec.rb +65 -0
- data/runtime/spec/language/predefined_spec.rb +21 -0
- data/runtime/spec/language/regexp/interpolation_spec.rb +9 -0
- data/runtime/spec/language/regexp_spec.rb +7 -0
- data/runtime/spec/language/send_spec.rb +105 -0
- data/runtime/spec/language/string_spec.rb +4 -0
- data/runtime/spec/language/super_spec.rb +18 -0
- data/runtime/spec/language/symbol_spec.rb +41 -0
- data/runtime/spec/language/undef_spec.rb +16 -0
- data/runtime/spec/language/unless_spec.rb +44 -0
- data/runtime/spec/language/until_spec.rb +137 -0
- data/runtime/spec/language/variables_spec.rb +28 -0
- data/runtime/spec/language/versions/hash_1.9.rb +20 -0
- data/runtime/spec/language/while_spec.rb +175 -0
- data/runtime/spec/library/stringscanner/scan_spec.rb +36 -0
- data/runtime/spec/opal/forwardable/def_instance_delegator_spec.rb +49 -0
- data/runtime/spec/opal/opal/defined_spec.rb +15 -0
- data/runtime/spec/opal/opal/function_spec.rb +11 -0
- data/runtime/spec/opal/opal/native_spec.rb +16 -0
- data/runtime/spec/opal/opal/null_spec.rb +10 -0
- data/runtime/spec/opal/opal/number_spec.rb +11 -0
- data/runtime/spec/opal/opal/object_spec.rb +16 -0
- data/runtime/spec/opal/opal/string_spec.rb +11 -0
- data/runtime/spec/opal/opal/typeof_spec.rb +9 -0
- data/runtime/spec/opal/opal/undefined_spec.rb +10 -0
- data/runtime/spec/opal/true/case_compare_spec.rb +12 -0
- data/runtime/spec/opal/true/class_spec.rb +10 -0
- data/runtime/spec/spec_helper.rb +25 -0
- data/runtime/stdlib/base64.rb +91 -0
- data/runtime/stdlib/date.rb +4 -0
- data/{stdlib → runtime/stdlib}/dev.rb +0 -0
- data/runtime/stdlib/forwardable.rb +33 -0
- data/runtime/stdlib/optparse.rb +0 -0
- data/runtime/stdlib/pp.rb +6 -0
- data/{stdlib → runtime/stdlib}/racc/parser.rb +0 -0
- data/runtime/stdlib/rbconfig.rb +0 -0
- data/runtime/stdlib/si.rb +17 -0
- data/runtime/stdlib/strscan.rb +53 -0
- data/runtime/stdlib/uri.rb +111 -0
- data/runtime/stdlib/uri/common.rb +1014 -0
- data/runtime/stdlib/uri/ftp.rb +261 -0
- data/runtime/stdlib/uri/generic.rb +1599 -0
- data/runtime/stdlib/uri/http.rb +106 -0
- data/runtime/stdlib/uri/https.rb +22 -0
- data/runtime/stdlib/uri/ldap.rb +260 -0
- data/runtime/stdlib/uri/ldaps.rb +20 -0
- data/runtime/stdlib/uri/mailto.rb +280 -0
- data/spec/builder/build_source_spec.rb +52 -0
- data/spec/builder/fixtures/build_source/adam.rb +0 -0
- data/spec/builder/fixtures/build_source/bar/a.rb +0 -0
- data/spec/builder/fixtures/build_source/bar/wow/b.rb +0 -0
- data/spec/builder/fixtures/build_source/bar/wow/cow/c.rb +0 -0
- data/spec/builder/fixtures/build_source/beynon.rb +0 -0
- data/spec/builder/fixtures/build_source/charles.js +0 -0
- data/spec/builder/fixtures/build_source/foo/a.rb +0 -0
- data/spec/builder/fixtures/build_source/foo/b.rb +0 -0
- data/spec/builder/fixtures/build_source/foo/x.js +0 -0
- data/spec/builder/fixtures/build_source/foo/y.js +0 -0
- data/spec/builder/output_path_spec.rb +50 -0
- data/spec/grammar/alias_spec.rb +26 -0
- data/spec/grammar/and_spec.rb +13 -0
- data/spec/grammar/array_spec.rb +22 -0
- data/spec/grammar/attrasgn_spec.rb +28 -0
- data/spec/grammar/begin_spec.rb +38 -0
- data/spec/grammar/block_spec.rb +12 -0
- data/spec/grammar/break_spec.rb +17 -0
- data/spec/grammar/call_spec.rb +58 -0
- data/spec/grammar/class_spec.rb +35 -0
- data/spec/grammar/const_spec.rb +13 -0
- data/spec/grammar/cvar_spec.rb +11 -0
- data/spec/grammar/def_spec.rb +60 -0
- data/spec/grammar/false_spec.rb +17 -0
- data/spec/grammar/file_spec.rb +7 -0
- data/spec/grammar/gvar_spec.rb +13 -0
- data/spec/grammar/hash_spec.rb +17 -0
- data/spec/grammar/iasgn_spec.rb +9 -0
- data/spec/grammar/if_spec.rb +26 -0
- data/spec/grammar/iter_spec.rb +59 -0
- data/spec/grammar/ivar_spec.rb +9 -0
- data/spec/grammar/lasgn_spec.rb +8 -0
- data/spec/grammar/line_spec.rb +8 -0
- data/spec/grammar/lvar_spec.rb +38 -0
- data/spec/grammar/module_spec.rb +27 -0
- data/spec/grammar/nil_spec.rb +17 -0
- data/spec/grammar/not_spec.rb +27 -0
- data/spec/grammar/op_asgn1_spec.rb +23 -0
- data/spec/grammar/op_asgn2_spec.rb +23 -0
- data/spec/grammar/or_spec.rb +13 -0
- data/spec/grammar/return_spec.rb +17 -0
- data/spec/grammar/sclass_spec.rb +20 -0
- data/spec/grammar/self_spec.rb +17 -0
- data/spec/grammar/str_spec.rb +96 -0
- data/spec/grammar/super_spec.rb +20 -0
- data/spec/grammar/true_spec.rb +17 -0
- data/spec/grammar/undef_spec.rb +15 -0
- data/spec/grammar/unless_spec.rb +13 -0
- data/spec/grammar/while_spec.rb +15 -0
- data/spec/grammar/xstr_spec.rb +116 -0
- data/spec/grammar/yield_spec.rb +20 -0
- data/spec/spec_helper.rb +9 -0
- metadata +346 -21
- data/lib/opal/bundle.rb +0 -34
- data/lib/opal/lexer.rb +0 -902
- data/lib/opal/nodes.rb +0 -2150
- data/lib/opal/parser.rb +0 -4894
- data/lib/opal/rake/bundle_task.rb +0 -63
- data/opal-parser.js +0 -8343
- data/stdlib/strscan.rb +0 -52
- data/templates/init/Rakefile +0 -7
- data/templates/init/index.html +0 -17
- data/templates/init/lib/__NAME__.rb +0 -2
|
@@ -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,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,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,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,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,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,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,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,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
|
+
|