The "output" matcher from the snippet below swaps stdout with IOStub in order 
to be able to capture the output of the block. Swapping IOStub back with real 
stdout will not work as you will not know what the block printed...

    lambda { $stdout.print(o, o2) }.should output("#{o.to_s}#{o2.to_s}#{$\}")

One hybrid way to fix this would be for the "output" matcher to take an IO 
object as a second optional parameter that is used to capture the output intead 
of using IOStub. Then print_spec.rb could provide a StringIO object. Currently, 
print_spec.rb is busted and does not test what it is supposed to. Taking a 
dependency on a stdlib (stringio) would not be worse thing in this case.

I do not feel strongly about fixing this right now...
________________________________________
From: [email protected] [[email protected]] 
On Behalf Of Jim Deville [[email protected]]
Sent: Saturday, May 16, 2009 4:05 PM
To: [email protected]
Subject: Re: [Ironruby-core] Code Review: Fix for File.print misbehavior

I would be opposed to making the MSpec runner depend on any more stdlibs. I 
would suggest making a helper that swaps the IOStub with the real stdout for 
the duration of a block.

JD

....there is no try
Sent from my phone. Please excuse typos and txtspk.

-----Original Message-----
From: Shri Borde <[email protected]>
Sent: May 16, 2009 3:11 PM
To: [email protected] <[email protected]>
Subject: Re: [Ironruby-core] Code Review: Fix for File.print misbehavior


The problem is because of mspec itself. In 
External.LCA_RESTRICTED\Languages\IronRuby\mspec\mspec\lib\mspec\matchers\output.rb,
 the code sets $stdout to a helper class (IOStub) so that it can capture the 
output. However, what this means is that calls to $stdout.print that the test 
makes now go to IOStub#print rather than to the real implementation of 
IO#print, and this masks the bug.

A better solution would be to use StringIO in matchers\output.rb rather than 
IOStub. If you are included to pursue this (which would be great), you could 
try the change and/or send email to http://groups.google.com/group/rubyspec to 
discuss the change. However, since this is a preexisting issue, you could leave 
it for another day if you want.

So consider your change code-reviewed, and you can chose separately to pursue 
(or not) the issue with matchers\output.rb.

-----Original Message-----
From: [email protected] 
[mailto:[email protected]] On Behalf Of Shay Friedman
Sent: Saturday, May 16, 2009 12:46 AM
To: [email protected]
Subject: Re: [Ironruby-core] Code Review: Fix for File.print misbehavior

I couldn't follow the code exactly but what I did find, was that this
test never reached the code inside IOOps.Print.
The behavior is really strange, I tried to print the value on the screen
and the value were really incorrect (the $\ delimiter is added after
each argument) but the $stdout.print call inside the lambda expression
got it correctly...

I did that:

  it "writes each obj.to_s to the stream and appends $\\ (if any) given
multiple

objects" do
    o, o2 = Object.new, Object.new
    def o.to_s(); 'o'; end
    def o2.to_s(); 'o2'; end

    puts $stdout.print(o, o2)

    lambda { $stdout.print(o, o2) }.should
output("#{o.to_s}#{o2.to_s}#{$\}")
  end


And it wrote "o->o2->nil" on the screen... But when I changed the output
it to "123" the test failed and told me:
Expected:
  $stdout: "123"
      got:
  $stdout: "oo2->"

So I'm really confused... like I said, my breakpoint inside the print
method never gets hit so I can't really tell which "print" method is
invoked...

Shay.
--
Posted via http://www.ruby-forum.com/.
_______________________________________________
Ironruby-core mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/ironruby-core

_______________________________________________
Ironruby-core mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/ironruby-core

_______________________________________________
Ironruby-core mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/ironruby-core
_______________________________________________
Ironruby-core mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/ironruby-core

Reply via email to