X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;ds=sidebyside;f=t%2Fx%2Fexceptions.t;fp=t%2Fx%2Fexceptions.t;h=e54327bf8b3a75e8a7102c430791895dbab3bddf;hb=53593baa211863fbf66540cf1bcc36c8fb37257f;hp=0000000000000000000000000000000000000000;hpb=deb4d2dbb676d7d6f69dfe7815d6e0cb09bd4a44;p=kivitendo-erp.git diff --git a/t/x/exceptions.t b/t/x/exceptions.t new file mode 100644 index 000000000..e54327bf8 --- /dev/null +++ b/t/x/exceptions.t @@ -0,0 +1,68 @@ +use Test::More tests => 25; + +use lib 't'; + +use SL::X; + +# check exception serialization + +my @classes = qw( + SL::X::DBError + SL::X::Inventory::Allocation + SL::X::ZUGFeRDValidation +); + +# check basic mesage / error serialization + +for my $error_class (@classes) { + + my $x = $error_class->new(message => "test message"); + + is $x->error, "test message", "$error_class(message): error works"; + is $x->message, "test message", "$error_class(message): message works"; + is "$x", "test message", "$error_class(message): stringify works"; + + $x = $error_class->new(error => "test message"); + + is $x->error, "test message", "$error_class(error): error works"; + is $x->message, "test message", "$error_class(error): message works"; + is "$x", "test message", "$error_class(error): stringify works"; +} + + +# now create some classes with message templates and extra fields + +my $x = SL::X::DBError->new(msg => "stuff", db_error => "broke"); + +is $x->error, "stuff: broke", "template: error works"; +is $x->message, "stuff: broke", "tempalte: message works"; +is "$x", "stuff: broke", "template: stringify works"; + + +$x = SL::X::Inventory::Allocation->new(code => "DEADCOFFEE", message => "something went wrong"); + +is $x->code, "DEADCOFFEE", "extra fields work"; + + + +# check stack traces + +sub a { b() } +sub b { c() } +sub c { d() } +sub d { e() } +sub e { f() } +sub f { SL::X::DBError->throw() } + +eval { + a(); +} or do { + if (my $e = SL::X::DBError->caught) { + ok 1, "caught db error"; + ok $e->trace->as_string =~ /main::a/, "trace contains function a"; + ok $e->trace->as_string =~ /main::f/, "trace contains function f"; + + } else { + ok 0, "didn't catch db error"; + } +};