# -*-perl-*- use strict; use Test::More 'no_plan'; use lib "$ENV{LJHOME}/cgi-bin"; require 'ljlib.pl'; # old calling conventions unmodified: return undef on no dbh my $db = LJ::get_dbh("foo", "bar"); ok(! defined $db, "undef for foo/bar roles"); { # declare that for this block, all functions everywhere # should throw errors if possible. local $LJ::THROW_ERRORS = 1; # so now this should actually die: $db = eval { LJ::get_dbh("foo", "bar"); }; is(ref $@, "LJ::Error::Database::Unavailable", "got no db object"); ok(! defined $db, "still no database"); } # test errobj creating an object my $ero = LJ::errobj("DieString", message => "My test message"); is(ref $ero, "LJ::Error::DieString", "made a die error"); like($ero->die_string, qr/test message/, "got test message"); eval { $ero->field("XXXbad"); }; like($@, qr/Invalid field/i, "bogus field threw"); # test errobj wrapping a normal die my $val = eval { die "A normal error message"; }; my $ero = LJ::errobj(); is(ref $ero, "LJ::Error::DieString", "got die string object"); like($ero->die_string, qr/A normal error message/, "got message back"); # test errobj wrapping another exception object $val = eval { die { foo => "bar" }; }; $ero = LJ::errobj($@); is(ref $ero, "LJ::Error::DieObject", "got die object back"); is(ref ($ero->die_object), "HASH", "got a hashback"); is($ero->die_object->{foo}, "bar", "and it's ours"); # test errobj returning an errobj my $pre = $ero; my $post = LJ::errobj($pre); is($pre, $post, "errobj passed through unchanged"); # test alloc_global_counter my $id = LJ::alloc_global_counter("ooooo"); ok(! defined $id, "undef id"); eval { local $LJ::THROW_ERRORS = 1; $id = LJ::alloc_global_counter("ooooo"); }; $ero = $@; is(ref $ero, "LJ::Error::InvalidParameters", "got invalid parameters"); is($ero->field("params")->{dom}, "ooooo", "got bad param back out"); # testing optional fields $ero = LJ::errobj("OptFields", foo => 34); ok($ero); $ero = LJ::errobj("OptFields", bar => 36); ok($ero); $ero = eval { LJ::errobj("OptFields", bad => 36); }; ok(!$ero, "opt fields bad"); # testing required fields $ero = eval { LJ::errobj("ReqFields", foo => 34); }; ok(!$ero, "fail req fields"); $ero = LJ::errobj("ReqFields", bar => 36, foo => 23); ok($ero, "req fields"); my $u = LJ::load_user("system"); $u->do("UPDATE non_exist_table SET foo=bar"); $ero = LJ::errobj($u); is(ref $ero, "LJ::Error::Database::Failure", "got db failure"); is($ero->err, 1146, "got error 1146"); like($ero->errstr, qr/non_exist_table.+doesn\'t exist/, "table not there"); package LJ::Error::OptFields; sub opt_fields { qw(foo bar); } package LJ::Error::ReqFields; sub fields { qw(foo bar); }