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

C

ChrisKaelin

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
 
C

ChrisKaelin

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...
 
C

ChrisKaelin

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.
 
R

Ryan Davis

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.
 
R

Ryan Davis

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.
 
C

ChrisKaelin

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!
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top