Hi, This was one of the action items from the previous "Design Meeting": To provide a full list of RubySpec failures against Ruby 1.8.7. The quick intro on Rubyspecs is here: http://blog.emptyway.com/2008/04/06/the-rubyspecs-quick-starting-guide/ The environment: - Ubuntu Linux 7.10 x32. - ruby -v: ruby 1.8.7 (2008-04-23 patchlevel 0) [i686-linux] (recent MRI built from 1_8_7 branch today) Notes: 1. All Kernel specs were removed from the test run, since Ruby 1.8.7 *segfaults* on them, as was reported to ruby-core some time ago. 2. Those tests that fail on Ruby 1.8.6 patchlevel 114, are removed (the number of such tests is small - about 5 or so) 3. All the specs listed below PASS on Ruby 1.8.6pl114. 4. The more detailed list, including the stack traces is here: http://vvs.emptyway.com/rubyspecs-vs-MRI-187-full.txt And here's the list of the failed specs: 1) Array#flatten returns subclass instance for Array subclasses FAILED Expected Array to equal ArraySpecs::MyArray 2) Array#slice! does (not?) expand array with indices out of bounds FAILED Expected [1, 2, nil, nil, nil, nil] to equal [1, 2, nil, nil, nil, nil, nil, nil] 3) Bignum#div returns self divided by other FAILED Expected 2147483648.5 to be within +/- 3.0e-05 of 2147483648 4) Bignum#div does NOT raise ZeroDivisionError if other is zero and is a Float ERROR Infinity 5) Bignum#divmod raises a FloatDomainError when the given argument is 0 and a Float FAILED Expected FloatDomainError (NaN) but no exception was raised 6) Dir#each raises an IOError when called on a closed Dir instance FAILED Expected IOError but no exception was raised 7) Dir.foreach raises a SystemCallError if passed a nonexistent directory FAILED Expected SystemCallError but no exception was raised 8) Dir#path raises an IOError when called on a closed Dir instance FAILED Expected IOError but no exception was raised 9) Enumerable#partition throws LocalJumpError if called without a block FAILED Expected LocalJumpError but no exception was raised 10) Enumerable#reject raises a LocalJumpError if no block is given FAILED Expected LocalJumpError but no exception was raised 11) ENV#delete_if raises LocalJumpError if no block given FAILED Expected LocalJumpError but no exception was raised 12) ENV#each_key raises LocalJumpError if no block given FAILED Expected LocalJumpError but no exception was raised 13) ENV#each_pair raises LocalJumpError if no block given FAILED Expected LocalJumpError but no exception was raised 14) ENV#each raises LocalJumpError if no block given FAILED Expected LocalJumpError but no exception was raised 15) ENV#each_value raises LocalJumpError if no block given FAILED Expected LocalJumpError but no exception was raised 16) ENV#reject! raises on no block given FAILED Expected LocalJumpError but no exception was raised 17) ENV#reject raises on no block given FAILED Expected LocalJumpError but no exception was raised 18) ENV#select raises when no block is given FAILED Expected LocalJumpError but no exception was raised 19) Fixnum#& raises a RangeError if passed a Float out of Fixnum range FAILED Expected RangeError but no exception was raised 20) Fixnum#& raises a RangeError when the given argument is out of range of Integer FAILED Expected RangeError but no exception was raised 21) Fixnum#| raises a RangeError if passed a Float out of Fixnum range FAILED Expected RangeError but no exception was raised 22) Fixnum#| raises a RangeError when the given argument is out of range of Integer FAILED Expected RangeError but no exception was raised 23) Fixnum#^ raises a RangeError if passed a Float out of Fixnum range FAILED Expected RangeError but no exception was raised 24) Fixnum#^ raises a RangeError when the given argument is out of range of Integer FAILED Expected RangeError but no exception was raised 25) Fixnum#divmod raises a FloatDomainError when the given argument is 0 and a Float FAILED Expected FloatDomainError but no exception was raised 26) Fixnum#[] raises a RangeError when the given argument is out of range of Integer FAILED Expected RangeError but no exception was raised 27) Float#divmod raises FloatDomainError if other is zero FAILED Expected FloatDomainError but no exception was raised 28) Hash#delete_if raises a LocalJumpError when called on a non-empty hash without a block FAILED Expected LocalJumpError but no exception was raised 29) Hash#delete_if does not raise a LocalJumpError when called on an empty hash without a block FAILED Expected #<Enumerable::Enumerator:0xb7cad0e8> to equal {} 30) Hash#each_key raises a LocalJumpError when called on a non-empty hash without a block FAILED Expected LocalJumpError but no exception was raised 31) Hash#each_key does not raise a LocalJumpError when called on an empty hash without a block FAILED Expected #<Enumerable::Enumerator:0xb7c9eca0> to equal {} 32) Hash#each_pair raises a LocalJumpError when called on a non-empty hash without a block FAILED Expected LocalJumpError but no exception was raised 33) Hash#each_pair does not raise a LocalJumpError when called on an empty hash without a block FAILED Expected #<Enumerable::Enumerator:0xb7c96b7c> to equal {} 34) Hash#each raises a LocalJumpError when called on a non-empty hash without a block FAILED Expected LocalJumpError but no exception was raised 35) Hash#each does not raise a LocalJumpError when called on an empty hash without a block FAILED Expected #<Enumerable::Enumerator:0xb7c8aed0> to equal {} 36) Hash#each_value raises a LocalJumpError when called on a non-empty hash without a block FAILED Expected LocalJumpError but no exception was raised 37) Hash#each_value does not raise a LocalJumpError when called on an empty hash without a block FAILED Expected #<Enumerable::Enumerator:0xb7c828ac> to equal {} 38) Hash.[] does not call to_hash FAILED Expected ArgumentError but no exception was raised 39) Hash#reject raises a LocalJumpError when called on a non-empty hash without a block FAILED Expected LocalJumpError but no exception was raised 40) Hash#reject does not raise a LocalJumpError when called on an empty hash without a block FAILED Expected #<Enumerable::Enumerator:0xb7bee0f8> to equal {} 41) Hash#reject! raises a LocalJumpError when called on a non-empty hash without a block FAILED Expected LocalJumpError but no exception was raised 42) Hash#reject! does not raise a LocalJumpError when called on an empty hash without a block FAILED Expected #<Enumerable::Enumerator:0xb7be9aa8> to equal {} 43) Hash#select raises a LocalJumpError when called on a non-empty hash without a block FAILED Expected LocalJumpError but no exception was raised 44) Hash#select does not raise a LocalJumpError when called on an empty hash without a block FAILED Expected #<Enumerable::Enumerator:0xb7bd9e00> to equal {} 45) IO#each_byte raises IOError on closed stream FAILED Expected IOError but no exception was raised 46) IO#each_line raises IOError on closed stream FAILED Expected IOError but no exception was raised 47) IO#each raises IOError on closed stream FAILED Expected IOError but no exception was raised 48) MatchData#select yields the contents of the match array to a block FAILED Expected [] to equal ["HX1138", "H", "X", "113", "8"] 49) Module#remove_method raises a NameError when attempting to remove method further up the inheritance tree FAILED Expected NameError but no exception was raised 50) Module#remove_method raises a NameError when attempting to remove a missing method FAILED Expected NameError but no exception was raised 51) Numeric#step raises an ArgumentError if not passed not passed Numeric types in the correct range FAILED Expected ArgumentError but no exception was raised 52) Numeric#step raises a LocalJumpError if not provided a block FAILED Expected LocalJumpError but no exception was raised 53) Range#step passes each nth element to the block ERROR step can't be 0 54) Range#step raises TypeError if the argument is non-numeric FAILED Expected TypeError but no exception was raised 55) Range#step coerces the argument to intger by invoking to_int ERROR MockObject can't be coerced into Fixnum 56) String#each_line raises a TypeError when the separator can't be converted to a string FAILED Expected TypeError but no exception was raised 57) String#each raises a TypeError when the separator can't be converted to a string FAILED Expected TypeError but no exception was raised 58) String#hex treats leading characters of self as a string of hex digits FAILED Expected 10 to equal 171 59) String#% supports negative bignums by prefixing the value with zeros FAILED Expected "..79228162495817593519834398715" to equal "0079228162495817593519834398715" 60) String#oct treats leading characters of self as a string of oct digits FAILED Expected 7 to equal 59 61) String#rindex with object tries to convert obj to a string via to_str FAILED Expected Exception but no exception was raised 62) Struct#each_pair fails if not passed a block FAILED Expected LocalJumpError but no exception was raised 63) Struct#each fails if not passed a block FAILED Expected LocalJumpError but no exception was raised 64) Date#parse(.) can parse a MM-DD-YYYY string into a Date object FAILED Expected 1 to equal 10 65) Date#parse(.) can parse a MM-DD-YY string into a Date object FAILED Expected 10 to equal 7 66) Date#parse(.) can parse a MM-DD-YY string into a Date object using the year digits as 20XX FAILED Expected 2010 to equal 2007 67) ERB.new compile eRuby script into ruby code when trim mode is 0 or not specified FAILED Expected "_erbout = ''; _erbout.concat \"<ul>\\n\"\n; for item in list ; _erbout.concat \"\\n \"\n; if item ; _erbout.concat \"\\n <li>\"\n; _erbout.concat(( item ).to_s); _erbout.concat \"\\n \"\n; end ; _erbout.concat \"\\n\"\n; end ; _erbout.concat \"\\n</ul>\\n\"\n\n; _erbout" to equal "_erbout = ''; _erbout.concat \"<ul>\\n\"\n for item in list ; _erbout.concat \"\\n\"\n_erbout.concat \" \"; if item ; _erbout.concat \"\\n\"\n_erbout.concat \" <li>\"; _erbout.concat(( item ).to_s); _erbout.concat \"\\n\"\n_erbout.concat \" \"; end ; _erbout.concat \"\\n\"\n end ; _erbout.concat \"\\n\"\n_erbout.concat \"</ul>\\n\"\n_erbout" 68) ERB.new remove "\n" when trim_mode is 1 or '>' FAILED Expected "_erbout = ''; _erbout.concat \"<ul>\\n\"\n; for item in list \n_erbout.concat \" \"; if item \n_erbout.concat \" <li>\"; _erbout.concat(( item ).to_s)\n_erbout.concat \" \"; end \n end \n_erbout.concat \"</ul>\\n\"\n; _erbout" to equal "_erbout = ''; _erbout.concat \"<ul>\\n\"\n for item in list \n_erbout.concat \" \"; if item \n_erbout.concat \" <li>\"; _erbout.concat(( item ).to_s)\n_erbout.concat \" \"; end \n end \n_erbout.concat \"</ul>\\n\"\n_erbout" 69) ERB.new remove spaces at beginning of line and "\n" when trim_mode is 2 or '<>' FAILED Expected "_erbout = ''; _erbout.concat \"<ul>\\n\"\n; for item in list \n_erbout.concat \" \"; if item ; _erbout.concat \"\\n\"\n; _erbout.concat \" <li>\"; _erbout.concat(( item ).to_s); _erbout.concat \"\\n\"\n; _erbout.concat \" \"; end ; _erbout.concat \"\\n\"\n; end \n_erbout.concat \"</ul>\\n\"\n; _erbout" to equal "_erbout = ''; _erbout.concat \"<ul>\\n\"\n for item in list \n_erbout.concat \" \"; if item ; _erbout.concat \"\\n\"\n_erbout.concat \" <li>\"; _erbout.concat(( item ).to_s); _erbout.concat \"\\n\"\n_erbout.concat \" \"; end ; _erbout.concat \"\\n\"\n end \n_erbout.concat \"</ul>\\n\"\n_erbout" 70) ERB.new removes spaces arount '<%- -%>' when trim_mode is '-' FAILED Expected "_erbout = ''; _erbout.concat \"<ul>\\n\"\n; for item in list \n if item \n_erbout.concat \" <li>\"; _erbout.concat(( item ).to_s)\n end \n end \n_erbout.concat \"</ul>\\n\"\n; _erbout" to equal "_erbout = ''; _erbout.concat \"<ul>\\n\"\n for item in list \n if item \n_erbout.concat \" <li>\"; _erbout.concat(( item ).to_s)\n end \n end \n_erbout.concat \"</ul>\\n\"\n_erbout" 71) ERB.new not support '<%-= expr %> even when trim_mode is '-' FAILED Expected "_erbout = ''; _erbout.concat \"<p>\\n \"\n; _erbout.concat(( expr ).to_s)\n= expr \n_erbout.concat \"</p>\\n\"\n; _erbout" to equal "_erbout = ''; _erbout.concat \"<p>\\n\"\n_erbout.concat \" \"; _erbout.concat(( expr ).to_s)\n= expr \n_erbout.concat \"</p>\\n\"\n_erbout" 72) ERB.new regard lines starting with '%' as '<% ... %>' when trim_mode is '%' FAILED Expected "_erbout = ''; _erbout.concat \"<ul>\\n\"\n; for item in list\n if item\n_erbout.concat \" <li>\"; _erbout.concat(( item ).to_s); _erbout.concat \"\\n \"\n; end ; _erbout.concat \"\\n\"\n; end ; _erbout.concat \"\\n</ul>\\n%\"\n\n; \n_erbout" to equal "_erbout = ''; _erbout.concat \"<ul>\\n\"\nfor item in list\n if item\n_erbout.concat \" <li>\"; _erbout.concat(( item ).to_s); _erbout.concat \"\\n\"\n_erbout.concat \" \"; end ; _erbout.concat \"\\n\"\n end ; _erbout.concat \"\\n\"\n_erbout.concat \"</ul>\\n\"\n_erbout.concat \"%%\\n\"\n_erbout" 73) ERB.new regard lines starting with '%' as '<% ... %>' and remove "\n" when trim_mode is '%>' FAILED Expected "_erbout = ''; _erbout.concat \"<ul>\\n\"\n; for item in list\n if item\n_erbout.concat \" <li>\"; _erbout.concat(( item ).to_s)\n_erbout.concat \" \"; end \n end \n_erbout.concat \"</ul>\\n\"\n; _erbout.concat \"%%\\n\"\n; _erbout" to equal "_erbout = ''; _erbout.concat \"<ul>\\n\"\nfor item in list\n if item\n_erbout.concat \" <li>\"; _erbout.concat(( item ).to_s)\n_erbout.concat \" \"; end \n end \n_erbout.concat \"</ul>\\n\"\n_erbout.concat \"%%\\n\"\n_erbout" 74) ERB.new regard lines starting with '%' as '<% ... %>' and remove "\n" when trim_mode is '%<>' FAILED Expected "_erbout = ''; _erbout.concat \"<ul>\\n\"\n; for item in list\n if item\n_erbout.concat \" <li>\"; _erbout.concat(( item ).to_s); _erbout.concat \"\\n\"\n; _erbout.concat \" \"; end ; _erbout.concat \"\\n\"\n; end \n_erbout.concat \"</ul>\\n\"\n; _erbout.concat \"%%\\n\"\n; _erbout" to equal "_erbout = ''; _erbout.concat \"<ul>\\n\"\nfor item in list\n if item\n_erbout.concat \" <li>\"; _erbout.concat(( item ).to_s); _erbout.concat \"\\n\"\n_erbout.concat \" \"; end ; _erbout.concat \"\\n\"\n end \n_erbout.concat \"</ul>\\n\"\n_erbout.concat \"%%\\n\"\n_erbout" 75) ERB.new regard lines starting with '%' as '<% ... %>' and spaces around '<%- -%>' when trim_mode is '%-' FAILED Expected "_erbout = ''; _erbout.concat \"<ul>\\n\"\n; for item in list\n if item\n_erbout.concat \" <li>\"; _erbout.concat(( item ).to_s)\n end \n end \n_erbout.concat \"</ul>\\n\"\n; _erbout.concat \"%%\\n\"\n; _erbout" to equal "_erbout = ''; _erbout.concat \"<ul>\\n\"\nfor item in list\n if item\n_erbout.concat \" <li>\"; _erbout.concat(( item ).to_s)\n end \n end \n_erbout.concat \"</ul>\\n\"\n_erbout.concat \"%%\\n\"\n_erbout" 76) ERB.new change '_erbout' variable name FAILED Expected "buf = ''; buf.concat \"<ul>\\n\"\n; for item in list ; buf.concat \"\\n \"\n; if item ; buf.concat \"\\n <li>\"\n; buf.concat(( item ).to_s); buf.concat \"\\n \"\n; end ; buf.concat \"\\n\"\n; end ; buf.concat \"\\n</ul>\\n\"\n\n; buf" to equal "buf = ''; buf.concat \"<ul>\\n\"\n for item in list ; buf.concat \"\\n\"\nbuf.concat \" \"; if item ; buf.concat \"\\n\"\nbuf.concat \" <li>\"; buf.concat(( item ).to_s); buf.concat \"\\n\"\nbuf.concat \" \"; end ; buf.concat \"\\n\"\n end ; buf.concat \"\\n\"\nbuf.concat \"</ul>\\n\"\nbuf" 77) ERB.new ignore '<%# ... %>' FAILED Expected "_erbout = ''; _erbout.concat \"\\n<b>\"\n; _erbout.concat \"</b>\\n\"\n; _erbout.concat \"\\n\"\n; _erbout" to equal "_erbout = ''; _erbout.concat \"\\n\"\n_erbout.concat \"<b>\"; _erbout.concat \"</b>\\n\"\n_erbout.concat \"\\n\"\n_erbout" 78) ERB.new convert '<%% ... %%>' into '<% ... %>' FAILED Expected "_erbout = ''; _erbout.concat \"<% for item in list %>\\n<b><%= item %></b>\\n<% end %%>\\n\"\n\n\n; _erbout" to equal "_erbout = ''; _erbout.concat \"<% for item in list %>\\n\"\n_erbout.concat \"<b><%= item %></b>\\n\"\n_erbout.concat \"<% end %%>\\n\"\n_erbout" 79) ERB#src return compiled ruby code FAILED Expected "_erbout = ''; _erbout.concat \"<ul>\\n\"\n; for item in list ; _erbout.concat \"\\n<li>\"\n; _erbout.concat(( item ).to_s); _erbout.concat \"</li>\\n\"\n; end ; _erbout.concat \"\\n</ul>\\n\"\n\n; _erbout" to equal "_erbout = ''; _erbout.concat \"<ul>\\n\"\n for item in list ; _erbout.concat \"\\n\"\n_erbout.concat \"<li>\"; _erbout.concat(( item ).to_s); _erbout.concat \"</li>\\n\"\n end ; _erbout.concat \"\\n\"\n_erbout.concat \"</ul>\\n\"\n_erbout" 80) Matrix#/ returns the result of dividing self by another Matrix FAILED Expected Matrix[[0, 0], [0, 0]] to equal Matrix[[-2, 0], [-4, 0]] Finished in 11.475459 seconds 1842 files, 6289 examples, 19847 expectations, 77 failures, 3 errors Thanks, --Vladimir
on 24.04.2008 12:06
on 24.04.2008 12:22
Vladimir Sizikov wrote: > 1. All Kernel specs were removed from the test run, since Ruby 1.8.7 > *segfaults* on them, > as was reported to ruby-core some time ago. See [ruby-core:16238] Guy Decoux
on 24.04.2008 12:38
Vladimir Sizikov wrote: Well I've a problem with some tests, for example > 45) IO#each_byte raises IOError on closed stream FAILED > Expected IOError but no exception was raised it work as expected if you write it like this vgs% ./ruby -ve 'a = File.open("ruby") {|f| f}; a.each_byte {}' ruby 1.8.7 (2008-04-23 patchlevel 5000) [i686-linux] -e:1:in `each_byte': closed stream (IOError) from -e:1 vgs% but with vgs% ./ruby -ve 'a = File.open("ruby") {|f| f}; b = a.each_byte; p b; b.next' ruby 1.8.7 (2008-04-23 patchlevel 5000) [i686-linux] #<Enumerable::Enumerator:0xb7d39fe8> /home/ts/local/r18/lib/ruby/1.8/generator.rb:188: warning: method redefined; discarding old next /home/ts/local/r18/lib/ruby/1.8/generator.rb:200: warning: method redefined; discarding old rewind /home/ts/local/r18/lib/ruby/1.8/generator.rb:72:in `each_byte': closed stream (IOError) from /home/ts/local/r18/lib/ruby/1.8/generator.rb:72:in `each' from /home/ts/local/r18/lib/ruby/1.8/generator.rb:72:in `initialize' from /home/ts/local/r18/lib/ruby/1.8/generator.rb:83:in `call' from /home/ts/local/r18/lib/ruby/1.8/generator.rb:83:in `initialize' from /home/ts/local/r18/lib/ruby/1.8/generator.rb:170:in `new' from /home/ts/local/r18/lib/ruby/1.8/generator.rb:170:in `__generator' from /home/ts/local/r18/lib/ruby/1.8/generator.rb:189:in `next' from -e:1 vgs% ruby give an error but only when you call #next *not* when it return an Enumerator object. Guy Decoux
on 24.04.2008 13:43
Hi, On Thu, Apr 24, 2008 at 12:36 PM, ts <decoux@moulon.inra.fr> wrote: > Vladimir Sizikov wrote: > > Well I've a problem with some tests, for example Sure, that's great! :) The whole point was to review the failures and figure out what to do with them. If some are due to non-perfect test themselves, the tests will be fixed. More below. > > 45) IO#each_byte raises IOError on closed stream FAILED > > Expected IOError but no exception was raised > > it work as expected if you write it like this > > vgs% ./ruby -ve 'a = File.open("ruby") {|f| f}; a.each_byte {}' > ruby 1.8.7 (2008-04-23 patchlevel 5000) [i686-linux] > -e:1:in `each_byte': closed stream (IOError) > from -e:1 > vgs% Yeah, I see. MRI 1.8.7 returns enumerator out of those each-like methods if block is not provided. Understood. So, I've updated the RubySpecs to make sure the block is provided: http://git.rubini.us/?p=code;a=commit;h=0ab639af500d947c5b5feb1d8f00f5fbc97a0edc This resolves 3 IO failures. Thanks, --Vladimir
on 24.04.2008 14:18
Vladimir Sizikov wrote:
> This resolves 3 IO failures.
Well I've not looked at all tests but I expect that there is the
same problem for other tests
For example
Enumerable#partition throws LocalJumpError if called without a block
FAILED
Expected LocalJumpError but no exception was raised
if this is this test, it's normal
vgs% ruby -e 'class A; include Enumerable end; p A.new.partition'
#<Enumerable::Enumerator:0xb7d43098>
vgs%
Guy Decoux
on 25.04.2008 01:56
In article <3454c9680804240301t184cd2d2ke5b6d6ce1285f5f1@mail.gmail.com>, "Vladimir Sizikov" <vsizikov@gmail.com> writes: > The quick intro on Rubyspecs is here: > http://blog.emptyway.com/2008/04/06/the-rubyspecs-quick-starting-guide/ I occur following problem. % tar xfz code-9b52edbb14ff2fc18faa429daf4ceaff5b87db11.tar.gz % cd code % bin/mspec -t ruby-1.8 spec/ruby/1.8 shotgun/rubinius:100:in `exec': No such file or directory - /home/ruby/spec/code/shotgun/rubinius.local.bin (Errno::ENOENT) from shotgun/rubinius:100:in `<main>' Is it needs to build rubinius? Note that "ruby" command is Ruby 1.9 and "ruby-1.8" is Ruby 1.8 on my environment. % ruby -v ruby 1.9.0 (2008-04-23 revision 16172) [i686-linux] % ruby-1.8 -v ruby 1.8.7 (2008-04-20 patchlevel 5000) [i686-linux]
on 25.04.2008 04:53
Tanaka Akira wrote: > % bin/mspec -t ruby-1.8 spec/ruby/1.8 > shotgun/rubinius:100:in `exec': No such file or directory - /home/ruby/spec/code/shotgun/rubinius.local.bin (Errno::ENOENT) > from shotgun/rubinius:100:in `<main>' > > Is it needs to build rubinius? It should not; try specifying the full path instead. I do that for JRuby frequently. - Charlie
on 25.04.2008 04:54
Tanaka Akira wrote: > % bin/mspec -t ruby-1.8 spec/ruby/1.8 > shotgun/rubinius:100:in `exec': No such file or directory - /home/ruby/spec/code/shotgun/rubinius.local.bin (Errno::ENOENT) > from shotgun/rubinius:100:in `<main>' > > Is it needs to build rubinius? Also worth mentioning that once the specs are moved to their own repository, I expect the default target impl would be C Ruby/MRI rather than Rubinius. - Charlie
on 25.04.2008 09:55
Tanaka-san, On Fri, Apr 25, 2008 at 1:56 AM, Tanaka Akira <akr@fsij.org> wrote: > % tar xfz code-9b52edbb14ff2fc18faa429daf4ceaff5b87db11.tar.gz > % cd code > % bin/mspec -t ruby-1.8 spec/ruby/1.8 > shotgun/rubinius:100:in `exec': No such file or directory - /home/ruby/spec/code/shotgun/rubinius.local.bin (Errno::ENOENT) > from shotgun/rubinius:100:in `<main>' > > Is it needs to build rubinius? It should absolutely not need Rubinius. It's just that Rubinius is the default target to test, if no other implementation is specified via -t. I'm really not sure what's wrong in your case, since I downloaded the very same bundle and the very same command line worked for me just fine... Maybe, you have the ruby-1.8 defined in some "funny" way? As Charles suggested, you could also specify the full path to the ruby binary, that might help: bin/mspec -t /opt/ruby1.8-stable/bin/ruby spec/ruby/1.8 Thanks, --Vladimir
on 30.04.2008 15:52
In article <3454c9680804250053v671572fk9c5c9b4ab42c7c8d@mail.gmail.com>, "Vladimir Sizikov" <vsizikov@gmail.com> writes: > It should absolutely not need Rubinius. It's just that Rubinius is the > default target to test, if no other implementation is specified via > -t. I see. > I'm really not sure what's wrong in your case, since I downloaded the > very same bundle and the very same command line worked for me just > fine... Maybe, you have the ruby-1.8 defined in some "funny" way? I found that the problem is my "ruby" command is ruby-1.9. I tried "ruby-1.8 bin/mspec ..." but it doesn't help because bin/mspec invokes mspec/bin/mspec which has "#!/usr/bin/env ruby" line. So ruby-1.9 is run anyway. I need to use rubyspec as follows: % ruby-1.8 mspec/bin/mspec -t ruby-1.8.6p111 spec/ruby/1.8 This works. I investigated why rubyspec doesn't work with ruby-1.9. It is caused by consume? method: --- mspec/lib/mspec/utils/options.rb- 2008-04-30 22:46:37.000000000 +0900 +++ mspec/lib/mspec/utils/options.rb 2008-04-30 22:47:11.000000000 +0900 @@ -16,7 +16,7 @@ class OptionParser class Switch def consume?(opt) - if opt == short.to_s or opt == long.to_s + if short.include?(opt) or long.include?(opt) return arg ? 2 : 1 elsif opt[0..1] == short.to_s and opt.size > 2 return 1