1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
describe :string_to_sym, :shared => true do
it "returns the symbol corresponding to self" do
"Koala".send(@method).should == :Koala
'cat'.send(@method).should == :cat
'@cat'.send(@method).should == :@cat
'cat and dog'.send(@method).should == :"cat and dog"
"abc=".send(@method).should == :abc=
end
it "special cases +(binary) and -(binary)" do
"+(binary)".to_sym.should == :+
"-(binary)".to_sym.should == :-
end
ruby_version_is ""..."1.9" do
it "special cases !@ and ~@" do
"!@".to_sym.should == :"!"
"~@".to_sym.should == :~
end
it "special cases !(unary) and ~(unary)" do
"!(unary)".to_sym.should == :"!"
"~(unary)".to_sym.should == :~
end
it "special cases +(unary) and -(unary)" do
"+(unary)".to_sym.should == :"+@"
"-(unary)".to_sym.should == :"-@"
end
it "raises an ArgumentError when self can't be converted to symbol" do
lambda { "".send(@method) }.should raise_error(ArgumentError)
lambda { "foo\x00bar".send(@method) }.should raise_error(ArgumentError)
end
end
ruby_version_is "1.9" do
it "does not special case certain operators" do
[ ["!@", :"!@"],
["~@", :"~@"],
["!(unary)", :"!(unary)"],
["~(unary)", :"~(unary)"],
["+(unary)", :"+(unary)"],
["-(unary)", :"-(unary)"]
].should be_computed_by(:to_sym)
end
end
end
|