package SMS::Send::Test;

=pod

=head1 NAME

SMS::Send::Test - SMS::Send International-Class Testing Driver

=head1 SYNOPSIS

  # Create a testing sender
  my $send = SMS::Send->new( 'Test' );
  
  # Clear the message trap
  $send->clear;
  
  # Send a message
  $send->send_sms(
      text => 'Hi there',
      to   => '+61 (4) 1234 5678',
  );
  
  # Get the message from the trap
  my @messages = $send->messages;

=head1 DESCRIPTION

L<SMS::Send> supports two classes of drivers.

An international class named in the format C<SMS::Send::Foo>, which only
accept international numbers in C<+1 XXX XXXXX> format, and
regional-context drivers in the format C<SMS::Send::XX::Foo> which will
also accept a non-leading-plus number in the format applicable within that
region (in the above case, Australia).

L<SMS::Send::Test> is the testing driver for the international class of
drivers. Except for the name, it is otherwise identical to
L<SMS::Send::AU::Test>.

Its two roles are firstly to always exist (be installed) and secondly
to act as a "trap" for messages. Messages sent via SMS::Send::Test
always succeed, and the messages can be recovered for testing after
sending.

Note that the trap is done on a per-driver-handle basis, and is not
shared between multiple driver handles.

=cut

use 5.006;
use strict;
use SMS::Send::Driver ();

use vars qw{$VERSION @ISA};
BEGIN {
	$VERSION = '0.06';
	@ISA     = 'SMS::Send::Driver';
}





#####################################################################
# Constructor

sub new {
	my $class = shift;

	# Create the object
	my $self = bless {
		messages => [ ],
	}, $class;

	$self;
}

sub send_sms {
	my $self     = shift;
	my $messages = $self->{messages};
	push @$messages, [ @_ ];
	return 1;
}

=pod

=head1 METHODS

SMS::Send::Test inherits all the methods of the parent L<SMS::Send::Driver>
class, and adds the following.

=head2 messages

The C<messages> method retrieves as a list all of the messages in the
message trap.

=cut

sub messages {
	my $self = shift;
	return @{$self->{messages}};
}

=pod

=head2 clear

The C<clear> method clears the message trap. This should be done before
each chunk of test code to ensure you are starting from a known state.

Returns true as a convenience.
=cut

sub clear {
	my $self = shift;
	$self->{messages} = [];
	return 1;
}

1;

=pod

=head1 SUPPORT

Bugs should be reported via the CPAN bug tracker at

L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=SMS-Send>

For other issues, contact the author.

=head1 AUTHOR

Adam Kennedy E<lt>adamk@cpan.orgE<gt>

=head1 COPYRIGHT

Copyright 2005 - 2011 Adam Kennedy.

This program is free software; you can redistribute
it and/or modify it under the same terms as Perl itself.

The full text of the license can be found in the
LICENSE file included with this module.

=cut
