#!/usr/bin/perl use strict; BEGIN { $| = 1; $^W = 1; } use Test::More tests => 10; use File::Temp; use IO::File; use Class::Autouse; # write a temp directory of modules for testing my $temp_dir; BEGIN { $temp_dir = File::Temp::tempdir(CLEANUP => 1); } use lib $temp_dir; sub try_class { my $class = shift; my $msg = shift; my $r; eval { $r = $class->can("mymethod") }; ok(!$@, "no exception calling can() on class when $msg"); ok($r, "the can() method works for a real method when $msg"); eval { $r = $r->() }; is($r,"$class mymethod", "return value is as expected when $msg"); } mkfile(class_name => 'SomeClass::123'); use_ok("SomeClass::123"); try_class("SomeClass::123", "used normally"); mkfile(class_name => 'SomeClass::456'); Class::Autouse->autouse("SomeClass::456"); try_class("SomeClass::456","used via Class::Autouse directly"); mkfile(class_name => 'SomeClass::789'); Class::Autouse->autouse(sub { my $class = shift; if ($class =~ /SomeClass::789/) { eval "use $class" } }); try_class("SomeClass::789","used via Class::Autouse via callback"); sub mkfile { my (%args) = @_; my $cname = $args{'class_name'}; my $fname = $cname; $fname =~ s/::/\//g; my $dname = $fname; $dname =~ s/\/[^\/]+//; mkdir( "$temp_dir/$dname" ); die $! unless -d "$temp_dir/$dname"; $fname =~ s/::/\//g; my $n1 = "$temp_dir/${fname}.pm"; my $m1 = IO::File->new(">$n1"); die "failed to create file $n1: $!" unless $m1; my $src = class_src(@_); $m1->print($src); $m1->close; } sub class_src { my (%args) = @_; my ($cname, $pname, $ptype, $has_autoload) = @args{'class_name','parent_class_name', 'parent_class_type', 'has_autoload'}; my $src = <