Ruby Forum Ruby-core > Action Item: RubySpec failures on Ruby 1.8.7

Posted by Vladimir Sizikov (Guest)
on 24.04.2008 12:06
(Received via mailing list)
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
Posted by ts (Guest)
on 24.04.2008 12:22
(Received via mailing list)
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
Posted by ts (Guest)
on 24.04.2008 12:38
(Received via mailing list)
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
Posted by Vladimir Sizikov (Guest)
on 24.04.2008 13:43
(Received via mailing list)
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
Posted by ts (Guest)
on 24.04.2008 14:18
(Received via mailing list)
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
Posted by Tanaka Akira (Guest)
on 25.04.2008 01:56
(Received via mailing list)
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]
Posted by Charles Oliver Nutter (Guest)
on 25.04.2008 04:53
(Received via mailing list)
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
Posted by Charles Oliver Nutter (Guest)
on 25.04.2008 04:54
(Received via mailing list)
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
Posted by Vladimir Sizikov (Guest)
on 25.04.2008 09:55
(Received via mailing list)
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
Posted by Tanaka Akira (Guest)
on 30.04.2008 15:52
(Received via mailing list)
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