Another reason why solve #6124. Vit Dne 11.5.2012 18:34, Daniel Berger napsal(a): > Hi, > > Forwarding a message from Kouhei Sutou regarding an issue we found in > the Rake that ships with Ruby by default. > > The issue stems around his test-unit2 library, where it's loading the > wrong test/unit because of $LOAD_PATH handling when it uses the > default Rake. He provides an explanation for the problem and has > provided a diff near the bottom. There's a workaround, too. > > I wasn't sure who should get this, so I sent it to both lists hoping > someone could chime in. > > While I think this is a minor issue now, it could be a larger issue > down the road if/when more of the stdlib is turned into gems with the > same name. > > Regards, > > Dan > > ---------- Forwarded message ---------- > From: Kouhei Sutou<kou / cozmixng.org> > Date: Fri, May 11, 2012 at 7:19 AM > Subject: [test-unit-users-en:00074] Re: Having problems with startup > when combined with Rake > To: test-unit-users-en / rubyforge.org > > > Hi, > > In<CAGSpibmdyopjdfGRsmDOPRck5L76L82RMMjZC9K0+e2cmjH-jA / mail.gmail.com> > "[test-unit-users-en:00073] Re: Having problems with startup when > combined with Rake" on Thu, 10 May 2012 09:16:09 -0600, > Daniel Berger<djberg96 / gmail.com> wrote: > >> I think I figured it out. Somehow it was picking up the old test-unit >> library. Once I renamed that old test-unit directory, everything >> worked. I'm not sure why it was happening though, since I was >> requiring 'test-unit', not 'test/unit'. >> >> I did not have my RUBYOPT environment variable set, but I didn't think >> it was necessary. >> >> I'm not sure why it would work with 1.8.7 and not 1.9.3, though. > I found the problem. :-) > > First, here are workarounds: > > 1. Use :diret loader: > > Rake::TestTask.new('test_foo') do |t| > ... > t.loader = :direct > ... > end > > 2. Use Rake installed by gem: > > % gem install rake > > > The cause of the problem is rake/testtask.rb prepends the > directory where rake.rb is to $LOAD_PATH. The directory is > Ruby's default library diretory when you are using bundled > rake. > >> c:\Users\djberge\Repositories\foo>rake test_foo >> c:/usr/bin/ruby.exe -w -I"lib" -I"c:/usr/lib/ruby/1.9.1" "c:/usr/lib/ruby/1.9.1/rake/rake_test_loader.rb" "test/test_foo.rb" > In your case, "c:/usr/lib/ruby/1.9.1" is the direcotry. > > The directory should not be prepended because RubyGems > inserts test-unit's library directory after load paths added > by -I. > > In your case: > > p $LOAD_PATH -> > ["lib", "c:/usr/lib/ruby/1.9.1", "#{Gem.path}/gems/test-unit-2.4.9/lib", ...] > > test/unit (that is a minitest wrapper not test-unit gem!) is > in "c:/usr/lib/ruby/1.9.1". So 'require "test/unit"' > requires minitest wrapper instead of test-unit gem. This is > the reason for the problem. > > > The solution of this problem is rake/testtask.rb doesn't add > -I"c:/usr/lib/ruby/1.9.1" if it's not > needed. "c:/usr/lib/ruby/1.9.1" is n't needed because the > path is in $LOAD_PATH in default. The directory is > "#{Gem.path}/gems/rake-X.Y.Z/lib" if you are using Rake > installed by gem. In the case, the -I"..." is needed. > > OK. Here is a patch against the master of Rake: > > -- > diff --git a/lib/rake/testtask.rb b/lib/rake/testtask.rb > index 04d3ae4..98b8c61 100644 > --- a/lib/rake/testtask.rb > +++ b/lib/rake/testtask.rb > @@ -157,7 +157,12 @@ module Rake > when :testrb > "-S testrb #{fix}" > when :rake > - "-I\"#{rake_lib_dir}\" \"#{rake_loader}\"" > + loarder_code = "\"#{rake_loader}\"" > + lib_dir_for_loader = rake_lib_dir > + if RbConfig::CONFIG["rubylibdir"] != lib_dir_for_loader > + loader_code = "-I\"#{lib_dir_for_loader}\" #{loader_code}" > + end > + loader_code > end > end > -- > > Could you send the patch to Rake(*)? I don't have time to > send it and discuss about the problem... :< > > (*) https://github.com/jimweirich/rake > > > Thanks, > -- > kou > _______________________________________________ > test-unit-users-en mailing list > test-unit-users-en / rubyforge.org > http://rubyforge.org/mailman/listinfo/test-unit-users-en >