[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

unit-test ARGV problem (only 1 of 3 tests is using it

ChrisKaelin

4/13/2007 4:10:00 PM

I have 3 tests using the following setup routine, that is faking
command line arguments via ARGV.
Only one of my 3 test routines seems to be actually using the ARGV
defined here (but the @run1 seems to be initialized, so I know at
least, the setup routine is called by each test). Am I missing
anything? I thought the setup routine is called for every test?

def setup
# faking commandline arguments first
# no space here or the space will be
# part of the filenames ;-)
if RUBY_PLATFORM =~ /mswin32/
#ARGV[1] = "-h"
ARGV[1] = "-ltestlogfile"
ARGV[2] = "-cdefault_config.yml"
ARGV[3] = "-pC:\\TEMP"
ARGV[4] = "-L4"
ARGV[5] = "-v"
else
ARGV[1] = "-ltestlogfile"
ARGV[2] = "-cdefault_config.yml"
ARGV[3] = "-p\/tmp"
end
@run1 = TheScript.new
@run1.set_vars
end

5 Answers

ChrisKaelin

4/13/2007 10:37:00 PM

0

So far I can only say, it has nothing to do with the environment I
use. Also it does not matter wether I give the ARGV values in the
setup routine or give it to the test script directly by commandline...

ChrisKaelin

4/13/2007 10:44:00 PM

0

Found it...
I used
opts.parse!(args)
as from the example from rdoc of OptionParser. Instead I should have
used:
opts.parse(args)
which does not pop the ARGV values.

Ryan Davis

4/13/2007 10:44:00 PM

0


On Apr 13, 2007, at 09:10 , ChrisKaelin wrote:

> I have 3 tests using the following setup routine, that is faking
> command line arguments via ARGV.
> Only one of my 3 test routines seems to be actually using the ARGV
> defined here (but the @run1 seems to be initialized, so I know at
> least, the setup routine is called by each test). Am I missing
> anything? I thought the setup routine is called for every test?

setup IS called for every test.

> def setup
> # faking commandline arguments first
> # no space here or the space will be
> # part of the filenames ;-)
> if RUBY_PLATFORM =~ /mswin32/
> #ARGV[1] = "-h"
> ARGV[1] = "-ltestlogfile"
> ARGV[2] = "-cdefault_config.yml"
> ARGV[3] = "-pC:\\TEMP"
> ARGV[4] = "-L4"
> ARGV[5] = "-v"
> else
> ARGV[1] = "-ltestlogfile"
> ARGV[2] = "-cdefault_config.yml"
> ARGV[3] = "-p\/tmp"
> end
> @run1 = TheScript.new
> @run1.set_vars
> end

Try this instead:

def setup
ARGV.clear
ARGV.push("-ltestlogfile", "-cdefault_config.yml")
if RUBY_PLATFORM =~ /mswin32 then
ARGV.push("-pC:\\TEMP", "-L4", "-v")
else
ARGV.push("-p\/tmp")
end
end

I think the main problem is that ARGV is zero based and you're not
respecting that by manually placing the elements in.


Ryan Davis

4/13/2007 10:52:00 PM

0


On Apr 13, 2007, at 15:45 , ChrisKaelin wrote:

> Found it...
> I used
> opts.parse!(args)
> as from the example from rdoc of OptionParser. Instead I should have
> used:
> opts.parse(args)
> which does not pop the ARGV values.

Popping the args should be fine as long as you put them back. In
fact, I'd say it is better because you can guarantee what you're
dealing with. Start with ARGV.clear and put what you want in it each
time through.


ChrisKaelin

4/16/2007 11:14:00 PM

0

On 14 Apr., 00:44, Ryan Davis <ryand-r...@zenspider.com> wrote:
> On Apr 13, 2007, at 09:10 , ChrisKaelin wrote:
>
> > I have 3 tests using the following setup routine, that is faking
> > command line arguments via ARGV.
> > Only one of my 3 test routines seems to be actually using the ARGV
> > defined here (but the @run1 seems to be initialized, so I know at
> > least, the setup routine is called by each test). Am I missing
> > anything? I thought the setup routine is called for every test?
>
> setup IS called for every test.
>
>
>
> > def setup
> > # faking commandline arguments first
> > # no space here or the space will be
> > # part of the filenames ;-)
> > if RUBY_PLATFORM =~ /mswin32/
> > #ARGV[1] = "-h"
> > ARGV[1] = "-ltestlogfile"
> > ARGV[2] = "-cdefault_config.yml"
> > ARGV[3] = "-pC:\\TEMP"
> > ARGV[4] = "-L4"
> > ARGV[5] = "-v"
> > else
> > ARGV[1] = "-ltestlogfile"
> > ARGV[2] = "-cdefault_config.yml"
> > ARGV[3] = "-p\/tmp"
> > end
> > @run1 = TheScript.new
> > @run1.set_vars
> > end
>
> Try this instead:
>
> def setup
> ARGV.clear
> ARGV.push("-ltestlogfile", "-cdefault_config.yml")
> if RUBY_PLATFORM =~ /mswin32 then
> ARGV.push("-pC:\\TEMP", "-L4", "-v")
> else
> ARGV.push("-p\/tmp")
> end
> end
>
> I think the main problem is that ARGV is zero based and you're not
> respecting that by manually placing the elements in.

Yeah, probably that was why it only worked one round... I will try
your solution, so I can go back to use the correct way of the options
parse. Thanks a lot!