package Test::Singleton; # $Id: Singleton.pm,v 1.5 2006/07/15 02:18:42 toni Exp $ use strict 'vars'; use vars qw($VERSION); use Test::Builder; use Test::More; use vars qw($VERSION); $VERSION = "1.03"; my $Test = Test::Builder->new; sub import { my $self = shift; my $caller = caller; *{$caller.'::is_singleton'} = \&is_singleton; $Test->exported_to($caller); $Test->plan(@_); } sub is_singleton { # get the args my ($class, $method1, $method2, $text) = @_; # load the class require_ok( $class ); # set a default test name $text ||= "is singleton"; my ( $instance1, $instance2 ); like ( $instance1 = $class->$method1(), qr/$class/, "instance of object created" ); like ( $instance2 = $class->$method2(), qr/$class/, "instance of object created" ); # are two instaces identical? i.e. is $class a Singleton? cmp_ok ( $instance1, "==", $instance2, $text); } =head1 NAME Test::Singleton - Test for Singleton classes =head1 SYNOPSIS use Test::More tests => 1; use Test::Singleton; is_singleton( "Some::Class", "new", "instance" ); =head1 DESCRIPTION ** If you are unfamiliar with testing B first! ** This is asimple, basic module for checking whether a class is a Singleton. A Singleton describes an object class that can have only one instance in any system. An example of a Singleton might be a print spooler or system registry, or any kind of central dispatcher. For a description and discussion of the Singleton class, see "Design Patterns", Gamma et al, Addison-Wesley, 1995, ISBN 0-201-63361-2. =over 4 =back =head1 SEE ALSO =over 4 =item L Implementation of a "Singleton" class. =item L Interprets the output of your test program. =back =head1 AUTHOR Toni Prug =head1 COPYRIGHT Copyright (c) 2006. Toni Prug. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA See L =cut 1;