The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

# Tests the basic functionality of SQLite.

use strict;

BEGIN {
	$|  = 1;
	$^W = 1;
}

use Test::More tests => 9;
use File::Spec::Functions ':ALL';
use File::Remove 'clear';
use IO::Compress::Gzip ();
use URI::file          ();
use t::lib::Test;

# Flush any existing mirror database file
clear(mirror_db('ORLite::Mirror::Test'));

# Locate the broken compressed database
my $broken     = catfile(qw{ t data broken.db    });
my $broken_gz  = catfile(qw{ t data broken.db.gz });
my $broken_url = URI::file->new_abs($broken_gz)->as_string;
ok( -f $broken, 'Found test broken database' );

# Locate the stub file
my $stub     = catfile(qw{ share stub.db });
my $stub_url = URI::file->new_abs($stub)->as_string;
ok( -f $stub, 'Found test stub database' );





######################################################################
# Compile-time mirror and loading failure

SCOPE: {
	# Create the test package
	eval <<"END_PERL";
	package ORLite::Mirror::Test1;

	use strict;
	use vars qw{\$VERSION};
	BEGIN {
		\$VERSION = '1.00';
	}

	use ORLite::Mirror {
		url   => '$broken_url',
		prune => 1,
		array => 0,
	};

	1;
END_PERL

	# Did the class fail at compile time as expected
	ok( $@, 'Loading broke as expected' );
	like( $@, qr/not a database/, 'Error message matches expected' );
}





######################################################################
# Compile-time stub failure

SCOPE: {
	# Create the test package
	eval <<"END_PERL";
	package ORLite::Mirror::Test1;

	use strict;
	use vars qw{\$VERSION};
	BEGIN {
		\$VERSION = '1.00';
	}

	use ORLite::Mirror {
		url   => '$stub_url',
		stub  => '$broken',
		prune => 1,
	};

	1;
END_PERL

	# Did the class fail at compile time as expected
	ok( $@, 'Loading broke as expected' );
	like( $@, qr/not a database/, 'Error message matches expected' );
}





######################################################################
# Run-time mirror and loading failure

SCOPE: {
	# Create the test package
	eval <<"END_PERL";
	package ORLite::Mirror::Test2;

	use strict;
	use vars qw{\$VERSION};
	BEGIN {
		\$VERSION = '1.00';
	}

	use ORLite::Mirror {
		url   => '$broken_url',
		stub  => '$stub',
		prune => 1,
	};

	1;
END_PERL

	# Did the class fail at compile time as expected
	is( $@, '', 'Compiling worked as expected' );

	# It should now fail to connect-time
	eval {
		ORLite::Mirror::Test2->connect;
	};
	ok( $@, 'Loading broke as expected' );
	like( $@, qr/not a database/, 'Error message matches expected' );
}