The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use File::Spec;
use Test::More 0.96;

my $file = 't/example2.html';

subtest 'Sanity check' => sub {
	use_ok( "HTML::SimpleLinkExtor" );
	ok( defined &HTML::SimpleLinkExtor::schemes, "schemes() is defined" );

	ok( -e $file, "Example file is there" );
	};

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

subtest 'No base' => sub {
	my $p;

	subtest 'Create object' => sub {
		$p = HTML::SimpleLinkExtor->new;
		ok( ref $p, "Made parser object" );
		isa_ok( $p, 'HTML::SimpleLinkExtor' );
		can_ok( $p, 'schemes' );
		$p->parse_file( $file );
		};

	subtest 'All links' => sub {
		my @links = $p->links;

		is( scalar @links, 26, "Found the right number of links" );
		};


	# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
	subtest 'HTTP' => sub {
		my @links = $p->schemes( 'http' );
		my $links = $p->schemes( 'http' );

		is( $links, 7, "Got the right number of HTTP links" );
		is( scalar @links, $links, "Found the right number of links" );
		};

	# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
	subtest 'HTTPS' => sub{
		my @links = $p->schemes( 'https' );
		my $links = $p->schemes( 'https' );

		is( $links, 2, "Got the right number of HTTPS links" );
		is( scalar @links, $links, "Found the right number of links" );
		};

	# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
	subtest 'HTTP & HTTPS' => sub {
		my @links = $p->schemes( qw(http https) );
		my $links = $p->schemes( qw(http https) );

		is( $links, 9, "Got the right number of HTTPS links" );
		is( scalar @links, $links, "Found the right number of links" );
		};

	# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
	subtest 'FTP' => sub {
		my @links = $p->schemes( 'ftp' );
		my $links = $p->schemes( 'ftp' );

		is( $links, 1, "Got the right number of FTP links" );
		is( scalar @links, $links, "Found the right number of links" );
		};

	# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
	subtest 'mailto' => sub {
		my @links = $p->schemes( 'mailto' );
		my $links = $p->schemes( 'mailto' );

		is( $links, 1, "Got the right number of MAILTO links" );
		is( scalar @links, $links, "Found the right number of links" );
		};
	};

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

subtest 'HTTP base' => sub {
	my $p;

	subtest 'Create object' => sub {
		$p = HTML::SimpleLinkExtor->new( 'http://www.example.com' );
		ok( ref $p, "Made parser object" );
		isa_ok( $p, 'HTML::SimpleLinkExtor' );
		can_ok( $p, 'schemes' );

		$p->parse_file( $file );
		};

	# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
	subtest 'HTTP' => sub {
		my @links = $p->schemes( 'http' );
		my $links = $p->schemes( 'http' );

		is( $links, 22, "Got the right number of HTTP links" );
		is( scalar @links, $links, "Found the right number of links" );
		};

	# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
	subtest 'HTTP & HTTPS' => sub {
		my @links = $p->schemes( qw(http https) );
		my $links = $p->schemes( qw(http https) );

		is( $links, 24, "Got the right number of HTTPS links" );
		is( scalar @links, $links, "Found the right number of links" );
		};
	};

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

subtest 'FTP base' => sub {
	my $p;

	subtest 'Create object' => sub {
		$p = HTML::SimpleLinkExtor->new( 'ftp://www.example.com' );
		ok( ref $p, "Made parser object" );
		isa_ok( $p, 'HTML::SimpleLinkExtor' );
		can_ok( $p, 'schemes' );

		$p->parse_file( $file );
		};

	# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
	subtest 'FTP' => sub {
		my @links = $p->schemes( 'ftp' );
		my $links = $p->schemes( 'ftp' );

		is( $links, 16, "Got the right number of HTTP links" );
		is( scalar @links, $links, "Found the right number of links" );
		};
	};

done_testing();