Skip to content

Commit

Permalink
stuff_inputs() works
Browse files Browse the repository at this point in the history
  • Loading branch information
petdance committed Mar 13, 2008
1 parent 0a27a54 commit 85db6cd
Show file tree
Hide file tree
Showing 7 changed files with 176 additions and 41 deletions.
6 changes: 6 additions & 0 deletions Changes
Expand Up @@ -4,6 +4,12 @@ WWW::Mechanize and Test::WWW::Mechanize do not use rt.cpan.org for
bug tracking. They are now being tracked via Google Code at
http://code.google.com/p/www-mechanize/issues/list

NEXT
-----------------------------------
[FIXES]
stuff_inputs() used to do nothing. Now it works.
http://code.google.com/p/www-mechanize/issues/detail?id=9


1.18 Thu Dec 6 10:12:14 CST 2007
------------------------------------
Expand Down
1 change: 1 addition & 0 deletions MANIFEST
Expand Up @@ -22,6 +22,7 @@ t/page_links_content.t
t/page_links_ok.t
t/pod-coverage.t
t/pod.t
t/stuff_inputs.html
t/stuff_inputs.t
t/submit_form_ok.t

Expand Down
2 changes: 1 addition & 1 deletion Makefile.PL
Expand Up @@ -37,7 +37,7 @@ sub MY::postamble {
.PHONY: critic tags
critic:
perlcritic -1 -q -profile perlcriticrc bin/ lib/ t/
perlcritic -1 -q -profile perlcriticrc Mechanize.pm t/
tags:
ctags -f tags --recurse --totals \
Expand Down
2 changes: 1 addition & 1 deletion Mechanize.pm
Expand Up @@ -1063,7 +1063,7 @@ sub stuff_inputs {
}
}

my @inputs = $self->find_all_inputs( type => qr/^(text|textarea|password)$/ );
my @inputs = $self->find_all_inputs( type_regex => qr/^(text|textarea|password)$/ );

foreach my $field ( @inputs ) {
next if $field->readonly();
Expand Down
6 changes: 6 additions & 0 deletions t/stuff_inputs.html
@@ -0,0 +1,6 @@
<html>
<head><title>Title</title></head>
<body>
<form name="testform">
</form>
</body>
188 changes: 153 additions & 35 deletions t/stuff_inputs.t
@@ -1,56 +1,174 @@
#!perl -w
#!perl -Tw

use strict;
use warnings;
use Test::More tests => 3;
use Test::Builder::Tester;
use URI::file;

use constant PORT => 13432;

$ENV{http_proxy} = ''; # All our tests are running on localhost
use Test::More tests => 44;
use URI::file;

BEGIN {
use_ok( 'Test::WWW::Mechanize' );
}

my $server=TWMServer->new(PORT);
my $pid=$server->background;
ok($pid,'HTTP Server started') or die "Can't start the server";
sleep 1; # $server->background() may come back prematurely, so give it a second to fire up
my $mech = Test::WWW::Mechanize->new();
my $uri = URI::file->new_abs( 't/stuff_inputs.html' )->as_string;

sub cleanup { kill(9,$pid) if !$^S };
$SIG{__DIE__}=\&cleanup;
EMPTY_FIELDS: {
$mech->get( $uri );
ok( $mech->success, "Fetched $uri" ) or die q{Can't get test page};

my $mech=Test::WWW::Mechanize->new();
isa_ok( $mech, 'Test::WWW::Mechanize' );
add_test_fields( $mech );
$mech->stuff_inputs();
field_checks(
$mech, {
text0 => '',
text1 => '@',
text10 => '@' x 10,
text70k => '@' x 70000,
textunlimited => '@' x 66000,
textarea => '@' x 66000,
},
'filling empty fields'
);
}

$mech->get('http://localhost:'.PORT.'/form.html');
$mech->stuff_inputs();

MULTICHAR_FILL: {
$mech->get( $uri );
ok( $mech->success, "Fetched $uri" ) or die q{Can't get test page};

add_test_fields( $mech );
$mech->stuff_inputs( { fill => '123' } );
field_checks(
$mech, {
text0 => '',
text1 => '1',
text10 => '1231231231',
text70k => '123' x 23333 . '1',
textunlimited => '123' x 22000,
textarea => '123' x 22000,
},
'multichar_fill'
);
}


cleanup();
OVERWRITE: {
$mech->get( $uri );
ok( $mech->success, "Fetched $uri" ) or die q{Can't get test page};

add_test_fields( $mech );
$mech->stuff_inputs();
is( $mech->value('text10'), '@' x 10, 'overwriting fields: initial fill as expected' );
$mech->stuff_inputs( { fill => 'X' } );
field_checks(
$mech, {
text0 => '',
text1 => 'X',
text10 => 'X' x 10,
text70k => 'X' x 70000,
textunlimited => 'X' x 66000,
textarea => 'X' x 66000,
},
'overwriting fields'
);
}


CUSTOM_FILL: {
$mech->get( $uri );
ok( $mech->success, "Fetched $uri" ) or die q{Can't get test page};

add_test_fields( $mech );
$mech->stuff_inputs( {
fill => 'z',
specs => {
text10 => { fill=>'#' },
textarea => { fill=>'*' },
}
} );
field_checks(
$mech, {
text0 => '',
text1 => 'z',
text10 => '#' x 10,
text70k => 'z' x 70000,
textunlimited => 'z' x 66000,
textarea => '*' x 66000,
},
'custom fill'
);
}

{
package TWMServer;
use base 'HTTP::Server::Simple::CGI';

sub handle_request {
my $self=shift;
my $cgi=shift;
MAXLENGTH: {
$mech->get( $uri );
ok( $mech->success, "Fetched $uri" ) or die q{Can't get test page};

add_test_fields( $mech );
$mech->stuff_inputs( {
specs => {
text10 => { maxlength=>7 },
textarea => { fill=>'*', maxlength=>9 },
}
}
);
field_checks(
$mech, {
text0 => '',
text1 => '@',
text10 => '@' x 7,
text70k => '@' x 70000,
textunlimited => '@' x 66000,
textarea => '*' x 9,
},
'maxlength'
);
}


IGNORE: {
$mech->get( $uri );
ok( $mech->success, "Fetched $uri" ) or die q{Can't get test page};

add_test_fields( $mech );
$mech->stuff_inputs( { ignore => [ 'text10' ] } );
field_checks(
$mech, {
text0 => '',
text1 => '@',
text10 => undef,
text70k => '@' x 70000,
textunlimited => '@' x 66000,
textarea => '@' x 66000,
},
'ignore'
);
}


sub add_test_fields {
my $mech = shift;

HTML::Form::Input->new( type=>'text', name=>'text0', maxlength=>0 )->add_to_form( $mech->current_form() );
HTML::Form::Input->new( type=>'text', name=>'text1', maxlength=>1 )->add_to_form( $mech->current_form() );
HTML::Form::Input->new( type=>'text', name=>'text10', maxlength=>10 )->add_to_form( $mech->current_form() );
HTML::Form::Input->new( type=>'text', name=>'text70k', maxlength=>70000 )->add_to_form( $mech->current_form() );
HTML::Form::Input->new( type=>'text', name=>'textunlimited' )->add_to_form( $mech->current_form() );
HTML::Form::Input->new( type=>'textarea', name=>'textarea' )->add_to_form( $mech->current_form() );

return;
}


my $file=(split('/',$cgi->path_info))[-1]||'index.html';
$file=~s/\s+//g;
sub field_checks {
my $mech = shift;
my $expected = shift;
my $desc = shift;

if(-r "t/html/$file") {
if(my $response=do { local (@ARGV, $/) = "t/html/$file"; <> }) {
print "HTTP/1.0 200 OK\r\n";
print "Content-Type: text/html\r\nContent-Length: ",
length($response), "\r\n\r\n", $response;
return;
}
foreach my $key ( qw( text0 text1 text10 text70k textunlimited textarea ) ) {
is( $mech->value($key), $expected->{$key}, "$desc: field $key" );
}

print "HTTP/1.0 404 Not Found\r\n\r\n";
}
return;
}
12 changes: 8 additions & 4 deletions tags
Expand Up @@ -6,13 +6,19 @@
!_TAG_PROGRAM_VERSION 5.7 //
BAD_GET t/get_ok.t /^BAD_GET: {$/;" l
CONSTRUCTOR_PARMS t/new.t /^CONSTRUCTOR_PARMS: {$/;" l
CUSTOM_FILL t/stuff_inputs.t /^CUSTOM_FILL: {$/;" l
EMPTY_FIELDS t/stuff_inputs.t /^EMPTY_FIELDS: {$/;" l
FOLLOW_BAD_LINK t/follow_link_ok.t /^FOLLOW_BAD_LINK: {$/;" l
FOLLOW_GOOD_LINK t/follow_link_ok.t /^FOLLOW_GOOD_LINK: {$/;" l
GOOD_GET t/get_ok.t /^GOOD_GET: {$/;" l
GOOD_GET t/html_lint_ok.t /^GOOD_GET: {$/;" l
IGNORE t/stuff_inputs.t /^IGNORE: {$/;" l
MAXLENGTH t/stuff_inputs.t /^MAXLENGTH: {$/;" l
MULTICHAR_FILL t/stuff_inputs.t /^MULTICHAR_FILL: {$/;" l
MY Makefile.PL /^sub MY::postamble {$/;" s
NEW t/new.t /^NEW: {$/;" l
NONEXISTENT t/get_ok.t /^use constant NONEXISTENT => 'http:\/\/blahblablah.xx-nonexistent.';$/;" c
OVERWRITE t/stuff_inputs.t /^OVERWRITE: {$/;" l
PORT t/content_contains.t /^use constant PORT => 13432;$/;" c
PORT t/content_lacks.t /^use constant PORT => 13432;$/;" c
PORT t/follow_link_ok.t /^use constant PORT => 13432;$/;" c
Expand All @@ -24,7 +30,6 @@ PORT t/link_status.t /^use constant PORT => 13432;$/;" c
PORT t/links_ok.t /^use constant PORT => 13432;$/;" c
PORT t/page_links_content.t /^use constant PORT => 13432;$/;" c
PORT t/page_links_ok.t /^use constant PORT => 13432;$/;" c
PORT t/stuff_inputs.t /^use constant PORT => 13432;$/;" c
PORT t/submit_form_ok.t /^use constant PORT => 13432;$/;" c
SUBMIT_GOOD_FORM t/submit_form_ok.t /^SUBMIT_GOOD_FORM: {$/;" l
TWMServer t/content_contains.t /^ package TWMServer;$/;" p
Expand All @@ -38,7 +43,6 @@ TWMServer t/link_status.t /^ package TWMServer;$/;" p
TWMServer t/links_ok.t /^ package TWMServer;$/;" p
TWMServer t/page_links_content.t /^ package TWMServer;$/;" p
TWMServer t/page_links_ok.t /^ package TWMServer;$/;" p
TWMServer t/stuff_inputs.t /^ package TWMServer;$/;" p
TWMServer t/submit_form_ok.t /^ package TWMServer;$/;" p
Test t/get_ok-parms.t /^sub Test::WWW::Mechanize::get {$/;" s
Test t/get_ok-parms.t /^sub Test::WWW::Mechanize::success { return 1; }$/;" s
Expand All @@ -48,6 +52,7 @@ _check_links_status Mechanize.pm /^sub _check_links_status {$/;" s
_default_links_desc Mechanize.pm /^sub _default_links_desc {$/;" s
_format_links Mechanize.pm /^sub _format_links {$/;" s
_tag_walk Mechanize.pm /^sub _tag_walk {$/;" s
add_test_fields t/stuff_inputs.t /^sub add_test_fields {$/;" s
base_is Mechanize.pm /^sub base_is {$/;" s
base_like Mechanize.pm /^sub base_like {$/;" s
base_unlike Mechanize.pm /^sub base_unlike {$/;" s
Expand All @@ -63,14 +68,14 @@ cleanup t/link_status.t /^sub cleanup { kill(9,$pid) if !$^S };$/;" s
cleanup t/links_ok.t /^sub cleanup { kill(9,$pid) if !$^S };$/;" s
cleanup t/page_links_content.t /^sub cleanup { kill(9,$pid) if !$^S };$/;" s
cleanup t/page_links_ok.t /^sub cleanup { kill(9,$pid) if !$^S };$/;" s
cleanup t/stuff_inputs.t /^sub cleanup { kill(9,$pid) if !$^S };$/;" s
cleanup t/submit_form_ok.t /^sub cleanup { kill(9,$pid) };$/;" s
content_contains Mechanize.pm /^sub content_contains {$/;" s
content_is Mechanize.pm /^sub content_is {$/;" s
content_lacks Mechanize.pm /^sub content_lacks {$/;" s
content_like Mechanize.pm /^sub content_like {$/;" s
content_unlike Mechanize.pm /^sub content_unlike {$/;" s
critic Makefile.PL /^critic:$/;" l
field_checks t/stuff_inputs.t /^sub field_checks {$/;" s
follow_link_ok Mechanize.pm /^sub follow_link_ok {$/;" s
followable_links Mechanize.pm /^sub followable_links {$/;" s
get_ok Mechanize.pm /^sub get_ok {$/;" s
Expand All @@ -85,7 +90,6 @@ handle_request t/link_status.t /^ sub handle_request {$/;" s
handle_request t/links_ok.t /^ sub handle_request {$/;" s
handle_request t/page_links_content.t /^ sub handle_request {$/;" s
handle_request t/page_links_ok.t /^ sub handle_request {$/;" s
handle_request t/stuff_inputs.t /^ sub handle_request {$/;" s
handle_request t/submit_form_ok.t /^ sub handle_request {$/;" s
has_tag Mechanize.pm /^sub has_tag {$/;" s
has_tag_like Mechanize.pm /^sub has_tag_like {$/;" s
Expand Down

0 comments on commit 85db6cd

Please sign in to comment.