The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# $Id: 00-load.t 1460 2016-02-25 09:55:34Z willem $	-*-perl-*-

use strict;
use Test::More;


my @module = qw(
	Net::DNS
	Net::DNS::SEC
	Data::Dumper
	Digest::BubbleBabble
	Digest::GOST
	Digest::HMAC
	Digest::MD5
	Digest::SHA
	File::Spec
	FileHandle
	IO::File
	IO::Select
	IO::Socket
	IO::Socket::INET
	IO::Socket::INET6
	IO::Socket::IP
	MIME::Base64
	Net::LibIDN
	PerlIO
	Scalar::Util
	Socket
	Time::Local
	);

diag("\n\nThese tests were run using:\n");
foreach my $module (@module) {
	my $loaded = eval("require $module") || next;
	my $revnum = $loaded ? $module->VERSION : "\t\tn/a";
	diag sprintf "\t%-25s  %s", $module, $revnum || '?';
}

diag("set environment variable NET_DNS_DEBUG to get all versions\n\n");


plan tests => 20 + scalar(@Net::DNS::EXPORT);


use_ok('Net::DNS');

is( Net::DNS->version, $Net::DNS::VERSION, 'Net::DNS->version');


#
# Check on-demand loading using this (incomplete) list of RR packages
my @rrs = qw( A AAAA CNAME MX NS NULL PTR SOA TXT );

sub is_rr_loaded {
	my $rr = shift;
	return $INC{"Net/DNS/RR/$rr.pm"} ? 1 : 0;
}

#
# Make sure that we start with none of the RR packages loaded
foreach my $rr (@rrs) {
	ok( !is_rr_loaded($rr), "not yet loaded Net::DNS::RR::$rr" );
}

#
# Check that each RR package is loaded on demand
local $SIG{__WARN__} = sub { };					# suppress warnings

foreach my $rr (@rrs) {
	my $object = eval { new Net::DNS::RR( name => '.', type => $rr ); };
	diag($@) if $@;						# report exceptions

	ok( is_rr_loaded($rr), "loaded package Net::DNS::RR::$rr" );
}


#
# Check that Net::DNS symbol table was imported correctly
{
	no strict 'refs';
	foreach my $sym (@Net::DNS::EXPORT) {
		ok( defined &{$sym}, "$sym is imported" );
	}
}


exit;