zoul
zoul

Reputation: 104065

How can I run Perl test suite automatically when files change?

Is there a tool that would watch file changes in a directory tree of a Perl application and re-run the test suite every time I save changes to some module? Something akin to masak’s tote.

Upvotes: 4

Views: 750

Answers (7)

Zane XY
Zane XY

Reputation: 2809

I haven't managed to get Test::Continuous installed successfully on Windows, I use the following script, and it works pretty well for me:

use File::ChangeNotify;

$| = 1;

my $watcher = File::ChangeNotify->instantiate_watcher(
    directories => [ 't', 'lib' ],
    filter => qr/\.t|\.pl|\.pm/,
);

while (my @events = $watcher->wait_for_events) {
    print `prove -l -r -t --timer`;
}

Upvotes: 1

Thor
Thor

Reputation: 201

Win32::FileNotify can help with monitoring changes to the file system if you are on Windows.

Upvotes: 3

Schwern
Schwern

Reputation: 164859

I don't know of any generic filesystem monitoring widget, but here's the Perl specific half.

sub run_tests {
    my $prove_out = `prove -lr`;
    my $tests_passed = $? == 0;

    return "" if $tests_passed;
    return $prove_out;
}

This uses the prove utility that comes with Test::Harness 3. It exits non-zero on test failure. Plug that into your filesystem monitoring thing and you're set.

Upvotes: 1

Ether
Ether

Reputation: 53976

The old school unix solution would be to write up a Makefile and trigger it regularly through a cron job (as frequently as once a minute), and have it mail you the results if something broke.

Alternatively if you use a revision control system such as svn, you could use a commit hook to kick off a build/test cycle when you commit a file.

One other thing you could do is write a wrapper script around your editor (such that when you close or save a file, the build/test cycle is triggered).

Upvotes: 3

brian d foy
brian d foy

Reputation: 132822

The basic way to do this is through source control and an continuous integration package, say, like Smolder. When you check in files, the CI server notices the changes and runs the test suite for you.

Many CI products collect cross-run information for you and can show you trends in your tests, test cover, and so on.

Upvotes: 2

Josh Ribakoff
Josh Ribakoff

Reputation: 3048

Ironically I just ported stakeout.rb to PHP this week. http://joshribakoff.com/?p=106

Upvotes: 1

Related Questions