CGI-Test-Input-Custom
view release on metacpan or search on metacpan
lib/CGI/Test/Input/Custom.pm view on Meta::CPAN
package CGI::Test::Input::Custom;
our $VERSION = '0.03';
use strict;
use warnings;
use Carp;
use Encode qw(encode);
use base 'CGI::Test::Input';
sub _firstdef {
defined && return $_ for @_;
undef;
}
sub new {
my ($class, %args) = @_;
my $this = bless {}, $class;
$this->_init;
$this->{_ctic_mime_type} = _firstdef(delete $args{-mime_type}, 'application/octet-stream');
$this->{_data_decoded} = _firstdef(delete $args{-content}, '');
$this->{_encoding} = _firstdef(delete $args{-encoding}, 'utf8');
%args and croak "unsupported constructor argument(s) ".join(', ', keys %args);
$this->{stale} = 1;
$this;
}
*make = \&new;
for (qw(widget field file file_now)) {
my $m = "add_$_";
no strict 'refs';
*$m = sub { croak "method '$m' is not supported by ".__PACKAGE__." objects" };
}
sub set_mime_type {
my ($this, $type) = @_;
$this->{_ctic_mime_type} = $type;
}
sub mime_type { shift->{_ctic_mime_type} }
sub _build_data {
my $this = shift;
encode($this->{_encoding}, $this->{_data_decoded})
}
sub add_content {
my $this = shift;
$this->{_data_decoded} .= join('', @_);
$this->{stale} = 1;
}
1;
__END__
=head1 NAME
CGI::Test::Input::Custom - send custom data to CGIs for testing
=head1 SYNOPSIS
use CGI::Test;
use CGI::Test::Input::Custom;
my $ct = CGI::Test->new(...);
my $input = CGI::Test::Input::Custom->new();
$input->set_mime_type('text/xml', -encoding => 'utf8');
$input->add_content(<<EOX);
<?xml version="1.0" encoding="UTF-8"?>
<FooBar>
<Chanel>Whatever</Chanel>
<Date>20080304231200</Date>
</FooBar>
EOX
my $page = $ct->POST('http://www.foo.org/cgi/sendMeXML', $input);
=head1 DESCRIPTION
This module allows to send custom data to CGIs on POST requests when
using the L<CGI::Test> framework.
=head2 API
These are the methods available:
=over 4
=item CGI::Test::Input::Custom->new(%args)
creates a new input object.
The accepted arguments are as follows:
=over 4
=item -mime_type => $mime_type
mime type of the content. Default is C<application/octect-stream>.
=item -content => $data
data to send in the request
( run in 1.949 second using v1.01-cache-2.11-cpan-140bd7fdf52 )