r35634 - in /branches/upstream/libcheck-isa-perl: ./ current/ current/lib/ current/lib/Check/ current/t/

roam-guest at users.alioth.debian.org roam-guest at users.alioth.debian.org
Mon May 18 14:04:03 UTC 2009


Author: roam-guest
Date: Mon May 18 14:03:30 2009
New Revision: 35634

URL: http://svn.debian.org/wsvn/pkg-perl/?sc=1&rev=35634
Log:
[svn-inject] Installing original source of libcheck-isa-perl

Added:
    branches/upstream/libcheck-isa-perl/
    branches/upstream/libcheck-isa-perl/current/
    branches/upstream/libcheck-isa-perl/current/Changes
    branches/upstream/libcheck-isa-perl/current/MANIFEST
    branches/upstream/libcheck-isa-perl/current/MANIFEST.SKIP
    branches/upstream/libcheck-isa-perl/current/META.yml
    branches/upstream/libcheck-isa-perl/current/Makefile.PL
    branches/upstream/libcheck-isa-perl/current/SIGNATURE
    branches/upstream/libcheck-isa-perl/current/lib/
    branches/upstream/libcheck-isa-perl/current/lib/Check/
    branches/upstream/libcheck-isa-perl/current/lib/Check/ISA.pm
    branches/upstream/libcheck-isa-perl/current/t/
    branches/upstream/libcheck-isa-perl/current/t/01_basic.t
    branches/upstream/libcheck-isa-perl/current/t/02_moose.t
    branches/upstream/libcheck-isa-perl/current/t/03_asa.t

Added: branches/upstream/libcheck-isa-perl/current/Changes
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libcheck-isa-perl/current/Changes?rev=35634&op=file
==============================================================================
--- branches/upstream/libcheck-isa-perl/current/Changes (added)
+++ branches/upstream/libcheck-isa-perl/current/Changes Mon May 18 14:03:30 2009
@@ -1,0 +1,12 @@
+0.04
+	- introduce obj_does for semantic compatibility on 5.8 without performance
+	  loss. Duh.
+
+0.03
+	- Improved with input from Adam Kennedy
+
+0.02
+	- Test suite fixes for perls below 5.10
+
+0.01
+	- Initial release

Added: branches/upstream/libcheck-isa-perl/current/MANIFEST
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libcheck-isa-perl/current/MANIFEST?rev=35634&op=file
==============================================================================
--- branches/upstream/libcheck-isa-perl/current/MANIFEST (added)
+++ branches/upstream/libcheck-isa-perl/current/MANIFEST Mon May 18 14:03:30 2009
@@ -1,0 +1,10 @@
+Changes
+lib/Check/ISA.pm
+Makefile.PL
+MANIFEST			This list of files
+MANIFEST.SKIP
+t/01_basic.t
+t/02_moose.t
+t/03_asa.t
+META.yml                                 Module meta-data (added by MakeMaker)
+SIGNATURE                                Public-key signature (added by MakeMaker)

Added: branches/upstream/libcheck-isa-perl/current/MANIFEST.SKIP
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libcheck-isa-perl/current/MANIFEST.SKIP?rev=35634&op=file
==============================================================================
--- branches/upstream/libcheck-isa-perl/current/MANIFEST.SKIP (added)
+++ branches/upstream/libcheck-isa-perl/current/MANIFEST.SKIP Mon May 18 14:03:30 2009
@@ -1,0 +1,43 @@
+# Avoid version control files.
+\bRCS\b
+\bCVS\b
+\bSCCS\b
+,v$
+\B\.svn\b
+\b_darcs\b
+
+# Avoid Makemaker generated and utility files.
+\bMANIFEST\.bak
+\bMakefile$
+\bblib/
+\bMakeMaker-\d
+\bpm_to_blib\.ts$
+\bpm_to_blib$
+\bblibdirs\.ts$         # 6.18 through 6.25 generated this
+
+# Avoid Module::Build generated and utility files.
+\bBuild$
+\b_build/
+
+# Avoid temp and backup files.
+~$
+\.old$
+\#$
+\b\.#
+\.bak$
+
+# Avoid Devel::Cover files.
+\bcover_db\b
+
+### DEFAULT MANIFEST.SKIP ENDS HERE ####
+
+\.DS_Store$
+\.sw.$
+(\w+-)*(\w+)-\d\.\d+(?:\.tar\.gz)?$
+
+\.t\.log$
+
+\.prove$
+
+# XS shit
+\.(?:bs|c|o)$

Added: branches/upstream/libcheck-isa-perl/current/META.yml
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libcheck-isa-perl/current/META.yml?rev=35634&op=file
==============================================================================
--- branches/upstream/libcheck-isa-perl/current/META.yml (added)
+++ branches/upstream/libcheck-isa-perl/current/META.yml Mon May 18 14:03:30 2009
@@ -1,0 +1,14 @@
+--- #YAML:1.0
+name:                Check-ISA
+version:             0.04
+abstract:            ~
+license:             ~
+author:              ~
+generated_by:        ExtUtils::MakeMaker version 6.44
+distribution_type:   module
+requires:     
+    Sub::Exporter:                 0
+    Test::use::ok:                 0
+meta-spec:
+    url:     http://module-build.sourceforge.net/META-spec-v1.3.html
+    version: 1.3

Added: branches/upstream/libcheck-isa-perl/current/Makefile.PL
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libcheck-isa-perl/current/Makefile.PL?rev=35634&op=file
==============================================================================
--- branches/upstream/libcheck-isa-perl/current/Makefile.PL (added)
+++ branches/upstream/libcheck-isa-perl/current/Makefile.PL Mon May 18 14:03:30 2009
@@ -1,0 +1,20 @@
+#!/usr/bin/perl -w
+
+use strict;
+
+use ExtUtils::MakeMaker;
+
+require 5.008;
+
+WriteMakefile(
+	NAME         => 'Check::ISA',
+	VERSION_FROM => 'lib/Check/ISA.pm',
+	INSTALLDIRS  => 'site',
+	SIGN         => 1,
+	PL_FILES     => { },
+	PREREQ_PM    => {
+		'Test::use::ok' => 0,
+		'Sub::Exporter' => 0,
+	},
+);
+

Added: branches/upstream/libcheck-isa-perl/current/SIGNATURE
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libcheck-isa-perl/current/SIGNATURE?rev=35634&op=file
==============================================================================
--- branches/upstream/libcheck-isa-perl/current/SIGNATURE (added)
+++ branches/upstream/libcheck-isa-perl/current/SIGNATURE Mon May 18 14:03:30 2009
@@ -1,0 +1,32 @@
+This file contains message digests of all files listed in MANIFEST,
+signed via the Module::Signature module, version 0.55.
+
+To verify the content in this distribution, first make sure you have
+Module::Signature installed, then type:
+
+    % cpansign -v
+
+It will check each file's integrity, as well as the signature's
+validity.  If "==> Signature verified OK! <==" is not displayed,
+the distribution may already have been compromised, and you should
+not run its Makefile.PL or Build.PL.
+
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+SHA1 96f13ea0102ac88990ebcaa22a2bbb42795b9010 Changes
+SHA1 b4ac9072eced4f71e32c6a656ac9da889a198a9a MANIFEST
+SHA1 e8482690dad0ff3aaa335aa5b8b650851e504871 MANIFEST.SKIP
+SHA1 fa886734f1ac824bdec8bbac3eec89ca343d6ae5 META.yml
+SHA1 9042468f8165f44dda525f81772639d072aa30c0 Makefile.PL
+SHA1 b405d9a605052702fbbd44be249bc9eca4ca26c4 lib/Check/ISA.pm
+SHA1 bfc0ab184cd121012912221994f134ea188d64e5 t/01_basic.t
+SHA1 82d651c1e8183d46c84e5e8893020f13efdfdaa5 t/02_moose.t
+SHA1 a0ee7cd70d863085bfa406c06e613317c2583f81 t/03_asa.t
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.7 (Darwin)
+
+iD8DBQFIieXOVCwRwOvSdBgRAiaHAKCirButPd/TG1ODReNbOcWtgSMGywCgl9LT
+CeIRN92a5xRMmCDK0GHvNEg=
+=P6Ke
+-----END PGP SIGNATURE-----

Added: branches/upstream/libcheck-isa-perl/current/lib/Check/ISA.pm
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libcheck-isa-perl/current/lib/Check/ISA.pm?rev=35634&op=file
==============================================================================
--- branches/upstream/libcheck-isa-perl/current/lib/Check/ISA.pm (added)
+++ branches/upstream/libcheck-isa-perl/current/lib/Check/ISA.pm Mon May 18 14:03:30 2009
@@ -1,0 +1,232 @@
+#!/usr/bin/perl
+
+package Check::ISA;
+
+use strict;
+use warnings;
+
+use Scalar::Util qw(blessed);
+
+use Sub::Exporter -setup => {
+	exports => [qw(obj obj_does inv inv_does obj_can inv_can)],
+	groups => {
+		default => [qw(obj obj_does inv)],
+	},
+};
+
+use constant CAN_HAS_DOES => not not UNIVERSAL->can("DOES");
+
+use warnings::register;
+
+our $VERSION = "0.04";
+
+sub extract_io {
+	my $glob = shift;
+
+	# handle the case of a string like "STDIN"
+	# STDIN->print is actually:
+	#   const(PV "STDIN") sM/BARE
+	#   method_named(PV "print")
+	# so we need to lookup the glob
+	if ( defined($glob) and !ref($glob) and length($glob) ) {
+		no strict 'refs';
+		$glob = \*{$glob};
+	}
+
+	# extract the IO
+	if ( ref($glob) eq 'GLOB' ) {
+		if ( defined ( my $io = *{$glob}{IO} ) ) {
+			require IO::Handle;
+			return $io;
+		}
+	}
+
+	return;
+}
+
+sub obj ($;$); # predeclare, it's recursive
+
+sub obj ($;$) {
+	my ( $object_or_filehandle, $class ) = @_;
+
+	my $object = blessed($object_or_filehandle)
+		? $object_or_filehandle
+		: extract_io($object_or_filehandle) || return;
+
+	if ( defined $class ) {
+		$object->isa($class)
+	} else {
+		return 1; # return $object? what if it's overloaded?
+	}
+}
+
+sub obj_does ($;$) {
+	my ( $object_or_filehandle, $class_or_role ) = @_;
+
+	my $object = blessed($object_or_filehandle)
+		? $object_or_filehandle
+		: extract_io($object_or_filehandle) || return;
+
+	if ( defined $class_or_role ) {
+		if ( CAN_HAS_DOES ) {
+			# we can be faster in 5.10
+			$object->DOES($class_or_role);
+		} else {
+			my $method = $object->can("DOES") || "isa";
+			$object->$method($class_or_role);
+		}
+	} else {
+		return 1; # return $object? what if it's overloaded?
+	}
+}
+
+sub inv ($;$) {
+	my ( $inv, $class_or_role ) = @_;
+
+	if ( blessed($inv) ) {
+		return obj_does($inv, $class_or_role);
+	} else {
+		# we check just for scalar keys on the stash because:
+		# sub Foo::Bar::gorch {}
+		# Foo->can("isa") # true
+		# Bar->can("isa") # false
+		# this means that 'Foo' is a valid invocant, but Bar is not
+
+		if ( !ref($inv)
+				and
+			defined $inv
+				and
+			length($inv)
+				and
+			do { no strict 'refs'; scalar keys %{$inv . "::"} }
+		) {
+			# it's considered a class name as far as gv_fetchmethod is concerned
+			# even if the class def is empty
+			if ( defined $class_or_role ) {
+				if ( CAN_HAS_DOES ) {
+					# we can be faster in 5.10
+					$inv->DOES($class_or_role);
+				} else {
+					my $method = $inv->can("DOES") || "isa";
+					$inv->$method($class_or_role);
+				}
+			} else {
+				return 1; # $inv is always true, so not a problem, but that would be inconsistent
+			}
+		} else {
+			return;
+		}
+	}
+}
+
+sub obj_can ($;$) {
+	my ( $obj, $method ) = @_;
+	(blessed($obj) ? $obj : extract_io($obj) || return)->can($method);
+}
+
+sub inv_can ($;$) {
+	my ( $inv, $method ) = @_;
+	obj_can($inv, $method) || inv($inv) && $inv->can($method);
+}
+
+
+__PACKAGE__
+
+__END__
+
+=pod
+
+=head1 NAME
+
+Check::ISA - DWIM, correct checking of an object's class
+
+=head1 SYNOPSIS
+
+	use Check::ISA;
+
+	if ( obj($foo, "SomeClass") ) {
+		$foo->some_method;
+	}
+
+
+	# instead of one of these methods:
+	UNIVERSAL::isa($foo, "SomeClass") # WRONG
+	ref $obj eq "SomeClass"; # VERY WRONG
+	$foo->isa("SomeClass") # May die
+	local $@; eval { $foo->isa("SomeClass") } # too long
+
+=head1 DESCRIPTION
+
+This module provides several functions to assist in testing whether a value is
+an object, and if so asking about its class.
+
+=head1 FUNCTIONS
+
+=over 4
+
+=item obj $thing, [ $class ]
+
+This function tests if C<$thing> is an object.
+
+If C<$class> is provided, it also tests tests whether
+C<< $thing->isa($class) >>.
+
+C<$thing> is considered an object if it's blessed, or if it's a C<GLOB> with a
+valid C<IO> slot (the C<IO> slot contains a L<FileHandle> object which is the
+actual invocant). This corresponds directly to C<gv_fetchmethod>.
+
+=item obj_does $thing, [ $class_or_role ]
+
+Just like C<obj> but uses L<UNIVERSAL/DOES> instead of L<UNIVERSAL/isa>.
+
+L<UNIVERSAL/DOES> is just like C<isa>, except it's use is encouraged to query
+about an interface, as opposed to the object structure. If C<DOES> is not
+overridden by th ebject, calling it is semantically identical to calling
+C<isa>.
+
+This is probably reccomended over C<obj> for interoperability, but can be
+slower on Perls before 5.10.
+
+Note that L<UNIVERSAL/DOES>
+
+=item inv $thing, [ $class_or_role ]
+
+Just like C<obj_does>, but also returns true for classes.
+
+Note that this method is slower, but is supposed to return true for any value
+you can call methods on (class, object, filehandle, etc).
+
+Look into L<autobox> if you would like to be able to call methods on all
+values.
+
+=item obj_can $thing, $method
+
+=item inv_can $thing, $method
+
+Checks if C<$thing> is an object or class, and calls C<can> on C<$thing> if
+appropriate.
+
+=back
+
+=head1 SEE ALSO
+
+L<UNIVERSAL>, L<Params::Util>, L<autobox>, L<Moose>, L<asa>
+
+=head1 VERSION CONTROL
+
+This module is maintained using Darcs. You can get the latest version from
+L<http://nothingmuch.woobling.org/code>, and use C<darcs send> to commit
+changes.
+
+=head1 AUTHOR
+
+Yuval Kogman E<lt>nothingmuch at woobling.orgE<gt>
+
+=head1 COPYRIGHT
+
+	Copyright (c) 2008 Yuval Kogman. All rights reserved
+	This program is free software; you can redistribute
+	it and/or modify it under the same terms as Perl itself.
+
+=cut
+

Added: branches/upstream/libcheck-isa-perl/current/t/01_basic.t
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libcheck-isa-perl/current/t/01_basic.t?rev=35634&op=file
==============================================================================
--- branches/upstream/libcheck-isa-perl/current/t/01_basic.t (added)
+++ branches/upstream/libcheck-isa-perl/current/t/01_basic.t Mon May 18 14:03:30 2009
@@ -1,0 +1,109 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More 'no_plan';
+
+use ok 'Check::ISA' => qw(obj obj_does inv obj_can inv_can);
+
+{
+	package Foo;
+	sub new { bless {}, shift }
+
+	package Bar;
+	use base qw(Foo);
+
+	package Gorch;
+	use base qw(Foo);
+
+	sub isa {
+		my ( $self, $class ) = @_;
+
+		$self->SUPER::isa($class)
+			or
+		$class eq 'Faked';
+	}
+
+	package Zot;
+	use base qw(Foo);
+
+	sub DOES {
+		my ( $self, $role ) = @_;
+
+		$self->SUPER::DOES($role)
+			or
+		$role eq 'FakedRole';
+	}
+}
+
+ok( !inv("Class::Does::Not::Exist"), "a random string is not a class" );
+ok( !inv(undef), "undef is not a class" );
+ok( !inv(0), "0 is not a class" );
+ok( !inv(1), "1 is not a class" );
+ok( !inv("0"), "'0' is not a class" );
+ok( !inv("00"), "'00' is not a class" );
+ok( !inv("1"), "'1' is not a class" );
+ok( !inv(""), "'' is not a class" );
+ok( !inv("blah"), "'blah' is not a class" );
+ok( !inv([]), "an array ref is not a class" );
+ok( !inv({}), "a hash ref is not a class" );
+ok( !inv(sub {}), "a subroutine is not a class" );
+
+ok( !obj_can(undef, "foo"), "no foo method for undef" );
+ok( !obj_can("blah", "foo"), "no foo method for string" );
+ok( !obj_can("blah", "isa"), "no foo method for string" );
+ok( !obj_can("", "foo"), "no foo method for empty" );
+ok( !obj_can({}, "foo"), "no foo method for hash refs" );
+
+ok( !inv_can("blah", "foo"), "inv_can on random class" );
+ok( !inv_can("blah", "isa"), "no foo method for string" );
+ok( !inv_can("Foo", "foo"), "inv_can on Foo for nonexistent method" );
+
+no warnings 'once';
+ok( !obj(\*RANDOMGLOB), "a globref without an IO is not an object");
+
+ok( obj(\*STDIN), "a globref with an IO is an object" );
+ok( obj("STDIN"), "a filehandle name is an object" );
+ok( obj_can(\*STDIN, "print"), "STDIN can print" );
+ok( obj_can("STDIN", "print"), "'STDIN' can print" );
+
+ok( inv_can(\*STDIN, "print"), "STDIN can print" );
+ok( inv_can("STDIN", "print"), "'STDIN' can print" );
+
+ok( obj(Foo->new), "Foo->new is an obj" );
+ok( obj(Foo->new, "Foo"), "of class Foo" );
+ok( inv(Foo->new, "Foo"), "inv works too" );
+
+is( obj_can(Foo->new, "new"), \&Foo::new, "obj_can on obj" );
+ok( !obj_can("Foo", "new"), "obj_can on non obj" );
+is( inv_can(Foo->new, "new"), \&Foo::new, "inv_can on obj" );
+is( inv_can("Foo", "new"), \&Foo::new, "inv_can on on obj" );
+
+ok( !obj("Foo"), "the class is not an object" );
+ok( !obj("Foo", "Foo"), "the class is not an object" );
+ok( inv("Foo"), "Foo is a class" );
+ok( inv("Foo", "Foo"), "class is itself" );
+
+ok( !obj("Bar"), "Bar is not an object" );
+ok( inv("Bar"), "Bar is an invocant" );
+ok( inv("Bar", "Bar"), "Bar is a Bar" );
+ok( inv("Bar", "Foo"), "Bar is a Foo" );
+
+ok( inv("Gorch", "Faked"), "faked isa" );
+ok( obj(Gorch->new, "Faked"), "for instance too" );
+ok( inv("Gorch", "Foo"), "SUPER isa" );
+ok( obj(Gorch->new, "Foo"), "for instance too" );
+ok( !inv("Gorch", "Blah"), "false case" );
+ok( !obj(Gorch->new, "Blah"), "for instance too" );
+
+SKIP: {
+	plan skip "No DOES in this version of Perl", 6 unless UNIVERSAL->can("DOES");
+
+	ok( inv("Zot", "FakedRole"), "faked DOES" );
+	ok( obj_does(Zot->new, "FakedRole"), "for instance" );
+	ok( inv("Zot", "Foo"), "DOES also answers isa" );
+	ok( obj_does(Zot->new, "Foo"), "for instance" );
+	ok( !inv("Zot", "OiVey"), "false case" );
+	ok( !obj_does(Zot->new, "Blah"), "for instance too" );
+}

Added: branches/upstream/libcheck-isa-perl/current/t/02_moose.t
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libcheck-isa-perl/current/t/02_moose.t?rev=35634&op=file
==============================================================================
--- branches/upstream/libcheck-isa-perl/current/t/02_moose.t (added)
+++ branches/upstream/libcheck-isa-perl/current/t/02_moose.t Mon May 18 14:03:30 2009
@@ -1,0 +1,67 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More;
+
+BEGIN {
+	plan skip_all => "Moose is required for this test" unless eval { require Moose };
+	plan tests => 25;
+}
+
+{
+	package Foo;
+	use Moose;
+
+	package Bar;
+	use Moose::Role;
+	
+	package Gorch;
+	use Moose;
+
+	extends qw(Foo);
+
+	with qw(Bar);
+
+}
+
+use ok 'Check::ISA' => qw(obj obj_does inv);
+
+ok( obj(Foo->new), "Foo->new is an obj" );
+ok( obj(Foo->new, "Foo"), "of class Foo" );
+ok( obj(Foo->new, "Moose::Object"), "and Moose::Object" );
+ok( inv(Foo->new, "Foo"), "inv works too" );
+
+ok( !obj("Foo"), "the class is not an object" );
+ok( !obj("Foo", "Foo"), "the class is not an object" );
+ok( inv("Foo"), "Foo is a class" );
+ok( inv("Foo", "Foo"), "class is itself" );
+ok( inv("Foo", "Moose::Object"), "class is Moose::Object" );
+
+ok( obj(Gorch->new), "Gorch->new is an obj" );
+ok( obj(Gorch->new, "Gorch"), "of class Gorch" );
+ok( obj(Gorch->new, "Foo"), "and class Foo" );
+ok( obj(Gorch->new, "Moose::Object"), "and Moose::Object" );
+
+SKIP: {
+	skip "Moose 0.52 required for roles", 3 unless eval { Moose->VERSION("0.52") };
+	ok( Gorch->new->does("Bar"), "does Bar" );
+	ok( Gorch->new->DOES("Bar"), "DOES Bar" );
+	ok( obj_does(Gorch->new, "Bar"), "does Bar in obj test" );
+}
+
+ok( inv(Gorch->new, "Gorch"), "inv works too" );
+
+ok( !obj("Gorch"), "the class is not an object" );
+ok( !obj("Gorch", "Gorch"), "the class is not an object" );
+ok( inv("Gorch"), "Gorch is a class" );
+ok( inv("Gorch", "Gorch"), "class is itself" );
+ok( inv("Gorch", "Foo"), "class is Foo" );
+ok( inv("Gorch", "Moose::Object"), "class is Moose::Object" );
+
+SKIP: {
+	plan skip "No DOES in this version of Perl", 1 unless UNIVERSAL->can("DOES");
+	skip "Moose 0.52 required for roles", 1 unless eval { Moose->VERSION("0.52") };
+	ok( inv("Gorch", "Bar"), "class does Bar" );
+}

Added: branches/upstream/libcheck-isa-perl/current/t/03_asa.t
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libcheck-isa-perl/current/t/03_asa.t?rev=35634&op=file
==============================================================================
--- branches/upstream/libcheck-isa-perl/current/t/03_asa.t (added)
+++ branches/upstream/libcheck-isa-perl/current/t/03_asa.t Mon May 18 14:03:30 2009
@@ -1,0 +1,29 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More;
+
+BEGIN {
+	plan skip_all => "asa is required for this test" unless eval { require asa };
+	plan tests => 3;
+}
+
+{
+	package My::WereDuck;
+
+	use asa  'Duck';
+
+	sub new { bless {}, shift }
+
+	sub quack {
+		return "Hi! errr... Quack!";
+	}
+}
+
+use ok 'Check::ISA' => qw(obj inv);
+
+ok( inv("My::WereDuck", "Duck"), "asa's ->isa is respected as a class method" );
+ok( obj(My::WereDuck->new, "Duck"), "and as an instance method" );
+




More information about the Pkg-perl-cvs-commits mailing list