Backport #2449
Updated by jeremyevans0 (Jeremy Evans) almost 5 years ago
=begin The spec for StringIO#ungetc() states: "Pushing back behind the beginning of the buffer string is not possible. Nothing will be done if such an attempt is made.". But: ruby -rstringio -e "io = StringIO.new(''); io.ungetc(?1); io.ungetc(?2); p io.gets" will print "21" instead of nil. Please also note that rbx and JRuby correctly return nil. Also, there is a stringio test that actually enforses the wrong behavior (test_ungetc), but with the comment: bug? :) Here's how different MRI versions behave: Looks like MRI 1.8.6 is the correct one: Z:\work\ruby18-dev.git>pik ruby -rstringio -e "io=StringIO.new('');io.ungetc(?1);io.ungetc(?2); p io.gets" ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32] nil ruby 1.8.6 (2009-08-04 patchlevel 383) [i386-mingw32] "21" ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-cygwin] nil ruby 1.8.7 (2009-06-12 patchlevel 174) [i386-mswin32] "21" ruby 1.9.0 (2008-06-20 revision 17482) [i386-mswin32] "21" ruby 1.9.1p0 (2009-01-30 revision 21907) [i386-mswin32] "21" ruby 1.9.1p0 (2009-01-30 revision 21907) [x64-mswin64_80] "21" ruby 1.9.1p129 (2009-05-12 revision 23412) [i386-mswin32] "21" ruby 1.9.2dev (2009-07-18) [i386-mswin32] "21" ruby 1.9.2dev (2009-11-12 trunk 25723) [i386-mingw32] "21" =end