Test coverage checking when test driver is separate from the tested program.

Discussion in 'Ruby' started by Tomasz Wegrzanowski, Aug 23, 2006.

  1. Hello,

    I have a program compiler.rb, that compiles something.
    The test driver is a separate program, that runs compiler.rb, then feeds
    the results to a virtual machine, and checks if it gets expected results.

    Now I'd like to verify that every single line of compiler.rb is
    covered by tests.
    How can I make rcov merge information from multiple runs of compiler.rb ?

    --
    Tomasz Wegrzanowski [ http://t-a-w.blogspot.com/ ]
     
    Tomasz Wegrzanowski, Aug 23, 2006
    #1
    1. Advertising

  2. On Wed, Aug 23, 2006 at 08:32:09AM +0900, Tomasz Wegrzanowski wrote:
    > I have a program compiler.rb, that compiles something.
    > The test driver is a separate program, that runs compiler.rb, then feeds
    > the results to a virtual machine, and checks if it gets expected results.
    >
    > Now I'd like to verify that every single line of compiler.rb is
    > covered by tests.
    > How can I make rcov merge information from multiple runs of compiler.rb ?


    You can use the --aggregate option, which was added in 0.7.0.
    Essentially, you just have to run your program using rcov with the
    --aggregate FILE option:
    rm -f coverage.data
    rcov -t --no-html --aggregate coverage.data bin/compiler.rb -- -args --to --compiler.rb bar.src
    rcov --aggregate coverage.data bin/compiler.rb -- -some --other --args foo.src

    You can skip HTML report generation in all but the last run with --no-html;
    the -t (text summary) option stops rcov from complaining about the lack of
    files to analyze.

    There's some additional information about how to do it both manually and with a
    Rake task at
    http://eigenclass.org/hiki.rb?rcov 0.7.0

    Note that --aggregate is fairly slow since all the execution count and
    coverage information must be saved in the specified file, as well as the code
    that was loaded (since in a later execution different files could be
    loaded/parsed).

    --
    Mauricio Fernandez - http://eigenclass.org - singular Ruby
     
    Mauricio Fernandez, Aug 23, 2006
    #2
    1. Advertising

  3. On Wed, Aug 23, 2006 at 08:08:27PM +0900, Mauricio Fernandez wrote:
    > On Wed, Aug 23, 2006 at 08:32:09AM +0900, Tomasz Wegrzanowski wrote:
    > > I have a program compiler.rb, that compiles something.
    > > The test driver is a separate program, that runs compiler.rb, then feeds
    > > the results to a virtual machine, and checks if it gets expected results.
    > >
    > > Now I'd like to verify that every single line of compiler.rb is
    > > covered by tests.
    > > How can I make rcov merge information from multiple runs of compiler.rb ?

    >
    > You can use the --aggregate option, which was added in 0.7.0.

    [...]

    Sorry, I misread the first paragraph and answered somewhat aside of the
    question.

    In the case you describe, you could create a small wrapper that would look
    more or less like this:

    #!/usr/bin/env ruby

    system("rcov", "--aggregate", "coverage.data", "--no-html", "-t",
    "compiler.rb", "--", *ARGV)
    exit $?.exitstatus

    Then you could select which script (the wrapper or the actual compiler.rb) is
    to be executed with a symlink.
    Alternatively, you could change the driver to select the script or execute
    rcov with the appropriate arguments directly, but at that point you'd have to
    implement some way to specify whether rcov is to be used or not, if you want
    to allow both.

    Hope this helps.

    --
    Mauricio Fernandez - http://eigenclass.org - singular Ruby
     
    Mauricio Fernandez, Aug 23, 2006
    #3
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Raj
    Replies:
    4
    Views:
    7,858
    asicvlsi
    Feb 21, 2008
  2. Replies:
    13
    Views:
    491
    JustBoo
    Jan 7, 2006
  3. Replies:
    16
    Views:
    473
    Default User
    Jan 10, 2006
  4. Ben Finney
    Replies:
    7
    Views:
    555
    Ned Batchelder
    Oct 30, 2007
  5. Replies:
    0
    Views:
    403
Loading...

Share This Page