#!/usr/bin/perl ########################################################################### # This tests the basic functionality of Froody::Response::Error # # It does not feature conversion tests; Those are in rsp_convert.t ########################################################################### use strict; use warnings; # colourising the output if we want to use Term::ANSIColor qw(:constants); $Term::ANSIColor::AUTORESET = 1; ################################### # user editable parts use Test::Exception; use Test::XML; # start the tests use Test::More tests => 21; use_ok("Froody::Response::Error"); use_ok("Froody::ErrorType"); try("You suck", <<'XML'); XML # this relies on the fact that an Error object stringifys to "Died". If this # ever changes this test will fail try(Error->new(), <<'XML'); XML try(Froody::Error->new("beer.notenough", "Running out of Beer!"), <<'XML'); XML throws_ok { Froody::Response::Error->new->set_error( Froody::Error->new("wham.overheating", "The WHAM! is overheating") )->throw; } "Froody::Error"; ok(Froody::Error::err("wham"), "wham!"); ok(Froody::Error::err("wham.overheating"), "wham overheating!"); is($@->message, "The WHAM! is overheating"); throws_ok { Froody::Response::Error->new->set_error( "fish!" )->throw; } "Froody::Error"; ok(Froody::Error::err("unknown"), "unknown"); is($@->message, "fish!"); throws_ok { Froody::Response::Error->new->set_error( Error->new )->throw; } "Froody::Error"; ok(Froody::Error::err("unknown"), "unknown"); is($@->message, "Died"); # again, relies on known stringification of Error ##################################### use Test::Builder; sub try { my ($error, $string) = @_; my ($r, $xml); my $Test = Test::Builder->new; #Note: this is a singleton. local $Test::Builder::Level = 1; $Test->ok( $r = Froody::Response::Error->new ->set_error($error) ->structure(Froody::ErrorType->new()), "it's an error"); $Test->ok( $xml = $r->render, "got XML" ); is_xml( $xml, $string, "correct XML") or diag("GOT:\n".RED($xml)."\nEXPECTED:\n".CYAN($string)); }