1#!perl 2use 5.008; 3use strict; 4use warnings FATAL => 'all'; 5use lib 't'; 6use Test::More; 7use Test::Exception; 8 9use lib 'lib'; 10use Mail::AuthenticationResults::Header; 11use Mail::AuthenticationResults::Header::AuthServID; 12use Mail::AuthenticationResults::Header::Base; 13use Mail::AuthenticationResults::Header::Comment; 14use Mail::AuthenticationResults::Header::Entry; 15use Mail::AuthenticationResults::Header::Group; 16use Mail::AuthenticationResults::Header::SubEntry; 17use Mail::AuthenticationResults::Header::Version; 18 19my ( $Header, $Base, $Comment, $Entry, $Group, $SubEntry, $AuthServID, $Version ); 20my ( $Header2, $Base2, $Comment2, $Entry2, $Group2, $SubEntry2, $AuthServID2, $Version2 ); 21 22sub setup { 23 24 $Header = Mail::AuthenticationResults::Header->new(); 25 $Base = Mail::AuthenticationResults::Header::Base->new(); 26 $Comment = Mail::AuthenticationResults::Header::Comment->new(); 27 $Entry = Mail::AuthenticationResults::Header::Entry->new(); 28 $Group = Mail::AuthenticationResults::Header::Group->new(); 29 $SubEntry = Mail::AuthenticationResults::Header::SubEntry->new(); 30 $AuthServID = Mail::AuthenticationResults::Header::AuthServID->new(); 31 $Version = Mail::AuthenticationResults::Header::Version->new(); 32 33 $Header2 = Mail::AuthenticationResults::Header->new(); 34 $Base2 = Mail::AuthenticationResults::Header::Base->new(); 35 $Comment2 = Mail::AuthenticationResults::Header::Comment->new(); 36 $Entry2 = Mail::AuthenticationResults::Header::Entry->new(); 37 $Group2 = Mail::AuthenticationResults::Header::Group->new(); 38 $SubEntry2 = Mail::AuthenticationResults::Header::SubEntry->new(); 39 $AuthServID2 = Mail::AuthenticationResults::Header::AuthServID->new(); 40 $Version2 = Mail::AuthenticationResults::Header::Version->new(); 41} 42 43subtest 'orphan' => sub{ 44 setup(); 45 dies_ok( sub{ $Header->orphan() }, 'Cannot orphan Header' ); 46 dies_ok( sub{ $Base->orphan() }, 'Cannot orphan Header' ); 47 dies_ok( sub{ $Comment->orphan() }, 'Cannot orphan Header' ); 48 dies_ok( sub{ $Entry->orphan() }, 'Cannot orphan Header' ); 49 dies_ok( sub{ $Group->orphan() }, 'Cannot orphan Header' ); 50 dies_ok( sub{ $Header->orphan() }, 'Cannot orphan Header' ); 51 dies_ok( sub{ $Header->orphan() }, 'Cannot orphan Header' ); 52 dies_ok( sub{ $Header->orphan() }, 'Cannot orphan Header' ); 53}; 54 55subtest 'self' => sub{ 56 setup(); 57 dies_ok( sub{ $Header->add_child( $Header ) }, 'Header Header self dies' ); 58 dies_ok( sub{ $Base->add_child( $Base ) }, 'Base Base self dies' ); 59 dies_ok( sub{ $Comment->add_child( $Comment ) }, 'Comment Comment self dies' ); 60 dies_ok( sub{ $Entry->add_child( $Entry ) }, 'Entry Entry self dies' ); 61 dies_ok( sub{ $Group->add_child( $Group ) }, 'Group Group self dies' ); 62 dies_ok( sub{ $SubEntry->add_child( $SubEntry ) }, 'SubEntry SubEntry self dies' ); 63 dies_ok( sub{ $AuthServID->add_child( $AuthServID ) }, 'AuthServID AuthServID self dies' ); 64 dies_ok( sub{ $Version->add_child( $Version ) }, 'Version Version self dies' ); 65}; 66 67subtest 'self type' => sub{ 68 setup(); 69 dies_ok( sub{ $Header->add_child( $Header2 ) }, 'Header Header dies' ); 70 dies_ok( sub{ $Header->add_child( $Base2 ) }, 'Header Base dies' ); 71 lives_ok( sub{ $Header->add_child( $Comment2 ) }, 'Header Comment lives' ); 72 lives_ok( sub{ $Header->add_child( $Entry2 ) }, 'Header Entry lives' ); 73 dies_ok( sub{ $Header->add_child( $Group2 ) }, 'Header Group dies' ); 74 dies_ok( sub{ $Header->add_child( $Entry2 ) }, 'Header Entry repeat dies' ); 75 dies_ok( sub{ $Header->add_child( $SubEntry2 ) }, 'Header SubEntry dies' ); 76 dies_ok( sub{ $Header->add_child( $AuthServID) }, 'Header AuthServID dies' ); 77 dies_ok( sub{ $Header->add_child( $Version ) }, 'Header Version dies' ); 78 79 lives_ok( sub{ $Header->remove_child( $Comment2 ) }, 'Header Comment remove lives' ); 80 lives_ok( sub{ $Header->remove_child( $Entry2 ) }, 'Header Entry remove lives' ); 81 lives_ok( sub{ $Header->add_child( $Comment2 ) }, 'Header Comment lives' ); 82 lives_ok( sub{ $Header->add_child( $Entry2 ) }, 'Header Entry lives' ); 83}; 84 85subtest 'base' => sub{ 86 setup(); 87 dies_ok( sub{ $Base->add_child( $Header2 ) }, 'Base Header dies' ); 88 dies_ok( sub{ $Base->add_child( $Base2 ) }, 'Base Base dies' ); 89 dies_ok( sub{ $Base->add_child( $Comment2 ) }, 'Base Comment dies' ); 90 dies_ok( sub{ $Base->add_child( $Entry2 ) }, 'Base Entry dies' ); 91 dies_ok( sub{ $Base->add_child( $Group2 ) }, 'Base Group dies' ); 92 dies_ok( sub{ $Base->add_child( $SubEntry2 ) }, 'Base SubEntry dies' ); 93 dies_ok( sub{ $Base->add_child( $AuthServID) }, 'Base AuthServID dies' ); 94 dies_ok( sub{ $Base->add_child( $Version ) }, 'Base Version dies' ); 95}; 96 97subtest 'comment' => sub{ 98 setup(); 99 dies_ok( sub{ $Comment->add_child( $Header2 ) }, 'Comment Header dies' ); 100 dies_ok( sub{ $Comment->add_child( $Base2 ) }, 'Comment Base dies' ); 101 dies_ok( sub{ $Comment->add_child( $Comment2 ) }, 'Comment Comment dies' ); 102 dies_ok( sub{ $Comment->add_child( $Entry2 ) }, 'Comment Entry dies' ); 103 dies_ok( sub{ $Comment->add_child( $Group2 ) }, 'Comment Group dies' ); 104 dies_ok( sub{ $Comment->add_child( $SubEntry2 ) }, 'Comment SubEntry dies' ); 105 dies_ok( sub{ $Comment->add_child( $AuthServID) }, 'Comment AuthServID dies' ); 106 dies_ok( sub{ $Comment->add_child( $Version ) }, 'Comment Version dies' ); 107}; 108 109subtest 'entry' => sub{ 110 setup(); 111 dies_ok( sub{ $Entry->add_child( $Header2 ) }, 'Entry Header dies' ); 112 dies_ok( sub{ $Entry->add_child( $Base2 ) }, 'Entry Base dies' ); 113 lives_ok( sub{ $Entry->add_child( $Comment2 ) }, 'Entry Comment lives' ); 114 dies_ok( sub{ $Entry->add_child( $Comment2 ) }, 'Entry Comment repeat dies' ); 115 dies_ok( sub{ $Entry->add_child( $Entry2 ) }, 'Entry Entry dies' ); 116 dies_ok( sub{ $Entry->add_child( $Group2 ) }, 'Entry Group dies' ); 117 lives_ok( sub{ $Entry->add_child( $SubEntry2 ) }, 'Entry SubEntry lives' ); 118 dies_ok( sub{ $Entry->add_child( $AuthServID) }, 'Entry AuthServID dies' ); 119 lives_ok( sub{ $Entry->add_child( $Version ) }, 'Entry Version lives' ); 120 121 lives_ok( sub{ $Entry->remove_child( $Comment2 ) }, 'Entry Comment remove lives' ); 122 lives_ok( sub{ $Entry->remove_child( $SubEntry2 ) }, 'Entry SubEntry remove lives' ); 123 lives_ok( sub{ $Entry->remove_child( $Version ) }, 'Entry Version remove lives' ); 124 lives_ok( sub{ $Entry->add_child( $Comment2 ) }, 'Entry Comment lives' ); 125 lives_ok( sub{ $Entry->add_child( $SubEntry2 ) }, 'Entry SubEntry lives' ); 126 lives_ok( sub{ $Entry->add_child( $Version ) }, 'Entry Version lives' ); 127}; 128 129subtest 'group' => sub{ 130 setup(); 131 lives_ok( sub{ $Group->add_child( $Header2 ) }, 'Group Header lives' ); 132 dies_ok( sub{ $Group->add_child( $Base2 ) }, 'Group Base dies' ); 133 lives_ok( sub{ $Group->add_child( $Comment2 ) }, 'Group Comment lives' ); 134 lives_ok( sub{ $Group->add_child( $Entry2 ) }, 'Group Entry lives' ); 135 lives_ok( sub{ $Group->add_child( $Group2 ) }, 'Group Group lives' ); 136 lives_ok( sub{ $Group->add_child( $SubEntry2 ) }, 'Group SubEntry lives' ); 137 lives_ok( sub{ $Group->add_child( $AuthServID) }, 'Group AuthServID lives' ); 138 lives_ok( sub{ $Group->add_child( $Version ) }, 'Group Version lives' ); 139 140 # Group repeats should not die, but should not result in duplicates 141 is( scalar @{$Group->children()}, 6, 'Has 6 children' ); 142 lives_ok( sub{ $Group->add_child( $Header2 ) }, 'Group Header repeat lives' ); 143 lives_ok( sub{ $Group->add_child( $Comment2 ) }, 'Group Comment repeat lives' ); 144 lives_ok( sub{ $Group->add_child( $Entry2 ) }, 'Group Entry repeat lives' ); 145 lives_ok( sub{ $Group->add_child( $Group2 ) }, 'Group Group repeat lives' ); 146 lives_ok( sub{ $Group->add_child( $SubEntry2 ) }, 'Group SubEntry repeat lives' ); 147 lives_ok( sub{ $Group->add_child( $AuthServID) }, 'Group AuthServID repeat lives' ); 148 lives_ok( sub{ $Group->add_child( $Version ) }, 'Group Version repeat lives' ); 149 is( scalar @{$Group->children()}, 6, 'Still has 6 children' ); 150 151 lives_ok( sub{ $Group->remove_child( $Header2 ) }, 'Group Header remove lives' ); 152 lives_ok( sub{ $Group->remove_child( $Comment2 ) }, 'Group Comment remove lives' ); 153 lives_ok( sub{ $Group->remove_child( $Entry2 ) }, 'Group Entry remove lives' ); 154 lives_ok( sub{ $Group->remove_child( $SubEntry2 ) }, 'Group SubEntry remove lives' ); 155 lives_ok( sub{ $Group->remove_child( $AuthServID) }, 'Group AuthServID remove lives' ); 156 lives_ok( sub{ $Group->remove_child( $Version ) }, 'Group Version remove lives' ); 157 is( scalar @{$Group->children()}, 0, 'Now has 0 children' ); 158}; 159 160subtest 'subentry' => sub{ 161 setup(); 162 dies_ok( sub{ $SubEntry->add_child( $Header2 ) }, 'SubEntry Header dies' ); 163 dies_ok( sub{ $SubEntry->add_child( $Base2 ) }, 'SubEntry Base dies' ); 164 lives_ok( sub{ $SubEntry->add_child( $Comment2 ) }, 'SubEntry Comment lives' ); 165 dies_ok( sub{ $SubEntry->add_child( $Comment2 ) }, 'SubEntry Comment repeat dies' ); 166 dies_ok( sub{ $SubEntry->add_child( $Entry2 ) }, 'SubEntry Entry dies' ); 167 dies_ok( sub{ $SubEntry->add_child( $Group2 ) }, 'SubEntry Group dies' ); 168 dies_ok( sub{ $SubEntry->add_child( $SubEntry2 ) }, 'SubEntry SubEntry dies' ); 169 dies_ok( sub{ $SubEntry->add_child( $AuthServID) }, 'SubEntry AuthServID dies' ); 170 lives_ok( sub{ $SubEntry->add_child( $Version ) }, 'SubEntry Version lives' ); 171 172 lives_ok( sub{ $SubEntry->remove_child( $Comment2 ) }, 'SubEntry Comment remove lives' ); 173 lives_ok( sub{ $SubEntry->remove_child( $Version ) }, 'SubEntry Version remove lives' ); 174 lives_ok( sub{ $SubEntry->add_child( $Comment2 ) }, 'SubEntry Comment lives' ); 175 lives_ok( sub{ $SubEntry->add_child( $Version ) }, 'SubEntry Version lives' ); 176}; 177 178subtest 'authservid' => sub{ 179 setup(); 180 dies_ok( sub{ $AuthServID->add_child( $Header2 ) }, 'AuthServID Header dies' ); 181 dies_ok( sub{ $AuthServID->add_child( $Base2 ) }, 'AuthServID Base dies' ); 182 lives_ok( sub{ $AuthServID->add_child( $Comment2 ) }, 'AuthServID Comment lives' ); 183 dies_ok( sub{ $AuthServID->add_child( $Comment2 ) }, 'AuthServID Comment repeat dies' ); 184 dies_ok( sub{ $AuthServID->add_child( $Entry2 ) }, 'AuthServID Entry dies' ); 185 dies_ok( sub{ $AuthServID->add_child( $Group2 ) }, 'AuthServID Group dies' ); 186 lives_ok( sub{ $AuthServID->add_child( $SubEntry2 ) }, 'AuthServID SubEntry lives' ); 187 dies_ok( sub{ $AuthServID->add_child( $AuthServID) }, 'AuthServID AuthServID dies' ); 188 lives_ok( sub{ $AuthServID->add_child( $Version ) }, 'AuthServID Version lives' ); 189 190 lives_ok( sub{ $AuthServID->remove_child( $Comment2 ) }, 'AuthServID Comment remove lives' ); 191 lives_ok( sub{ $AuthServID->remove_child( $SubEntry2 ) }, 'AuthServID SubEntry remove lives' ); 192 lives_ok( sub{ $AuthServID->remove_child( $Version ) }, 'AuthServID Version remove lives' ); 193 lives_ok( sub{ $AuthServID->add_child( $Comment2 ) }, 'AuthServID Comment lives' ); 194 lives_ok( sub{ $AuthServID->add_child( $SubEntry2 ) }, 'AuthServID SubEntry lives' ); 195 lives_ok( sub{ $AuthServID->add_child( $Version ) }, 'AuthServID Version lives' ); 196}; 197 198subtest 'version' => sub{ 199 setup(); 200 dies_ok( sub{ $Version->add_child( $Header2 ) }, 'Version Header dies' ); 201 dies_ok( sub{ $Version->add_child( $Base2 ) }, 'Version Base dies' ); 202 dies_ok( sub{ $Version->add_child( $Comment2 ) }, 'Version Comment dies' ); 203 dies_ok( sub{ $Version->add_child( $Comment2 ) }, 'Version Comment repeat dies' ); 204 dies_ok( sub{ $Version->add_child( $Entry2 ) }, 'Version Entry dies' ); 205 dies_ok( sub{ $Version->add_child( $Group2 ) }, 'Version Group dies' ); 206 dies_ok( sub{ $Version->add_child( $SubEntry2 ) }, 'Version SubEntry dies' ); 207 dies_ok( sub{ $Version->add_child( $AuthServID) }, 'Version AuthServID dies' ); 208 dies_ok( sub{ $Version->add_child( $Version ) }, 'Version Version dies' ); 209}; 210 211done_testing(); 212 213