[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Mixing Rake and Turn

Daniel Berger

2/2/2007 10:29:00 PM

Hi all,

I've got some test tasks that I've got setup via a Rakefile. I'd like
to see the output in the 'turn' format. However, simply sticking
'require "turn"' at the top of the Rakefile doesn't quite do the
trick:

>rake test_foo
Loaded suite /usr/local/lib/ruby/gems/1.8/gems/rake-0.7.1/lib/rake/
rake_test_loader
Started
..........................................................................................................................................................................................................................................................
Finished in 0.440434 seconds.

249 tests, 738 assertions, 0 failures, 0 errors
Loaded suite /usr/local/bin/rake
==============================================================================
pass: 0, fail: 0, error: 0
total: 0 tests with 0 assertions in 0.001122 seconds
==============================================================================

So, it's giving me the nicer summary, but not the line by line result
for each test.

How do I get Rake to behave the way I want?

Thanks,

Dan

8 Answers

Tim Pease

2/2/2007 10:40:00 PM

0

On 2/2/07, Daniel Berger <djberg96@gmail.com> wrote:
> Hi all,
>
> I've got some test tasks that I've got setup via a Rakefile. I'd like
> to see the output in the 'turn' format. However, simply sticking
> 'require "turn"' at the top of the Rakefile doesn't quite do the
> trick:
>
> >rake test_foo
> Loaded suite /usr/local/lib/ruby/gems/1.8/gems/rake-0.7.1/lib/rake/
> rake_test_loader
> Started
> .........................................................................................................................................................................................................................................................
> Finished in 0.440434 seconds.
>
> 249 tests, 738 assertions, 0 failures, 0 errors
> Loaded suite /usr/local/bin/rake
> ==============================================================================
> pass: 0, fail: 0, error: 0
> total: 0 tests with 0 assertions in 0.001122 seconds
> ==============================================================================
>
> So, it's giving me the nicer summary, but not the line by line result
> for each test.
>
> How do I get Rake to behave the way I want?
>


When you run your unit tests from within rake, they are actually run
in a separate ruby interpreter. Requiring turn into the Rakefile does
not require turn into the ruby interpreter where the unit tests are
run.

You'll have to modify your test task to include turn ...

ruby -Ilib -rturn your/test.rb

Or use the turn command

turn -Ilib your/test.rb


The fancy turn summary is coming out of the ruby interpreter running
rake. When you require 'turn' the test::unit library is also
included. test::unit sets up an empty test suite by default and
registers a teardown hook. If no tests are run by the time the
interpreter exits, the teardown hook is invoked and the empty test
suite is run (hence the empty result set).

Hope this explanation helps.

Blessings,
TwP

Daniel Berger

2/2/2007 11:10:00 PM

0

On Feb 2, 3:40 pm, "Tim Pease" <tim.pe...@gmail.com> wrote:
> On 2/2/07, Daniel Berger <djber...@gmail.com> wrote:
>
>
>
> > Hi all,
>
> > I've got some test tasks that I've got setup via a Rakefile. I'd like
> > to see the output in the 'turn' format. However, simply sticking
> > 'require "turn"' at the top of the Rakefile doesn't quite do the
> > trick:
>
> > >rake test_foo
> > Loaded suite /usr/local/lib/ruby/gems/1.8/gems/rake-0.7.1/lib/rake/
> > rake_test_loader
> > Started
> > .........................................................................................................................................................................................................................................................
> > Finished in 0.440434 seconds.
>
> > 249 tests, 738 assertions, 0 failures, 0 errors
> > Loaded suite /usr/local/bin/rake
> > ==============================================================================
> > pass: 0, fail: 0, error: 0
> > total: 0 tests with 0 assertions in 0.001122 seconds
> > ==============================================================================
>
> > So, it's giving me the nicer summary, but not the line by line result
> > for each test.
>
> > How do I get Rake to behave the way I want?
>
> When you run your unit tests from within rake, they are actually run
> in a separate ruby interpreter. Requiring turn into the Rakefile does
> not require turn into the ruby interpreter where the unit tests are
> run.
>
> You'll have to modify your test task to include turn ...
>
> ruby -Ilib -rturn your/test.rb
>
> Or use the turn command
>
> turn -Ilib your/test.rb
>
> The fancy turn summary is coming out of the ruby interpreter running
> rake. When you require 'turn' the test::unit library is also
> included. test::unit sets up an empty test suite by default and
> registers a teardown hook. If no tests are run by the time the
> interpreter exits, the teardown hook is invoked and the empty test
> suite is run (hence the empty result set).
>
> Hope this explanation helps.

Thanks Tim, it does.

In theory, then, I ought to be able to push "-rturn" onto the
TestTask#ruby_opts accessor. Unfortunately, there appears to be a bug
in Rake where the @ruby_opts instance variable is getting reset to an
empty array inside the "define" method in testtask.rb.

I'll bring that up on the Rake mailing list.

Regards,

Dan

Daniel Berger

2/2/2007 11:28:00 PM

0

On Feb 2, 4:09 pm, "Daniel Berger" <djber...@gmail.com> wrote:
> On Feb 2, 3:40 pm, "Tim Pease" <tim.pe...@gmail.com> wrote:
>
>
>
> > On 2/2/07, Daniel Berger <djber...@gmail.com> wrote:
>
> > > Hi all,
>
> > > I've got some test tasks that I've got setup via a Rakefile. I'd like
> > > to see the output in the 'turn' format. However, simply sticking
> > > 'require "turn"' at the top of the Rakefile doesn't quite do the
> > > trick:
>
> > > >rake test_foo
> > > Loaded suite /usr/local/lib/ruby/gems/1.8/gems/rake-0.7.1/lib/rake/
> > > rake_test_loader
> > > Started
> > > .........................................................................................................................................................................................................................................................
> > > Finished in 0.440434 seconds.
>
> > > 249 tests, 738 assertions, 0 failures, 0 errors
> > > Loaded suite /usr/local/bin/rake
> > > ==============================================================================
> > > pass: 0, fail: 0, error: 0
> > > total: 0 tests with 0 assertions in 0.001122 seconds
> > > ==============================================================================
>
> > > So, it's giving me the nicer summary, but not the line by line result
> > > for each test.
>
> > > How do I get Rake to behave the way I want?
>
> > When you run your unit tests from within rake, they are actually run
> > in a separate ruby interpreter. Requiring turn into the Rakefile does
> > not require turn into the ruby interpreter where the unit tests are
> > run.
>
> > You'll have to modify your test task to include turn ...
>
> > ruby -Ilib -rturn your/test.rb
>
> > Or use the turn command
>
> > turn -Ilib your/test.rb
>
> > The fancy turn summary is coming out of the ruby interpreter running
> > rake. When you require 'turn' the test::unit library is also
> > included. test::unit sets up an empty test suite by default and
> > registers a teardown hook. If no tests are run by the time the
> > interpreter exits, the teardown hook is invoked and the empty test
> > suite is run (hence the empty result set).
>
> > Hope this explanation helps.
>
> Thanks Tim, it does.
>
> In theory, then, I ought to be able to push "-rturn" onto the
> TestTask#ruby_opts accessor. Unfortunately, there appears to be a bug
> in Rake where the @ruby_opts instance variable is getting reset to an
> empty array inside the "define" method in testtask.rb.
>
> I'll bring that up on the Rake mailing list.
>
> Regards,
>
> Dan

Upon further review, using TestTask#ruby_opts *does* work. The bug was
mine.

Anyhoo, for the sake of future Googlers, this is how you do it:

desc "Runs the test suite for the Foo class"
Rake::TestTask.new('test_foo') do |t|
t.test_files = FileList['test/foo/*.rb'] # Or whatever
t.ruby_opts << '-rturn'
t.warning = true
end

Regards,

Dan

Jan Friedrich

2/3/2007 12:41:00 PM

0

Daniel Berger wrote:
> Upon further review, using TestTask#ruby_opts *does* work. The bug was
> mine.
>
> Anyhoo, for the sake of future Googlers, this is how you do it:
>
> desc "Runs the test suite for the Foo class"
> Rake::TestTask.new('test_foo') do |t|
> t.test_files = FileList['test/foo/*.rb'] # Or whatever
> t.ruby_opts << '-rturn'
> t.warning = true
> end
But you have now a dependency to turn. If you share your program with
others they have to install turn if they want to use the test task. :(

I prefer at the moment the following snipped on top of every test file:


require 'test/unit'
begin
require 'turn'
rescue LoadError; end


So you can running tests with or without turn installed.

Other ideas?


Regards,
Jan

Daniel Berger

2/3/2007 3:46:00 PM

0

On Feb 3, 5:40 am, Jan Friedrich <frd...@gmail.com> wrote:
> Daniel Berger wrote:
> > Upon further review, using TestTask#ruby_opts *does* work. The bug was
> > mine.
>
> > Anyhoo, for the sake of future Googlers, this is how you do it:
>
> > desc "Runs the test suite for the Foo class"
> > Rake::TestTask.new('test_foo') do |t|
> > t.test_files = FileList['test/foo/*.rb'] # Or whatever
> > t.ruby_opts << '-rturn'
> > t.warning = true
> > end
>
> But you have now a dependency to turn. If you share your program with
> others they have to install turn if they want to use the test task. :(
>
> I prefer at the moment the following snipped on top of every test file:
>
> require 'test/unit'
> begin
> require 'turn'
> rescue LoadError; end
>
> So you can running tests with or without turn installed.
>
> Other ideas?

In one project I have way too many files for that to be feasible. A
simpler approach would be to do this at the top of the Rakefile:

$turn = true
begin
require 'turn'
rescue LoadError
$turn = false
end

t.ruby_opts << '-rturn' if $turn

The only problem with that is that, as Tim mentioned earlier, you'll
get the bogus "zero" test results at the end (in addition to the real
results). To avoid that, we could check to see if the turn.rb file
merely exists instead of actually loading it:

require 'rbconfig'
include Config

$turn = false
$turn = true if File.exists?(File.join(CONFIG['sitelibdir'],
'turn.rb'))

t.ruby_opts << '-rturn' if $turn

This is what I plan on doing.

Regards,

Dan

Jan Friedrich

2/5/2007 7:41:00 AM

0

Daniel Berger wrote:
> t.ruby_opts << '-rturn'
This doesn't work if you have installed turn via rubygems:

/usr/bin/ruby1.8: no such file to load -- turn (LoadError)
rake aborted!

You cannot load gems with the -r option of the ruby interpreter.

Regards,
Jan

Tim Pease

2/5/2007 4:17:00 PM

0

On 2/5/07, Jan Friedrich <frdrch@gmail.com> wrote:
> Daniel Berger wrote:
> > t.ruby_opts << '-rturn'
> This doesn't work if you have installed turn via rubygems:
>
> /usr/bin/ruby1.8: no such file to load -- turn (LoadError)
> rake aborted!
>
> You cannot load gems with the -r option of the ruby interpreter.
>


t.ruby_opts << '-rubygems'
t.ruby_opts << '-rturn'

That should work, correct?

TwP

James Gray

2/5/2007 4:23:00 PM

0

On Feb 5, 2007, at 10:17 AM, Tim Pease wrote:

> On 2/5/07, Jan Friedrich <frdrch@gmail.com> wrote:
>> Daniel Berger wrote:
>> > t.ruby_opts << '-rturn'
>> This doesn't work if you have installed turn via rubygems:
>>
>> /usr/bin/ruby1.8: no such file to load -- turn (LoadError)
>> rake aborted!
>>
>> You cannot load gems with the -r option of the ruby interpreter.
>>
>
>
> t.ruby_opts << '-rubygems'
> t.ruby_opts << '-rturn'
>
> That should work, correct?

No, I don't think so.

Ruby's -r switch is not implemented by calling Ruby's require()
method, so RubyGems cannot override it.

James Edward Gray II