use strict;
use warnings;

use Test::More;
use DBI;

use vars qw($test_dsn $test_user $test_password);
use lib 't', '.';
require "lib.pl";

my $dbh = DbiTestConnect($test_dsn, $test_user, $test_password, { PrintError => 0, RaiseError => 1 });

plan tests => 31;

ok eval { $dbh->do('SELECT 1', {}) }, 'empty set of attributes is accepted for ->do method';
ok !eval { $dbh->do('SELECT 1', { mariadb_unknown => 1 }) }, 'attribute "mariadb_unknown" is not accepted for ->do method';
is $dbh->errstr, 'Unknown attribute mariadb_unknown', 'attribute "mariadb_unknown" is not accepted for ->do method';
ok !eval { $dbh->do('SELECT 1', { unknown => 1 }) }, 'attribute "unknown" is not accepted for ->do method';
is $dbh->errstr, 'Unknown attribute unknown', 'attribute "unknown" is not accepted for ->do method';

ok eval { $dbh->prepare('SELECT 1', {}) }, 'empty set of attributes is accepted for ->prepare method';
ok !eval { $dbh->prepare('SELECT 1', { mariadb_unknown => 1 }) }, 'attribute "mariadb_unknown" is not accepted for ->prepare method';
is $dbh->errstr, 'Unknown attribute mariadb_unknown', 'attribute "mariadb_unknown" is not accepted for ->prepare method';
ok !eval { $dbh->prepare('SELECT 1', { unknown => 1 }) }, 'attribute "unknown" is not accepted for ->prepare method';
is $dbh->errstr, 'Unknown attribute unknown', 'attribute "unknown" is not accepted for ->prepare method';

ok eval { $dbh->selectall_arrayref('SELECT 1', {}) }, 'empty set of attributes is accepted for ->selectall_arrayref method';
ok !eval { $dbh->selectall_arrayref('SELECT 1', { mariadb_unknown => 1 }) }, 'attribute "mariadb_unknown" is not accepted for ->selectall_arrayref method';
is $dbh->errstr, 'Unknown attribute mariadb_unknown', 'attribute "mariadb_unknown" is not accepted for ->selectall_arrayref method';
ok !eval { $dbh->selectall_arrayref('SELECT 1', { unknown => 1 }) }, 'attribute "unknown" is not accepted for ->selectall_arrayref method';
is $dbh->errstr, 'Unknown attribute unknown', 'attribute "unknown" is not accepted for ->selectall_arrayref method';

ok !eval { my $tmp = $dbh->{mariadb_unknown} }, 'attribute "mariadb_unknown" cannot be retrieved from database handle';
is $dbh->errstr, 'Unknown attribute mariadb_unknown', 'attribute "mariadb_unknown" cannot be retrieved from database handle';
ok !eval { my $tmp = $dbh->{unknown} }, 'attribute "unknown" cannot be retrieved from database handle';
is $dbh->errstr, 'Unknown attribute unknown', 'attribute "unknown" cannot be retrieved from database handle';

ok !eval { $dbh->{mariadb_unknown} = 1 }, 'attribute "mariadb_unknown" cannot be set on database handle';
is $dbh->errstr, 'Unknown attribute mariadb_unknown', 'attribute "mariadb_unknown" cannot be set on database handle';
ok !eval { $dbh->{unknown} = 1 }, 'attribute "unknown" cannot be set on database handle';
is $dbh->errstr, 'Unknown attribute unknown', 'attribute "mariadb_unknown" cannot be set on database handle';

my $sth = $dbh->prepare('SELECT 1');

ok !eval { my $tmp = $sth->{mariadb_unknown} }, 'attribute "mariadb_unknown" cannot be retrieved from statement handle';
is $sth->errstr, 'Unknown attribute mariadb_unknown', 'attribute "mariadb_unknown" cannot be retrieved from statement handle';
ok !eval { my $tmp = $sth->{unknown} }, 'attribute "unknown" cannot be retrieved from statement handle';
is $sth->errstr, 'Unknown attribute unknown', 'attribute "unknown" cannot be retrieved from statement handle';

ok !eval { $sth->{mariadb_unknown} = 1 }, 'attribute "mariadb_unknown" cannot be set on statement handle';
is $sth->errstr, 'Unknown attribute mariadb_unknown', 'attribute "mariadb_unknown" cannot be set on statement handle';
ok !eval { $sth->{unknown} = 1 }, 'attribute "unknown" cannot be set on statement handle';
is $sth->errstr, 'Unknown attribute unknown', 'attribute "unknown" cannot be set on statement handle';

$dbh->disconnect();