aboutsummaryrefslogtreecommitdiffstats
path: root/spec/rubyspec/core/hash/shared/to_s.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/rubyspec/core/hash/shared/to_s.rb')
-rw-r--r--spec/rubyspec/core/hash/shared/to_s.rb42
1 files changed, 41 insertions, 1 deletions
diff --git a/spec/rubyspec/core/hash/shared/to_s.rb b/spec/rubyspec/core/hash/shared/to_s.rb
index 7ef2c207d4..0afe605826 100644
--- a/spec/rubyspec/core/hash/shared/to_s.rb
+++ b/spec/rubyspec/core/hash/shared/to_s.rb
@@ -15,7 +15,7 @@ describe :hash_to_s, shared: true do
h.send(@method).should == str
end
- it "calls inspect on keys and values" do
+ it "calls #inspect on keys and values" do
key = mock('key')
val = mock('val')
key.should_receive(:inspect).and_return('key')
@@ -24,6 +24,46 @@ describe :hash_to_s, shared: true do
{ key => val }.send(@method).should == '{key=>val}'
end
+ it "does not call #to_s on a String returned from #inspect" do
+ str = "abc"
+ str.should_not_receive(:to_s)
+
+ { a: str }.send(@method).should == '{:a=>"abc"}'
+ end
+
+ it "calls #to_s on the object returned from #inspect if the Object isn't a String" do
+ obj = mock("Hash#inspect/to_s calls #to_s")
+ obj.should_receive(:inspect).and_return(obj)
+ obj.should_receive(:to_s).and_return("abc")
+
+ { a: obj }.send(@method).should == "{:a=>abc}"
+ end
+
+ it "does not call #to_str on the object returned from #inspect when it is not a String" do
+ obj = mock("Hash#inspect/to_s does not call #to_str")
+ obj.should_receive(:inspect).and_return(obj)
+ obj.should_not_receive(:to_str)
+
+ { a: obj }.send(@method).should =~ /^\{:a=>#<MockObject:0x[0-9a-f]+>\}$/
+ end
+
+ it "does not call #to_str on the object returned from #to_s when it is not a String" do
+ obj = mock("Hash#inspect/to_s does not call #to_str on #to_s result")
+ obj.should_receive(:inspect).and_return(obj)
+ obj.should_receive(:to_s).and_return(obj)
+ obj.should_not_receive(:to_str)
+
+ { a: obj }.send(@method).should =~ /^\{:a=>#<MockObject:0x[0-9a-f]+>\}$/
+ end
+
+ it "does not swallow exceptions raised by #to_s" do
+ obj = mock("Hash#inspect/to_s does not swallow #to_s exceptions")
+ obj.should_receive(:inspect).and_return(obj)
+ obj.should_receive(:to_s).and_raise(Exception)
+
+ lambda { { a: obj }.send(@method) }.should raise_error(Exception)
+ end
+
it "handles hashes with recursive values" do
x = {}
x[0] = x