--- /dev/null
+# $Id: Test.pm,v 1.1 2006-06-20 16:32:42 mike Exp $
+
+package ZOOM::IRSpy::Test;
+
+use 5.008;
+use strict;
+use warnings;
+
+=head1 NAME
+
+ZOOM::IRSpy::Test - base class for tests in IRSpy
+
+=head1 SYNOPSIS
+
+ ### To follow
+
+=head1 DESCRIPTION
+
+I<### To follow>
+
+=cut
+
+sub new {
+ my $class = shift();
+ my($irspy) = @_;
+
+ return bless {
+ irspy => $irspy,
+ }, $class;
+}
+
+
+sub irspy {
+ my $this = shift();
+ return $this->{irspy};
+}
+
+
+sub run {
+ my $this = shift();
+ die "can't run the base-class test";
+}
+
+### Could include loop detection
+sub run_tests {
+ my $this = shift();
+ my @tname = @_;
+
+ my $res = 0;
+ foreach my $tname (@tname) {
+ my $sub = $this->irspy()->_run_test($tname);
+ $res = $sub if $sub > $res;
+ }
+
+ return $res;
+}
+
+
+=head1 SEE ALSO
+
+ZOOM::IRSpy
+
+=head1 AUTHOR
+
+Mike Taylor, E<lt>mike@indexdata.comE<gt>
+
+=head1 COPYRIGHT AND LICENSE
+
+Copyright (C) 2006 by Index Data ApS.
+
+This library is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself, either Perl version 5.8.7 or,
+at your option, any later version of Perl 5 you may have available.
+
+=cut
+
+1;
--- /dev/null
+# $Id: Main.pm,v 1.1 2006-06-20 16:32:42 mike Exp $
+
+package ZOOM::IRSpy::Test::Main;
+
+use 5.008;
+use strict;
+use warnings;
+
+use ZOOM::IRSpy::Test;
+our @ISA;
+@ISA = qw(ZOOM::IRSpy::Test);
+
+
+=head1 NAME
+
+ZOOM::IRSpy::Test::Main - a single test for IRSpy
+
+=head1 SYNOPSIS
+
+ ### To follow
+
+=head1 DESCRIPTION
+
+I<### To follow>
+
+=cut
+
+sub run {
+ my $this = shift();
+
+ return $this->run_tests("Ping");
+}
+
+
+=head1 SEE ALSO
+
+ZOOM::IRSpy
+
+=head1 AUTHOR
+
+Mike Taylor, E<lt>mike@indexdata.comE<gt>
+
+=head1 COPYRIGHT AND LICENSE
+
+Copyright (C) 2006 by Index Data ApS.
+
+This library is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself, either Perl version 5.8.7 or,
+at your option, any later version of Perl 5 you may have available.
+
+=cut
+
+1;
--- /dev/null
+# $Id: Ping.pm,v 1.1 2006-06-20 16:32:42 mike Exp $
+
+# See the "Main" test package for documentation
+
+package ZOOM::IRSpy::Test::Ping;
+
+use 5.008;
+use strict;
+use warnings;
+
+use ZOOM::IRSpy::Test;
+our @ISA;
+@ISA = qw(ZOOM::IRSpy::Test);
+
+
+sub run {
+ my $this = shift();
+
+ print "Running 'Ping' test\n";
+ ### Now actually do it
+ return 0;
+}
+
+
+# Some of this Pod-using code may be useful.
+#
+#my $pod = new ZOOM::Pod(@ARGV);
+#$pod->option(elementSetName => "b");
+#$pod->callback(ZOOM::Event::RECV_SEARCH, \&completed_search);
+#$pod->callback(ZOOM::Event::RECV_RECORD, \&got_record);
+##$pod->callback(exception => \&exception_thrown);
+#$pod->search_pqf("the");
+#my $err = $pod->wait();
+#die "$pod->wait() failed with error $err" if $err;
+#
+#sub completed_search {
+# my($conn, $state, $rs, $event) = @_;
+# print $conn->option("host"), ": found ", $rs->size(), " records\n";
+# $state->{next_to_fetch} = 0;
+# $state->{next_to_show} = 0;
+# request_records($conn, $rs, $state, 2);
+# return 0;
+#}
+#
+#sub got_record {
+# my($conn, $state, $rs, $event) = @_;
+#
+# {
+# # Sanity-checking assertions. These should be impossible
+# my $ns = $state->{next_to_show};
+# my $nf = $state->{next_to_fetch};
+# if ($ns > $nf) {
+# die "next_to_show > next_to_fetch ($ns > $nf)";
+# } elsif ($ns == $nf) {
+# die "next_to_show == next_to_fetch ($ns)";
+# }
+# }
+#
+# my $i = $state->{next_to_show}++;
+# my $rec = $rs->record($i);
+# print $conn->option("host"), ": record $i is ", render_record($rec), "\n";
+# request_records($conn, $rs, $state, 3)
+# if $i == $state->{next_to_fetch}-1;
+#
+# return 0;
+#}
+#
+#sub exception_thrown {
+# my($conn, $state, $rs, $exception) = @_;
+# print "Uh-oh! $exception\n";
+# return 0;
+#}
+#
+#sub request_records {
+# my($conn, $rs, $state, $count) = @_;
+#
+# my $i = $state->{next_to_fetch};
+# ZOOM::Log::log("irspy", "requesting $count records from $i");
+# $rs->records($i, $count, 0);
+# $state->{next_to_fetch} += $count;
+#}
+#
+#sub render_record {
+# my($rec) = @_;
+#
+# return "undefined" if !defined $rec;
+# return "'" . $rec->render() . "'";
+#}
+
+
+1;