Hello community,
here is the log from the commit of package perl-Test-WWW-Mechanize for openSUSE:Factory checked in at 2018-04-25 10:01:07
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-Test-WWW-Mechanize (Old)
and /work/SRC/openSUSE:Factory/.perl-Test-WWW-Mechanize.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-Test-WWW-Mechanize"
Wed Apr 25 10:01:07 2018 rev:9 rq:599329 version:1.50
Changes:
--------
--- /work/SRC/openSUSE:Factory/perl-Test-WWW-Mechanize/perl-Test-WWW-Mechanize.changes 2017-01-10 10:46:41.296244478 +0100
+++ /work/SRC/openSUSE:Factory/.perl-Test-WWW-Mechanize.new/perl-Test-WWW-Mechanize.changes 2018-04-25 10:01:11.611190724 +0200
@@ -1,0 +2,6 @@
+Tue Apr 17 06:00:00 UTC 2018 - coolo@suse.com
+
+- updated to 1.50
+ see /usr/share/doc/packages/perl-Test-WWW-Mechanize/Changes
+
+-------------------------------------------------------------------
Old:
----
Test-WWW-Mechanize-1.48.tar.gz
New:
----
Test-WWW-Mechanize-1.50.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ perl-Test-WWW-Mechanize.spec ++++++
--- /var/tmp/diff_new_pack.8HF5om/_old 2018-04-25 10:01:12.847145378 +0200
+++ /var/tmp/diff_new_pack.8HF5om/_new 2018-04-25 10:01:12.851145231 +0200
@@ -1,7 +1,7 @@
#
# spec file for package perl-Test-WWW-Mechanize
#
-# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -17,22 +17,22 @@
Name: perl-Test-WWW-Mechanize
-Version: 1.48
+Version: 1.50
Release: 0
%define cpan_name Test-WWW-Mechanize
Summary: Testing-specific WWW::Mechanize subclass
License: Artistic-2.0
Group: Development/Libraries/Perl
Url: http://search.cpan.org/dist/Test-WWW-Mechanize/
-Source0: http://www.cpan.org/authors/id/P/PE/PETDANCE/%{cpan_name}-%{version}.tar.gz
+Source0: https://cpan.metacpan.org/authors/id/P/PE/PETDANCE/%{cpan_name}-%{version}.tar.gz
Source1: cpanspec.yml
BuildArch: noarch
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildRequires: perl
BuildRequires: perl-macros
BuildRequires: perl(Carp::Assert::More)
+BuildRequires: perl(HTML::Form)
BuildRequires: perl(HTML::TokeParser)
-BuildRequires: perl(HTML::TreeBuilder)
BuildRequires: perl(HTTP::Server::Simple) >= 0.42
BuildRequires: perl(HTTP::Server::Simple::CGI)
BuildRequires: perl(LWP) >= 6.02
@@ -43,8 +43,8 @@
BuildRequires: perl(WWW::Mechanize) >= 1.68
BuildRequires: perl(parent)
Requires: perl(Carp::Assert::More)
+Requires: perl(HTML::Form)
Requires: perl(HTML::TokeParser)
-Requires: perl(HTML::TreeBuilder)
Requires: perl(HTTP::Server::Simple) >= 0.42
Requires: perl(HTTP::Server::Simple::CGI)
Requires: perl(LWP) >= 6.02
++++++ Test-WWW-Mechanize-1.48.tar.gz -> Test-WWW-Mechanize-1.50.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Test-WWW-Mechanize-1.48/Changes new/Test-WWW-Mechanize-1.50/Changes
--- old/Test-WWW-Mechanize-1.48/Changes 2016-12-30 05:45:53.000000000 +0100
+++ new/Test-WWW-Mechanize-1.50/Changes 2018-04-16 22:18:22.000000000 +0200
@@ -5,7 +5,25 @@
https://github.com/petdance/test-www-mechanize/issues
-1.48 Thu Dec 29 22:45:29 CST 2016
+1.50 Mon Apr 16 15:16:59 CDT 2018
+------------------------------------
+[FIXES]
+Added html_tidy_ok() methods, analogous to html_lint_ok().
+
+Remove unnecessary dependency on HTML::TreeBuilder. Thanks, Kent Fredric.
+
+
+1.49_01 Mon Mar 26 10:58:51 CDT 2018
+------------------------------------
+[ENHANCEMENTS]
+Adding autotidy functionality. autotidy lets you validate every page that
+Mech gets using the HTML::Tidy5 module, just like the autolint feature
+does with the HTML::Lint module. HTML::Tidy5 is a much more complete
+HTML checking tool, and validates HTML5 which HTML::Lint does not. You
+must have HTML::Tidy5 1.00 installed to use autotidy.
+
+
+1.48 Thu Dec 29 22:45:29 CST 2016
------------------------------------
[FIXES]
The linting method html_lint_ok() was not calling the HTML::Lint API
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Test-WWW-Mechanize-1.48/MANIFEST new/Test-WWW-Mechanize-1.50/MANIFEST
--- old/Test-WWW-Mechanize-1.48/MANIFEST 2016-12-30 05:49:39.000000000 +0100
+++ new/Test-WWW-Mechanize-1.50/MANIFEST 2018-04-16 22:19:39.000000000 +0200
@@ -6,6 +6,7 @@
t/00-load.t
t/autolint.t
+t/autotidy.t
t/bad.html
t/badlinks.html
t/click_ok.t
@@ -25,6 +26,7 @@
t/headers.t
t/html/form.html
t/html_lint_ok.t
+t/html_tidy_ok.t
t/html/scratch.html
t/lacks_uncapped_inputs-bad.html
t/lacks_uncapped_inputs-good.html
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Test-WWW-Mechanize-1.48/META.json new/Test-WWW-Mechanize-1.50/META.json
--- old/Test-WWW-Mechanize-1.48/META.json 2016-12-30 05:49:39.000000000 +0100
+++ new/Test-WWW-Mechanize-1.50/META.json 2018-04-16 22:19:39.000000000 +0200
@@ -4,7 +4,7 @@
"Andy Lester "
],
"dynamic_config" : 1,
- "generated_by" : "ExtUtils::MakeMaker version 7.24, CPAN::Meta::Converter version 2.150005",
+ "generated_by" : "ExtUtils::MakeMaker version 7.16, CPAN::Meta::Converter version 2.150005",
"license" : [
"artistic_2"
],
@@ -32,9 +32,10 @@
},
"runtime" : {
"requires" : {
+ "Carp" : "0",
"Carp::Assert::More" : "0",
+ "HTML::Form" : "0",
"HTML::TokeParser" : "0",
- "HTML::TreeBuilder" : "0",
"HTTP::Server::Simple" : "0.42",
"HTTP::Server::Simple::CGI" : "0",
"LWP" : "6.02",
@@ -61,6 +62,6 @@
"url" : "https://github.com/petdance/test-www-mechanize"
}
},
- "version" : "1.48",
- "x_serialization_backend" : "JSON::PP version 2.27300"
+ "version" : "1.50",
+ "x_serialization_backend" : "JSON::PP version 2.27400"
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Test-WWW-Mechanize-1.48/META.yml new/Test-WWW-Mechanize-1.50/META.yml
--- old/Test-WWW-Mechanize-1.48/META.yml 2016-12-30 05:49:39.000000000 +0100
+++ new/Test-WWW-Mechanize-1.50/META.yml 2018-04-16 22:19:39.000000000 +0200
@@ -7,7 +7,7 @@
configure_requires:
ExtUtils::MakeMaker: '0'
dynamic_config: 1
-generated_by: 'ExtUtils::MakeMaker version 7.24, CPAN::Meta::Converter version 2.150005'
+generated_by: 'ExtUtils::MakeMaker version 7.16, CPAN::Meta::Converter version 2.150005'
license: artistic_2
meta-spec:
url: http://module-build.sourceforge.net/META-spec-v1.4.html
@@ -18,9 +18,10 @@
- t
- inc
requires:
+ Carp: '0'
Carp::Assert::More: '0'
+ HTML::Form: '0'
HTML::TokeParser: '0'
- HTML::TreeBuilder: '0'
HTTP::Server::Simple: '0.42'
HTTP::Server::Simple::CGI: '0'
LWP: '6.02'
@@ -36,5 +37,5 @@
homepage: https://github.com/petdance/test-www-mechanize
license: http://www.opensource.org/licenses/artistic-license-2.0
repository: https://github.com/petdance/test-www-mechanize
-version: '1.48'
-x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
+version: '1.50'
+x_serialization_backend: 'CPAN::Meta::YAML version 0.012'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Test-WWW-Mechanize-1.48/Makefile.PL new/Test-WWW-Mechanize-1.50/Makefile.PL
--- old/Test-WWW-Mechanize-1.48/Makefile.PL 2016-08-02 21:49:26.000000000 +0200
+++ new/Test-WWW-Mechanize-1.50/Makefile.PL 2018-04-16 22:18:22.000000000 +0200
@@ -10,8 +10,9 @@
PL_FILES => {},
PREREQ_PM => {
'parent' => 0,
+ 'Carp' => 0,
'Carp::Assert::More' => 0,
- 'HTML::TreeBuilder' => 0,
+ 'HTML::Form' => 0,
'HTTP::Server::Simple' => '0.42',
'HTTP::Server::Simple::CGI' => 0,
'HTML::TokeParser' => 0,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Test-WWW-Mechanize-1.48/Mechanize.pm new/Test-WWW-Mechanize-1.50/Mechanize.pm
--- old/Test-WWW-Mechanize-1.48/Mechanize.pm 2016-12-30 05:45:56.000000000 +0100
+++ new/Test-WWW-Mechanize-1.50/Mechanize.pm 2018-04-16 22:18:22.000000000 +0200
@@ -9,11 +9,11 @@
=head1 VERSION
-Version 1.48
+Version 1.50
=cut
-our $VERSION = '1.48';
+our $VERSION = '1.50';
=head1 SYNOPSIS
@@ -90,6 +90,8 @@
my $lint = HTML::Lint->new( only_types => HTML::Lint::Error::STRUCTURE );
my $mech = Test::WWW::Mechanize->new( autolint => $lint );
+The same is also possible with C<< autotidy => 1 >> to use HTML::Tidy5.
+
=over
=item * get_ok()
@@ -118,7 +120,8 @@
The C<< $mech->get_ok() >> only counts as one test in the test count. Both the
main IO operation and the linting must pass for the entire test to pass.
-You can control autolint on the fly with the C<< autolint >> method.
+You can control autolint and autotidy on the fly with the C<autolint>
+and C<autotidy> methods.
=cut
@@ -131,10 +134,12 @@
);
my $autolint = delete $args{autolint};
+ my $autotidy = delete $args{autotidy};
my $self = $class->SUPER::new( %args );
$self->autolint( $autolint );
+ $self->autotidy( $autotidy );
return $self;
}
@@ -160,12 +165,12 @@
$self->get( $url, %opts );
my $ok = $self->success;
- $ok = $self->_maybe_lint( $ok, $desc );
+ $ok = $self->_post_load_validation( $ok, $desc );
return $ok;
}
-sub _maybe_lint {
+sub _post_load_validation {
my $self = shift;
my $ok = shift;
my $desc = shift;
@@ -173,10 +178,33 @@
local $Test::Builder::Level = $Test::Builder::Level + 1;
if ( $ok ) {
- if ( $self->is_html && $self->autolint ) {
- $ok = $self->_lint_content_ok( $desc );
+ my $emitted_ok = 0;
+ if ( $self->is_html ) {
+ if ( $self->autolint && $self->autotidy ) {
+ my $msg = 'autolint & autotidy';
+ $msg .= ": $desc" if defined $desc;
+ $TB->subtest(
+ $desc,
+ sub {
+ $self->_lint_content_ok();
+ $self->_tidy_content_ok();
+ }
+ );
+ ++$emitted_ok;
+ }
+ else {
+ if ( $self->autolint ) {
+ $ok = $self->_lint_content_ok( $desc );
+ ++$emitted_ok;
+ }
+ elsif ( $self->autotidy ) {
+ $ok = $self->_tidy_content_ok( $desc );
+ ++$emitted_ok;
+ }
+ }
}
- else {
+
+ if ( !$emitted_ok ) {
$TB->ok( $ok, $desc );
}
}
@@ -225,6 +253,12 @@
well-behaved C<*_ok()> functions, it returns true if the test passed,
or false if not.
+B<NOTE> Due to compatibility reasons it is not possible to pass
+additional LWP_options beyond form data via this method (such as
+Content or Content-Type). It is recommend that you use WWW::Mechanize's
+post() directly for instances where more granular control of the post
+is needed.
+
A default description of "POST to $url" is used if none if provided.
=cut
@@ -236,7 +270,7 @@
$self->post( $url, \%opts );
my $ok = $self->success;
- $ok = $self->_maybe_lint( $ok, $desc );
+ $ok = $self->_post_load_validation( $ok, $desc );
return $ok;
}
@@ -294,7 +328,7 @@
}
my $ok = $self->success;
- $ok = $self->_maybe_lint( $ok, $desc );
+ $ok = $self->_post_load_validation( $ok, $desc );
return $ok;
}
@@ -355,7 +389,7 @@
my $response = $self->submit_form( %{$parms} );
my $ok = $response && $response->is_success;
- $ok = $self->_maybe_lint( $ok, $desc );
+ $ok = $self->_post_load_validation( $ok, $desc );
return $ok;
}
@@ -400,7 +434,7 @@
my $response = $self->follow_link( %{$parms} );
my $ok = $response && $response->is_success;
- $ok = $self->_maybe_lint( $ok, $desc );
+ $ok = $self->_post_load_validation( $ok, $desc );
return $ok;
}
@@ -426,7 +460,7 @@
my $ok = $response->is_success;
- $ok = $self->_maybe_lint( $ok, $desc );
+ $ok = $self->_post_load_validation( $ok, $desc );
return $ok;
}
@@ -551,8 +585,9 @@
=head2 $mech->html_lint_ok( [$desc] )
-Checks the validity of the HTML on the current page. If the page is not
-HTML, then it fails. The URI is automatically appended to the I<$desc>.
+Checks the validity of the HTML on the current page using the HTML::Lint
+module. If the page is not HTML, then it fails. The URI is automatically
+appended to the I<$desc>.
Note that HTML::Lint must be installed for this to work. Otherwise,
it will blow up.
@@ -579,12 +614,13 @@
return $ok;
}
+
sub _lint_content_ok {
+ local $Test::Builder::Level = $Test::Builder::Level + 1;
+
my $self = shift;
my $desc = shift;
- local $Test::Builder::Level = $Test::Builder::Level + 1;
-
my $module = "HTML::Lint 2.20";
if ( not ( eval "use $module; 1;" ) ) {
die "Test::WWW::Mechanize can't do linting without $module: $@";
@@ -619,6 +655,79 @@
return $ok;
}
+
+=head2 $mech->html_tidy_ok( [$desc] )
+
+Checks the validity of the HTML on the current page using the HTML::Tidy
+module. If the page is not HTML, then it fails. The URI is automatically
+appended to the I<$desc>.
+
+Note that HTML::tidy must be installed for this to work. Otherwise,
+it will blow up.
+
+=cut
+
+sub html_tidy_ok {
+ my $self = shift;
+ my $desc = shift;
+
+ my $uri = $self->uri;
+ $desc = $desc ? "$desc ($uri)" : $uri;
+
+ my $ok;
+
+ if ( $self->is_html ) {
+ $ok = $self->_tidy_content_ok( $desc );
+ }
+ else {
+ $ok = $TB->ok( 0, $desc );
+ $TB->diag( q{This page doesn't appear to be HTML, or didn't get the proper text/html content type returned.} );
+ }
+
+ return $ok;
+}
+
+
+sub _tidy_content_ok {
+ local $Test::Builder::Level = $Test::Builder::Level + 1;
+
+ my $self = shift;
+ my $desc = shift;
+
+ my $module = 'HTML::Tidy5 1.00';
+
+ if ( not ( eval "use $module; 1;" ) ) {
+ die "Test::WWW::Mechanize can't do tidying without $module: $@";
+ }
+
+ my $tidy = $self->{autotidy};
+ if ( ref $tidy && $tidy->isa('HTML::Tidy5') ) {
+ $tidy->clear_messages();
+ }
+ else {
+ $tidy = HTML::Tidy5->new();
+ }
+
+ $tidy->parse( '', $self->content );
+
+ my @messages = $tidy->messages;
+ my $nmessages = @messages;
+ my $ok;
+ if ( $nmessages ) {
+ $ok = $TB->ok( 0, $desc );
+ $TB->diag( 'HTML::Tidy5 messages for ' . $self->uri );
+ $TB->diag( $_->as_string ) for @messages;
+ my $s = $nmessages == 1 ? '' : 's';
+ $TB->diag( "$nmessages message$s on the page" );
+ }
+ else {
+ $ok = $TB->ok( 1, $desc );
+ }
+
+ return $ok;
+}
+
+
=head2 $mech->title_is( $str [, $desc ] )
Tells if the title of the page is the given string.
@@ -641,7 +750,7 @@
Tells if the title of the page matches the given regex.
- $mech->title_like( qr/Invoices for (.+)/
+ $mech->title_like( qr/Invoices for (.+)/ );
=cut
@@ -659,7 +768,7 @@
Tells if the title of the page matches the given regex.
- $mech->title_unlike( qr/Invoices for (.+)/
+ $mech->title_unlike( qr/Invoices for (.+)/ );
=cut
@@ -1506,6 +1615,38 @@
}
+=head2 $mech->autotidy( [$status] )
+
+Without an argument, this method returns a true or false value indicating
+whether autotidy is active.
+
+When passed an argument, autotidy is turned on or off depending on whether
+the argument is true or false, and the previous autotidy status is returned.
+As with the autotidy option of C<< new >>, C<< $status >> can be an
+L<< HTML::Tidy5 >> object.
+
+If autotidy is currently using an L<< HTML::Tidy5 >> object you provided,
+the return is that object, so you can change and exactly restore
+autotidy status:
+
+ my $old_status = $mech->autotidy( 0 );
+ ... operations that should not be tidied ...
+ $mech->autotidy( $old_status );
+
+=cut
+
+sub autotidy {
+ my $self = shift;
+
+ my $ret = $self->{autotidy};
+ if ( @_ ) {
+ $self->{autotidy} = shift;
+ }
+
+ return $ret;
+}
+
+
=head2 $mech->grep_inputs( \%properties )
grep_inputs() returns an array of all the input controls in the
@@ -1859,7 +2000,7 @@
=head1 COPYRIGHT & LICENSE
-Copyright 2004-2016 Andy Lester.
+Copyright 2004-2018 Andy Lester.
This library is free software; you can redistribute it and/or modify it
under the terms of the Artistic License version 2.0.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Test-WWW-Mechanize-1.48/README.md new/Test-WWW-Mechanize-1.50/README.md
--- old/Test-WWW-Mechanize-1.48/README.md 2016-12-30 05:44:52.000000000 +0100
+++ new/Test-WWW-Mechanize-1.50/README.md 2018-03-26 18:22:58.000000000 +0200
@@ -37,6 +37,27 @@
but has nicer diagnostics if they fail.
+Test::WWW::Mechanize also has functionality to automatically validate every page it goes to.
+
+ use Test::WWW::Mechanize;
+
+ my $mech = Test::WWW::Mechanize->new( autotidy => 1 );
+ $mech->get_ok( $url );
+
+which can give errors like this:
+
+ not ok 1 - GET $url
+ # Failed test '$url'
+ # at foo.pl line 7.
+ # HTML::Tidy5 messages for $url
+ # (11:1) Warning: missing </b> before </body>
+ # (7:18) Warning: <a> escaping malformed URI reference
+ # (7:18) Warning: <a> illegal characters found in URI
+ # (11:1) Warning: trimming empty <b>
+
+The autotidy feature requires the HTML::Tidy5 module. The similar,
+but less robust, autolint feature requires the HTML::Lint module.
+
# INSTALLATION
To install this module, run the following commands:
@@ -48,7 +69,7 @@
# COPYRIGHT AND LICENSE
-Copyright (C) 2004-2016 Andy Lester
+Copyright (C) 2004-2018 Andy Lester
This library is free software; you can redistribute it and/or modify it
under the terms of the Artistic License version 2.0.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Test-WWW-Mechanize-1.48/t/00-load.t new/Test-WWW-Mechanize-1.50/t/00-load.t
--- old/Test-WWW-Mechanize-1.48/t/00-load.t 2016-07-09 04:56:03.000000000 +0200
+++ new/Test-WWW-Mechanize-1.50/t/00-load.t 2018-04-16 22:18:22.000000000 +0200
@@ -13,4 +13,16 @@
diag( "Testing Test::WWW::Mechanize $Test::WWW::Mechanize::VERSION, with WWW::Mechanize $WWW::Mechanize::VERSION, LWP $LWP::VERSION, Test::More $Test::More::VERSION, Perl $], $^X" );
+for my $module ( qw( HTML::Lint HTML::Tidy5 ) ) {
+ my $rc = eval "use $module; 1;";
+ if ( $rc ) {
+ no strict 'refs';
+ my $version = ${"${module}::VERSION"};
+ diag( "Found $module $version" );
+ }
+ else {
+ diag( "No $module found." );
+ }
+}
+
done_testing();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Test-WWW-Mechanize-1.48/t/autotidy.t new/Test-WWW-Mechanize-1.50/t/autotidy.t
--- old/Test-WWW-Mechanize-1.48/t/autotidy.t 1970-01-01 01:00:00.000000000 +0100
+++ new/Test-WWW-Mechanize-1.50/t/autotidy.t 2018-03-26 18:22:58.000000000 +0200
@@ -0,0 +1,154 @@
+#!/usr/bin/env perl -T
+
+use strict;
+use warnings;
+use Test::Builder::Tester;
+use Test::More;
+use URI::file;
+
+use Test::WWW::Mechanize;
+
+BEGIN {
+ my $module = 'HTML::Tidy5 1.00';
+
+ # Load HTML::Lint here for the imports
+ if ( not eval "use $module; 1;" ) {
+ plan skip_all => "$module is not installed, cannot test autotidy.";
+ }
+ plan tests => 5;
+}
+
+
+subtest 'Accessor and mutator' => sub {
+ plan tests => 17;
+
+ my $tidy = HTML::Tidy5->new;
+ isa_ok( $tidy, 'HTML::Tidy5' );
+
+ ACCESSOR: {
+ my $mech = Test::WWW::Mechanize->new();
+ ok( !$mech->autotidy(), 'no autotidy to new yields autotidy off' );
+
+ $mech = Test::WWW::Mechanize->new( autotidy => undef );
+ ok( !$mech->autotidy(), 'undef to new yields autotidy off' );
+
+ $mech = Test::WWW::Mechanize->new( autotidy => 0 );
+ ok( !$mech->autotidy(), '0 to new yields autotidy off' );
+
+ $mech = Test::WWW::Mechanize->new( autotidy => 1 );
+ ok( $mech->autotidy(), '1 to new yields autotidy on' );
+
+ $mech = Test::WWW::Mechanize->new( autotidy => [] );
+ ok( $mech->autotidy(), 'non-false, non-object to new yields autotidy on' );
+
+ $mech = Test::WWW::Mechanize->new( autotidy => $tidy );
+ ok( $mech->autotidy(), 'HTML::Tidy5 object to new yields autotidy on' );
+ }
+
+ MUTATOR: {
+ my $mech = Test::WWW::Mechanize->new();
+
+ ok( !$mech->autotidy(0), '0 returns autotidy off' );
+ ok( !$mech->autotidy(), '0 autotidy really off' );
+
+ ok( !$mech->autotidy(''), '"" returns autotidy off' );
+ ok( !$mech->autotidy(), '"" autotidy really off' );
+
+ ok( !$mech->autotidy(1), '1 returns autotidy off (prior state)' );
+ ok( $mech->autotidy(), '1 autotidy really on' );
+
+ ok( $mech->autotidy($tidy), 'HTML::Tidy5 object returns autotidy on (prior state)' );
+ ok( $mech->autotidy(), 'HTML::Tidy5 object autotidy really on' );
+ my $ret = $mech->autotidy( 0 );
+ isa_ok( $ret, 'HTML::Tidy5' );
+ ok( !$mech->autotidy(), 'autotidy off after nuking HTML::Tidy5 object' );
+ }
+};
+
+
+subtest 'Fluffy page has errors' => sub {
+ plan tests => 2;
+
+ my $mech = Test::WWW::Mechanize->new( autotidy => 1 );
+ isa_ok( $mech, 'Test::WWW::Mechanize' );
+
+ my $uri = URI::file->new_abs( 't/fluffy.html' )->as_string;
+
+ test_out( "not ok 1 - GET $uri" );
+ test_fail( +5 );
+ test_err( "# HTML::Tidy5 messages for $uri" );
+ test_err( '# (1:1) Warning: missing <!DOCTYPE> declaration' );
+ test_err( '# (10:9) Warning: <img> lacks "alt" attribute' );
+ test_err( '# 2 messages on the page' );
+ $mech->get_ok( $uri );
+ test_test( 'Fluffy page should have fluffy errors' );
+};
+
+
+subtest 'Custom tidy ignores fluffy errors' => sub {
+ plan tests => 4;
+
+ my $tidy = HTML::Tidy5->new( { show_warnings => 0 } );
+ isa_ok( $tidy, 'HTML::Tidy5' );
+
+ my $mech = Test::WWW::Mechanize->new( autotidy => $tidy );
+ isa_ok( $mech, 'Test::WWW::Mechanize' );
+
+ my $uri = URI::file->new_abs( 't/fluffy.html' )->as_string;
+ $mech->get_ok( $uri, 'Fluffy page should not have errors' );
+
+ # And if we go to another page, the autolint object has been reset.
+ $mech->get_ok( $uri, 'Second pass at the fluffy page should not have errors, either' );
+};
+
+
+subtest 'Get good HTML' => sub {
+ plan tests => 3;
+
+ my $mech = Test::WWW::Mechanize->new( autotidy => 1 );
+ isa_ok( $mech, 'Test::WWW::Mechanize' );
+
+ my $uri = URI::file->new_abs( 't/good.html' )->as_string;
+ $mech->get_ok( $uri );
+
+ test_out( "ok 1 - GET $uri" );
+ $mech->get_ok( $uri, "GET $uri" );
+ test_test( 'Good GET, good HTML' );
+};
+
+
+subtest 'Get bad HTML' => sub {
+ plan tests => 3;
+
+ my $mech = Test::WWW::Mechanize->new( autotidy => 1 );
+ isa_ok( $mech, 'Test::WWW::Mechanize' );
+
+ my $uri = URI::file->new_abs( 't/bad.html' )->as_string;
+
+ # Test via get_ok
+ test_out( "not ok 1 - GET $uri" );
+ test_fail( +7 );
+ test_err( "# HTML::Tidy5 messages for $uri" );
+ test_err( '# (1:1) Warning: missing <!DOCTYPE> declaration' );
+ test_err( '# (8:33) Warning: discarding unexpected </b>' );
+ test_err( '# (8:9) Warning: missing </a>' );
+ #test_err( '# (7:9) Warning: <a> proprietary attribute "hrex"' );
+ test_err( '# 3 messages on the page' );
+ $mech->get_ok( $uri, "GET $uri" );
+ test_test( 'get_ok complains about bad HTML' );
+
+ # Test via follow_link_ok
+ test_out( 'not ok 1 - Following link back to bad.html' );
+ test_fail( +7 );
+ test_err( "# HTML::Tidy5 messages for $uri" );
+ test_err( '# (1:1) Warning: missing <!DOCTYPE> declaration' );
+ test_err( '# (8:33) Warning: discarding unexpected </b>' );
+ test_err( '# (8:9) Warning: missing </a>' );
+ #test_err( '# (7:9) Warning: <a> proprietary attribute "hrex"' );
+ test_err( '# 3 messages on the page' );
+ $mech->follow_link_ok( { text => 'Back to bad' }, 'Following link back to bad.html' );
+ test_test( 'follow_link_ok complains about bad HTML' );
+};
+
+done_testing();
+exit 0;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Test-WWW-Mechanize-1.48/t/good.html new/Test-WWW-Mechanize-1.50/t/good.html
--- old/Test-WWW-Mechanize-1.48/t/good.html 2016-07-09 04:56:03.000000000 +0200
+++ new/Test-WWW-Mechanize-1.50/t/good.html 2018-03-26 18:22:58.000000000 +0200
@@ -1,3 +1,4 @@
+<!DOCTYPE html>
<html>
<head>
<title>Test Page</title>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Test-WWW-Mechanize-1.48/t/html_lint_ok.t new/Test-WWW-Mechanize-1.50/t/html_lint_ok.t
--- old/Test-WWW-Mechanize-1.48/t/html_lint_ok.t 2016-07-09 04:56:03.000000000 +0200
+++ new/Test-WWW-Mechanize-1.50/t/html_lint_ok.t 2018-04-16 22:18:22.000000000 +0200
@@ -10,8 +10,9 @@
BEGIN {
# Load HTML::Lint here for the imports
- if ( not eval 'use HTML::Lint 2.20; 1;' ) {
- plan skip_all => 'HTML::Lint is not installed, cannot test autolint' if $@;
+ my $module = 'HTML::Lint 2.20';
+ if ( not eval "use $module; 1;" ) {
+ plan skip_all => "$module is not installed, cannot test html_lint_ok" if $@;
}
plan tests => 3;
}
@@ -35,3 +36,4 @@
}
done_testing();
+exit 0;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Test-WWW-Mechanize-1.48/t/html_tidy_ok.t new/Test-WWW-Mechanize-1.50/t/html_tidy_ok.t
--- old/Test-WWW-Mechanize-1.48/t/html_tidy_ok.t 1970-01-01 01:00:00.000000000 +0100
+++ new/Test-WWW-Mechanize-1.50/t/html_tidy_ok.t 2018-04-16 22:18:22.000000000 +0200
@@ -0,0 +1,38 @@
+#!perl -T
+
+use strict;
+use warnings;
+use Test::Builder::Tester;
+use Test::More;
+
+use Test::WWW::Mechanize;
+use URI::file;
+
+BEGIN {
+ my $module = 'HTML::Tidy5 1.00';
+ if ( not eval "use $module; 1;" ) {
+ plan skip_all => "$module is not installed, cannot test html_tidy_ok" if $@;
+ }
+ plan tests => 3;
+}
+
+GOOD_GET: {
+ my $mech = Test::WWW::Mechanize->new;
+ isa_ok( $mech, 'Test::WWW::Mechanize' );
+
+ my $uri = URI::file->new_abs( 't/bad.html' )->as_string;
+ $mech->get_ok( $uri, 'Fetching the file from disk' );
+
+ test_out( "not ok 1 - checking HTML ($uri)" );
+ test_fail( +6 );
+ test_err( "# HTML::Tidy5 messages for $uri" );
+ test_err( '# (1:1) Warning: missing <!DOCTYPE> declaration' );
+ test_err( '# (8:33) Warning: discarding unexpected </b>' );
+ test_err( '# (8:9) Warning: missing </a>' );
+ test_err( '# 3 messages on the page' );
+ $mech->html_tidy_ok( 'checking HTML' );
+ test_test( 'Proper html_tidy_ok results' );
+}
+
+done_testing();
+exit 0;