diff options
author | Ricardo Signes <rjbs@cpan.org> | 2007-07-19 02:25:18 +0000 |
---|---|---|
committer | Ricardo Signes <rjbs@cpan.org> | 2007-07-19 02:25:18 +0000 |
commit | fe560799a97567a36c1f00dd2e80e1d9125dbb31 (patch) | |
tree | 8fe289d42632308704e0531e6eb2e596190486c6 /t | |
parent | 634ab66549ff4aafd602dc84350fdb4c2d5251ab (diff) |
r32110@knight: rjbs | 2007-07-18 21:07:09 -0400
make stupid tests less stupid
Diffstat (limited to 't')
-rw-r--r-- | t/abs-object.t | 75 | ||||
-rw-r--r-- | t/classy.t | 138 | ||||
-rw-r--r-- | t/example.msg | 42 | ||||
-rw-r--r-- | t/lib/Test/EmailAbstract.pm | 41 |
4 files changed, 85 insertions, 211 deletions
diff --git a/t/abs-object.t b/t/abs-object.t index 6557610..e699db1 100644 --- a/t/abs-object.t +++ b/t/abs-object.t @@ -10,12 +10,15 @@ my @classes = qw(Email::MIME Email::Simple MIME::Entity Mail::Internet Mail::Message); plan tests => 2 - + (@classes + 2) * Test::EmailAbstract->tests_per_obj + + (@classes + 1) * Test::EmailAbstract->tests_per_object + + (@classes + 1) * Test::EmailAbstract->tests_per_class + 1; use_ok("Email::Abstract"); -my $message = do { local $/; <DATA>; }; +open FILE, '<t/example.msg'; +my $message = do { local $/; <FILE>; }; +close FILE; # Let's be generous and start with real CRLF, no matter what stupid thing the # VCS or archive tools have done to the message. @@ -31,26 +34,30 @@ is( for my $class (@classes) { SKIP: { - eval "require $class"; - skip "$class can't be loaded", $tester->tests_per_obj if $@; - - my $obj = Email::Abstract->cast($message, $class); - - my $email_abs = Email::Abstract->new($obj); - - $tester->wrapped_ok($class, $email_abs, 0); + $tester->load($class); + + { + my $obj = Email::Abstract->cast($message, $class); + my $email_abs = Email::Abstract->new($obj); + $tester->object_ok($class, $email_abs, 0); + } + + { + my $obj = Email::Abstract->cast($message, $class); + $tester->class_ok($class, $obj, 0); + } } } { my $email_abs = Email::Abstract->new($message); - $tester->wrapped_ok('plaintext', $email_abs, 0); + $tester->object_ok('plaintext', $email_abs, 0); + $tester->class_ok('plaintext (class)', $message, 1); } { # Ensure that we can use Email::Abstract->header($abstract, 'foo') my $email_abs = Email::Abstract->new($message); - $tester->class_ok('plaintext (via class)', $email_abs, 0); my $email_abs_new = Email::Abstract->new($email_abs); ok( @@ -58,47 +65,3 @@ for my $class (@classes) { "trying to wrap a wrapper returns the wrapper; it doesn't re-wrap", ); } - -__DATA__ -Received: from mailman.opengroup.org ([192.153.166.9]) - by deep-dark-truthful-mirror.pad with smtp (Exim 3.36 #1 (Debian)) - id 18Buh5-0006Zr-00 - for <posix@simon-cozens.org>; Wed, 13 Nov 2002 10:24:23 +0000 -Received: (qmail 1679 invoked by uid 503); 13 Nov 2002 10:10:49 -0000 -Resent-Date: 13 Nov 2002 10:10:49 -0000 -Date: Wed, 13 Nov 2002 10:06:51 GMT -From: Andrew Josey <ajosey@rdg.opengroup.org> -Message-Id: <1021113100650.ZM12997@skye.rdg.opengroup.org> -In-Reply-To: Joanna Farley's message as of Nov 13, 9:56am. -References: <200211120937.JAA28130@xoneweb.opengroup.org> - <1021112125524.ZM7503@skye.rdg.opengroup.org> - <3DD221BB.13116D47@sun.com> -X-Mailer: Z-Mail (5.0.0 30July97) -To: austin-group-l@opengroup.org -Subject: Re: Defect in XBD lround -MIME-Version: 1.0 -Resent-Message-ID: <gZGK1B.A.uY.iUi09@mailman> -Resent-To: austin-group-l@opengroup.org -Resent-From: austin-group-l@opengroup.org -X-Mailing-List: austin-group-l:archive/latest/4823 -X-Loop: austin-group-l@opengroup.org -Precedence: list -X-Spam-Status: No, hits=-1.6 required=5.0 -Resent-Sender: austin-group-l-request@opengroup.org -Content-Type: text/plain; charset=us-ascii - -Joanna, All - -Thanks. I got the following response from Fred Tydeman. - -On Nov 13, 9:56am in "Re: Defect in XBD lr", Joanna Farley wrote: -> Sun's expert in this area after some discussions with a colleague -> outside of Sun concluded that for lround, to align with both C99 and SUS -> changes of the following form were necessary: -> this line of text is really long and no one need worry about it but why was such a long text chosen to begin with i mean really?? - ------ -Andrew Josey The Open Group -Austin Group Chair Apex Plaza,Forbury Road, -Email: a.josey@opengroup.org Reading,Berks.RG1 1AX,England -Tel: +44 118 9508311 ext 2250 Fax: +44 118 9500110 diff --git a/t/classy.t b/t/classy.t deleted file mode 100644 index 3e769c9..0000000 --- a/t/classy.t +++ /dev/null @@ -1,138 +0,0 @@ -use Test::More; - -use lib 't/lib'; - -use Test::EmailAbstract; - -my @classes - = qw(Email::MIME Email::Simple MIME::Entity Mail::Internet Mail::Message); - -plan tests => 1 + 6 * @classes + 5; - -use_ok("Email::Abstract"); - -my $message = do { local $/; <DATA>; }; - -for my $class ( - qw(Email::MIME Email::Simple MIME::Entity Mail::Internet Mail::Message) -) { - SKIP: { - eval "require $class"; - skip "$class can't be loaded", 6 if $@; - - my $obj = Email::Abstract->cast($message, $class); - - isa_ok($obj, $class, "string cast to $class"); - - Test::EmailAbstract::class_ok($class, $obj, 0); - } -} - -Test::EmailAbstract::class_ok('plaintext', $message, 1); - -__DATA__ -Received: from mailman.opengroup.org ([192.153.166.9]) - by deep-dark-truthful-mirror.pad with smtp (Exim 3.36 #1 (Debian)) - id 18Buh5-0006Zr-00 - for <posix@simon-cozens.org>; Wed, 13 Nov 2002 10:24:23 +0000 -Received: (qmail 1679 invoked by uid 503); 13 Nov 2002 10:10:49 -0000 -Resent-Date: 13 Nov 2002 10:10:49 -0000 -Date: Wed, 13 Nov 2002 10:06:51 GMT -From: Andrew Josey <ajosey@rdg.opengroup.org> -Message-Id: <1021113100650.ZM12997@skye.rdg.opengroup.org> -In-Reply-To: Joanna Farley's message as of Nov 13, 9:56am. -References: <200211120937.JAA28130@xoneweb.opengroup.org> - <1021112125524.ZM7503@skye.rdg.opengroup.org> - <3DD221BB.13116D47@sun.com> -X-Mailer: Z-Mail (5.0.0 30July97) -To: austin-group-l@opengroup.org -Subject: Re: Defect in XBD lround -MIME-Version: 1.0 -Resent-Message-ID: <gZGK1B.A.uY.iUi09@mailman> -Resent-To: austin-group-l@opengroup.org -Resent-From: austin-group-l@opengroup.org -X-Mailing-List: austin-group-l:archive/latest/4823 -X-Loop: austin-group-l@opengroup.org -Precedence: list -X-Spam-Status: No, hits=-1.6 required=5.0 -Resent-Sender: austin-group-l-request@opengroup.org -Content-Type: text/plain; charset=us-ascii - -Joanna, All - -Thanks. I got the following response from Fred Tydeman. - -C99 Defect Report (DR) 240 covers this. The main body of C99 -(7.12.9.7) says range error, while Annex F (F.9.6.7 and F.9.6.5) -says "invalid" (domain error). The result was to change 7.12.9.7 -to allow for either range or domain error. The preferred error -is domain error (so as match Annex F). So, no need to change XBD. - -regards -Andrew - -On Nov 13, 9:56am in "Re: Defect in XBD lr", Joanna Farley wrote: -> Sun's expert in this area after some discussions with a colleague -> outside of Sun concluded that for lround, to align with both C99 and SUS -> changes of the following form were necessary: -> -> + If x is +/-Inf/NaN, a domain error occurs, and -> + errno is set to EDOM in MATH_ERRNO mode; -> + the invalid exception is raised in MATH_ERREXCEPT mode. -> [to align with C99 Annex F.4] -> -> + If x is too large to be represented as a long, a *range* error -> may occur, and -> + errno *may be* set to ERANGE in MATH_ERRNO mode; -> [to align with C99 7.12.9.7] -> + the invalid exception *is* raised in MATH_ERREXCEPT mode. -> [to align with C99 Annex F.4] -> -> They believe it is a bit awkward to have errno set to ERANGE in -> MATH_ERRNO mode yet the invalid exception raised in MAH_ERREXCEPT mode, -> but that just reflects an imperfect mapping of the C notion of errno to -> the IEEE 754 notion of data conversion. -> -> I'll work with our expert to draft text refecting the above to suggest -> replacement text for lines 23678-23684 on lround page 721 of XSH6. -> -> Thanks -> -> Joanna -> -> -> Andrew Josey wrote: -> > -> > The text referred to is MX shaded and part of the ISO 60559 floating -> > point option. I do not think changing the Domain Error to a Range Error -> > is the fix or at least not the fix for the NaN and +-Inf cases. ISO C -> > 99 describes the range error case if the magnitude of x is too large as a -> > may fail. I'll ask Fred T for his thoughts on this one... -> > regards -> > Andrew -> > -> > On Nov 12, 9:37am in "Defect in XBD lround", Erwin.Unruh@fujitsu-siemens.com wrote: -> > > Defect report from : Erwin Unruh , Fujitsu Siemens Computers -> > > -> > > (Please direct followup comments direct to austin-group-l@opengroup.org) -> > > -> > > @ page 0 line 0 section lround objection {0} -> > > -> > > Problem: -> > > -> > > Defect code : 1. Error -> > > -> > > The function lround is described in http://www.opengroup.org/onlinepubs/007904975/functions/lround.html -> > > On Error it is specified that errno has to be set to EDOM. However, the C99 standard ISO/IEC 9899:1999 (E) specifies this as a range error, which would result in a value of ERANGE. So an implementation could not be conformant to both these standards. -> > > -> > > Action: -> > > -> > > Change the value of errno to ERANGE, if the result is not represantable. More specific: In the description of the function, replace all occurences of "domain error" with "range error" and replace "EDOM" with "ERANGE" -> > >-- End of excerpt from Erwin.Unruh@fujitsu-siemens.com -> > - ------ -Andrew Josey The Open Group -Austin Group Chair Apex Plaza,Forbury Road, -Email: a.josey@opengroup.org Reading,Berks.RG1 1AX,England -Tel: +44 118 9508311 ext 2250 Fax: +44 118 9500110 diff --git a/t/example.msg b/t/example.msg new file mode 100644 index 0000000..bb8c106 --- /dev/null +++ b/t/example.msg @@ -0,0 +1,42 @@ +Received: from mailman.opengroup.org ([192.153.166.9]) + by deep-dark-truthful-mirror.pad with smtp (Exim 3.36 #1 (Debian)) + id 18Buh5-0006Zr-00 + for <posix@simon-cozens.org>; Wed, 13 Nov 2002 10:24:23 +0000 +Received: (qmail 1679 invoked by uid 503); 13 Nov 2002 10:10:49 -0000 +Resent-Date: 13 Nov 2002 10:10:49 -0000 +Date: Wed, 13 Nov 2002 10:06:51 GMT +From: Andrew Josey <ajosey@rdg.opengroup.org> +Message-Id: <1021113100650.ZM12997@skye.rdg.opengroup.org> +In-Reply-To: Joanna Farley's message as of Nov 13, 9:56am. +References: <200211120937.JAA28130@xoneweb.opengroup.org> + <1021112125524.ZM7503@skye.rdg.opengroup.org> + <3DD221BB.13116D47@sun.com> +X-Mailer: Z-Mail (5.0.0 30July97) +To: austin-group-l@opengroup.org +Subject: Re: Defect in XBD lround +MIME-Version: 1.0 +Resent-Message-ID: <gZGK1B.A.uY.iUi09@mailman> +Resent-To: austin-group-l@opengroup.org +Resent-From: austin-group-l@opengroup.org +X-Mailing-List: austin-group-l:archive/latest/4823 +X-Loop: austin-group-l@opengroup.org +Precedence: list +X-Spam-Status: No, hits=-1.6 required=5.0 +Resent-Sender: austin-group-l-request@opengroup.org +Content-Type: text/plain; charset=us-ascii + +Joanna, All + +Thanks. I got the following response from Fred Tydeman. + +On Nov 13, 9:56am in "Re: Defect in XBD lr", Joanna Farley wrote: +> Sun's expert in this area after some discussions with a colleague +> outside of Sun concluded that for lround, to align with both C99 and SUS +> changes of the following form were necessary: +> this line of text is really long and no one need worry about it but why was such a long text chosen to begin with i mean really?? + +----- +Andrew Josey The Open Group +Austin Group Chair Apex Plaza,Forbury Road, +Email: a.josey@opengroup.org Reading,Berks.RG1 1AX,England +Tel: +44 118 9508311 ext 2250 Fax: +44 118 9500110 diff --git a/t/lib/Test/EmailAbstract.pm b/t/lib/Test/EmailAbstract.pm index c6cae84..792ab26 100644 --- a/t/lib/Test/EmailAbstract.pm +++ b/t/lib/Test/EmailAbstract.pm @@ -3,13 +3,9 @@ use strict; package Test::EmailAbstract; use Test::More; -sub tests_per_obj { 8 } - sub new { my ($class, $message) = @_; - my $simple = Email::Simple->new($message); - bless { simple => $simple } => $class; } @@ -25,20 +21,24 @@ sub _call { } } -# This is responsible for running 6 tests. -sub _test_object { - my $self = shift; - my ($wrapped, $class, $obj, $readonly) = @_; +sub tests_per_class { 7 } +sub tests_per_object { 8 } +sub tests_per_module { $_[0]->tests_per_class + $_[0]->tests_per_object } + +sub _do_tests { + my ($self, $is_wrapped, $class, $obj, $readonly) = @_; - isa_ok($obj, 'Email::Abstract', "wrapped $class object"); + if ($is_wrapped) { + isa_ok($obj, 'Email::Abstract', "wrapped $class object"); + } is( - _call($wrapped, $obj, 'get_header', 'Subject'), + _call($is_wrapped, $obj, 'get_header', 'Subject'), 'Re: Defect in XBD lround', "Subject OK with $class" ); - eval { _call($wrapped, $obj, set_header => "Subject", "New Subject"); }; + eval { _call($is_wrapped, $obj, set_header => "Subject", "New Subject"); }; if ($readonly) { like($@, qr/can't alter string/, "can't alter an unwrapped string"); @@ -51,7 +51,7 @@ sub _test_object { q{(qmail 1679 invoked by uid 503); 13 Nov 2002 10:10:49 -0000}, ); - my @got = _call($wrapped, $obj, get_header => 'Received'); + my @got = _call($is_wrapped, $obj, get_header => 'Received'); s/\t/ /g for @got; is_deeply( @@ -60,7 +60,7 @@ sub _test_object { "$class: received headers match up list context get_header", ); - my $got_body = $obj->get_body; + my $got_body = _call($is_wrapped, $obj, 'get_body'); my $simple_body = $self->simple->body; # I very much do not like doing this. Why is it needed? @@ -79,7 +79,7 @@ sub _test_object { "correct body length for $class", ); - eval { _call($wrapped, $obj, set_body => "A completely new body"); }; + eval { _call($is_wrapped, $obj, set_body => "A completely new body"); }; if ($readonly) { like($@, qr/can't alter string/, "can't alter an unwrapped string"); @@ -91,14 +91,21 @@ sub _test_object { pass("(no test; can't check altering unalterable alteration)"); } else { like( - _call($wrapped, $obj, 'as_string'), + _call($is_wrapped, $obj, 'as_string'), qr/Subject: New Subject.*completely new body$/ms, "set subject and body, restringified ok with $class" ); } } -sub class_ok { shift->_test_object(0, @_); } -sub wrapped_ok { shift->_test_object(1, @_); } +sub class_ok { shift->_do_tests(0, @_); } +sub object_ok { shift->_do_tests(1, @_); } + +sub load { + my ($self, $class) = @_; + unless (eval "require $class; 1") { + skip "$class: unavailable", $self->tests_per_module; + } +} 1; |