Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery
 
PerlMonks  

Re: Re: Including a 'test only' module in distribution

by runrig (Abbot)
on Sep 25, 2001 at 23:38 UTC ( [id://114644]=note: print w/replies, xml ) Need Help??


in reply to Re: Including a 'test only' module in distribution
in thread Including a 'test only' module in distribution

The test suite itself is not a module. One of the tests (well, two actually) use a module that inherits from the main module and exists only to test a certain feature of subclassing the main module.

And I generated the whole thing with h2xs, and I deleted test.pl and put several test scripts in a 't' subdirectory as per the docs, and my 'test' module is buried in the 't' directory and gets found via a 'use lib' and statement in the relevant test scripts.

Sorry if I was unclear...

Update:The test scripts don't actually explicitly use the test module themselves, but the module gets use'd from within the main module via arguments in the import list or the constructor method of the main module (and this whole process is what I'm testing), so the test module needs to be a ".pm" file and the path to it needs to get into @INC.

I don't like the way I currently have it with the test scripts themselves renaming the file, so I've lately decided to put 'use lib' statements in the test scripts, and put this after the WriteMakeFile() in Makefile.PL:

find( sub { return unless /^FLTest.pt$/; return if -f "FLTest.pm"; copy("FLTest.pt", "FLTest.pm") or die "Couldn't create FLTest.pm (some tests will fail): $!"; }, ".");

Replies are listed 'Best First'.
Re: Re: Re: Including a 'test only' module in distribution
by tachyon (Chancellor) on Sep 26, 2001 at 01:15 UTC

    You still don't need to use a module to do this. All you need is a package which can live quite happily in a script. Here is a HTML::Parser example - Filter inherits from Parser, including its new method as you can see. This works fine within a package structure so you don't need a separate module. It's a rather basic tag filter that only passes specified tags and their content if you were wondering.

    package Filter; use strict; use base 'HTML::Parser'; my ($filter, $want_it); my @ok_tags = qw ( h1 h2 h3 h4 p br ); my %ok_tags; $ok_tags{$_}++ for @ok_tags; sub start { my ($self, $tag, $attr, $attrseq, $origtext) = @_; if ( exists $ok_tags{$tag}) { $filter .= $origtext; $want_it = 1; } else { $want_it = 0; } } sub text { my ($self, $text) = @_; $filter .= $text if $want_it; } sub comment { # uncomment to no strip comments # my ($self, $comment) = @_; # $filter .= "<!-- $comment -->"; } sub end { my ($self, $tag, $origtext) = @_; $filter .= $origtext if exists $ok_tags{$tag}; } my $parser = new Filter; my $html = join '', <DATA>; $parser->parse($html); $parser->eof; print $html; print "\n\n------------------------\n\n"; print $filter; __DATA__ <html> <head> <title>Title</title> </head> <body> <h1>Hello Parser</h1> <p>You need HTML::Parser</p> <h2>Parser rocks!</h2> <a href="html.parser.com">html.parser.com</a> <hr> <pre> use HTML::Parser; </pre> <!-- HTML PARSER ROCKS! --> </body> </html>

    cheers

    tachyon

    s&&rsenoyhcatreve&&&s&n.+t&"$'$`$\"$\&"&ee&&y&srve&&d&&print

Re: Re: Re: Including a 'test only' module in distribution
by Anonymous Monk on Sep 26, 2001 at 01:06 UTC

    Why not just avoid needing the Test.pm module at all by taking the 'test' module's code and wrapping it in a BEGIN block at the top of the test script and removing the 'use Test' (or whatever) statement currently being being used?

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://114644]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others surveying the Monastery: (4)
As of 2024-04-19 04:43 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found