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 )