File: 02-children.t

package info (click to toggle)
libmail-authenticationresults-perl 2.20230112-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 364 kB
  • sloc: perl: 2,803; makefile: 2
file content (212 lines) | stat: -rw-r--r-- 11,954 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
#!perl
use 5.008;
use strict;
use warnings FATAL => 'all';
use lib 't';
use Test::More;
use Test::Exception;

use lib 'lib';
use Mail::AuthenticationResults::Header;
use Mail::AuthenticationResults::Header::AuthServID;
use Mail::AuthenticationResults::Header::Base;
use Mail::AuthenticationResults::Header::Comment;
use Mail::AuthenticationResults::Header::Entry;
use Mail::AuthenticationResults::Header::Group;
use Mail::AuthenticationResults::Header::SubEntry;
use Mail::AuthenticationResults::Header::Version;

my ( $Header, $Base, $Comment, $Entry, $Group, $SubEntry, $AuthServID, $Version );
my ( $Header2, $Base2, $Comment2, $Entry2, $Group2, $SubEntry2, $AuthServID2, $Version2 );

sub setup {

    $Header = Mail::AuthenticationResults::Header->new();
    $Base = Mail::AuthenticationResults::Header::Base->new();
    $Comment = Mail::AuthenticationResults::Header::Comment->new();
    $Entry = Mail::AuthenticationResults::Header::Entry->new();
    $Group = Mail::AuthenticationResults::Header::Group->new();
    $SubEntry = Mail::AuthenticationResults::Header::SubEntry->new();
    $AuthServID = Mail::AuthenticationResults::Header::AuthServID->new();
    $Version = Mail::AuthenticationResults::Header::Version->new();

    $Header2 = Mail::AuthenticationResults::Header->new();
    $Base2 = Mail::AuthenticationResults::Header::Base->new();
    $Comment2 = Mail::AuthenticationResults::Header::Comment->new();
    $Entry2 = Mail::AuthenticationResults::Header::Entry->new();
    $Group2 = Mail::AuthenticationResults::Header::Group->new();
    $SubEntry2 = Mail::AuthenticationResults::Header::SubEntry->new();
    $AuthServID2 = Mail::AuthenticationResults::Header::AuthServID->new();
    $Version2 = Mail::AuthenticationResults::Header::Version->new();
}

subtest 'orphan' => sub{
    setup();
    dies_ok( sub{ $Header->orphan() }, 'Cannot orphan Header' );
    dies_ok( sub{ $Base->orphan() }, 'Cannot orphan Header' );
    dies_ok( sub{ $Comment->orphan() }, 'Cannot orphan Header' );
    dies_ok( sub{ $Entry->orphan() }, 'Cannot orphan Header' );
    dies_ok( sub{ $Group->orphan() }, 'Cannot orphan Header' );
    dies_ok( sub{ $Header->orphan() }, 'Cannot orphan Header' );
    dies_ok( sub{ $Header->orphan() }, 'Cannot orphan Header' );
    dies_ok( sub{ $Header->orphan() }, 'Cannot orphan Header' );
};

subtest 'self' => sub{
    setup();
    dies_ok( sub{ $Header->add_child( $Header ) }, 'Header Header self dies' );
    dies_ok( sub{ $Base->add_child( $Base ) }, 'Base Base self dies' );
    dies_ok( sub{ $Comment->add_child( $Comment ) }, 'Comment Comment self dies' );
    dies_ok( sub{ $Entry->add_child( $Entry ) }, 'Entry Entry self dies' );
    dies_ok( sub{ $Group->add_child( $Group ) }, 'Group Group self dies' );
    dies_ok( sub{ $SubEntry->add_child( $SubEntry ) }, 'SubEntry SubEntry self dies' );
    dies_ok( sub{ $AuthServID->add_child( $AuthServID ) }, 'AuthServID AuthServID self dies' );
    dies_ok( sub{ $Version->add_child( $Version ) }, 'Version Version self dies' );
};

subtest 'self type' => sub{
    setup();
    dies_ok( sub{ $Header->add_child( $Header2 ) }, 'Header Header dies' );
    dies_ok( sub{ $Header->add_child( $Base2 ) }, 'Header Base dies' );
    lives_ok( sub{ $Header->add_child( $Comment2 ) }, 'Header Comment lives' );
    lives_ok( sub{ $Header->add_child( $Entry2 ) }, 'Header Entry lives' );
    dies_ok( sub{ $Header->add_child( $Group2 ) }, 'Header Group dies' );
    dies_ok( sub{ $Header->add_child( $Entry2 ) }, 'Header Entry repeat dies' );
    dies_ok( sub{ $Header->add_child( $SubEntry2 ) }, 'Header SubEntry dies' );
    dies_ok( sub{ $Header->add_child( $AuthServID) }, 'Header AuthServID dies' );
    dies_ok( sub{ $Header->add_child( $Version ) }, 'Header Version dies' );

    lives_ok( sub{ $Header->remove_child( $Comment2 ) }, 'Header Comment remove lives' );
    lives_ok( sub{ $Header->remove_child( $Entry2 ) }, 'Header Entry remove lives' );
    lives_ok( sub{ $Header->add_child( $Comment2 ) }, 'Header Comment lives' );
    lives_ok( sub{ $Header->add_child( $Entry2 ) }, 'Header Entry lives' );
};

subtest 'base' => sub{
    setup();
    dies_ok( sub{ $Base->add_child( $Header2 ) }, 'Base Header dies' );
    dies_ok( sub{ $Base->add_child( $Base2 ) }, 'Base Base dies' );
    dies_ok( sub{ $Base->add_child( $Comment2 ) }, 'Base Comment dies' );
    dies_ok( sub{ $Base->add_child( $Entry2 ) }, 'Base Entry dies' );
    dies_ok( sub{ $Base->add_child( $Group2 ) }, 'Base Group dies' );
    dies_ok( sub{ $Base->add_child( $SubEntry2 ) }, 'Base SubEntry dies' );
    dies_ok( sub{ $Base->add_child( $AuthServID) }, 'Base AuthServID dies' );
    dies_ok( sub{ $Base->add_child( $Version ) }, 'Base Version dies' );
};

subtest 'comment' => sub{
    setup();
    dies_ok( sub{ $Comment->add_child( $Header2 ) }, 'Comment Header dies' );
    dies_ok( sub{ $Comment->add_child( $Base2 ) }, 'Comment Base dies' );
    dies_ok( sub{ $Comment->add_child( $Comment2 ) }, 'Comment Comment dies' );
    dies_ok( sub{ $Comment->add_child( $Entry2 ) }, 'Comment Entry dies' );
    dies_ok( sub{ $Comment->add_child( $Group2 ) }, 'Comment Group dies' );
    dies_ok( sub{ $Comment->add_child( $SubEntry2 ) }, 'Comment SubEntry dies' );
    dies_ok( sub{ $Comment->add_child( $AuthServID) }, 'Comment AuthServID dies' );
    dies_ok( sub{ $Comment->add_child( $Version ) }, 'Comment Version dies' );
};

subtest 'entry' => sub{
    setup();
    dies_ok( sub{ $Entry->add_child( $Header2 ) }, 'Entry Header dies' );
    dies_ok( sub{ $Entry->add_child( $Base2 ) }, 'Entry Base dies' );
    lives_ok( sub{ $Entry->add_child( $Comment2 ) }, 'Entry Comment lives' );
    dies_ok( sub{ $Entry->add_child( $Comment2 ) }, 'Entry Comment repeat dies' );
    dies_ok( sub{ $Entry->add_child( $Entry2 ) }, 'Entry Entry dies' );
    dies_ok( sub{ $Entry->add_child( $Group2 ) }, 'Entry Group dies' );
    lives_ok( sub{ $Entry->add_child( $SubEntry2 ) }, 'Entry SubEntry lives' );
    dies_ok( sub{ $Entry->add_child( $AuthServID) }, 'Entry AuthServID dies' );
    lives_ok( sub{ $Entry->add_child( $Version ) }, 'Entry Version lives' );

    lives_ok( sub{ $Entry->remove_child( $Comment2 ) }, 'Entry Comment remove lives' );
    lives_ok( sub{ $Entry->remove_child( $SubEntry2 ) }, 'Entry SubEntry remove lives' );
    lives_ok( sub{ $Entry->remove_child( $Version ) }, 'Entry Version remove lives' );
    lives_ok( sub{ $Entry->add_child( $Comment2 ) }, 'Entry Comment lives' );
    lives_ok( sub{ $Entry->add_child( $SubEntry2 ) }, 'Entry SubEntry lives' );
    lives_ok( sub{ $Entry->add_child( $Version ) }, 'Entry Version lives' );
};

subtest 'group' => sub{
    setup();
    lives_ok( sub{ $Group->add_child( $Header2 ) }, 'Group Header lives' );
    dies_ok( sub{ $Group->add_child( $Base2 ) }, 'Group Base dies' );
    lives_ok( sub{ $Group->add_child( $Comment2 ) }, 'Group Comment lives' );
    lives_ok( sub{ $Group->add_child( $Entry2 ) }, 'Group Entry lives' );
    lives_ok( sub{ $Group->add_child( $Group2 ) }, 'Group Group lives' );
    lives_ok( sub{ $Group->add_child( $SubEntry2 ) }, 'Group SubEntry lives' );
    lives_ok( sub{ $Group->add_child( $AuthServID) }, 'Group AuthServID lives' );
    lives_ok( sub{ $Group->add_child( $Version ) }, 'Group Version lives' );

    # Group repeats should not die, but should not result in duplicates
    is( scalar @{$Group->children()}, 6, 'Has 6 children' );
    lives_ok( sub{ $Group->add_child( $Header2 ) }, 'Group Header repeat lives' );
    lives_ok( sub{ $Group->add_child( $Comment2 ) }, 'Group Comment repeat lives' );
    lives_ok( sub{ $Group->add_child( $Entry2 ) }, 'Group Entry repeat lives' );
    lives_ok( sub{ $Group->add_child( $Group2 ) }, 'Group Group repeat lives' );
    lives_ok( sub{ $Group->add_child( $SubEntry2 ) }, 'Group SubEntry repeat lives' );
    lives_ok( sub{ $Group->add_child( $AuthServID) }, 'Group AuthServID repeat lives' );
    lives_ok( sub{ $Group->add_child( $Version ) }, 'Group Version repeat lives' );
    is( scalar @{$Group->children()}, 6, 'Still has 6 children' );

    lives_ok( sub{ $Group->remove_child( $Header2 ) }, 'Group Header remove lives' );
    lives_ok( sub{ $Group->remove_child( $Comment2 ) }, 'Group Comment remove lives' );
    lives_ok( sub{ $Group->remove_child( $Entry2 ) }, 'Group Entry remove lives' );
    lives_ok( sub{ $Group->remove_child( $SubEntry2 ) }, 'Group SubEntry remove lives' );
    lives_ok( sub{ $Group->remove_child( $AuthServID) }, 'Group AuthServID remove lives' );
    lives_ok( sub{ $Group->remove_child( $Version ) }, 'Group Version remove lives' );
    is( scalar @{$Group->children()}, 0, 'Now has 0 children' );
};

subtest 'subentry' => sub{
    setup();
    dies_ok( sub{ $SubEntry->add_child( $Header2 ) }, 'SubEntry Header dies' );
    dies_ok( sub{ $SubEntry->add_child( $Base2 ) }, 'SubEntry Base dies' );
    lives_ok( sub{ $SubEntry->add_child( $Comment2 ) }, 'SubEntry Comment lives' );
    dies_ok( sub{ $SubEntry->add_child( $Comment2 ) }, 'SubEntry Comment repeat dies' );
    dies_ok( sub{ $SubEntry->add_child( $Entry2 ) }, 'SubEntry Entry dies' );
    dies_ok( sub{ $SubEntry->add_child( $Group2 ) }, 'SubEntry Group dies' );
    dies_ok( sub{ $SubEntry->add_child( $SubEntry2 ) }, 'SubEntry SubEntry dies' );
    dies_ok( sub{ $SubEntry->add_child( $AuthServID) }, 'SubEntry AuthServID dies' );
    lives_ok( sub{ $SubEntry->add_child( $Version ) }, 'SubEntry Version lives' );

    lives_ok( sub{ $SubEntry->remove_child( $Comment2 ) }, 'SubEntry Comment remove lives' );
    lives_ok( sub{ $SubEntry->remove_child( $Version ) }, 'SubEntry Version remove lives' );
    lives_ok( sub{ $SubEntry->add_child( $Comment2 ) }, 'SubEntry Comment lives' );
    lives_ok( sub{ $SubEntry->add_child( $Version ) }, 'SubEntry Version lives' );
};

subtest 'authservid' => sub{
    setup();
    dies_ok( sub{ $AuthServID->add_child( $Header2 ) }, 'AuthServID Header dies' );
    dies_ok( sub{ $AuthServID->add_child( $Base2 ) }, 'AuthServID Base dies' );
    lives_ok( sub{ $AuthServID->add_child( $Comment2 ) }, 'AuthServID Comment lives' );
    dies_ok( sub{ $AuthServID->add_child( $Comment2 ) }, 'AuthServID Comment repeat dies' );
    dies_ok( sub{ $AuthServID->add_child( $Entry2 ) }, 'AuthServID Entry dies' );
    dies_ok( sub{ $AuthServID->add_child( $Group2 ) }, 'AuthServID Group dies' );
    lives_ok( sub{ $AuthServID->add_child( $SubEntry2 ) }, 'AuthServID SubEntry lives' );
    dies_ok( sub{ $AuthServID->add_child( $AuthServID) }, 'AuthServID AuthServID dies' );
    lives_ok( sub{ $AuthServID->add_child( $Version ) }, 'AuthServID Version lives' );

    lives_ok( sub{ $AuthServID->remove_child( $Comment2 ) }, 'AuthServID Comment remove lives' );
    lives_ok( sub{ $AuthServID->remove_child( $SubEntry2 ) }, 'AuthServID SubEntry remove lives' );
    lives_ok( sub{ $AuthServID->remove_child( $Version ) }, 'AuthServID Version remove lives' );
    lives_ok( sub{ $AuthServID->add_child( $Comment2 ) }, 'AuthServID Comment lives' );
    lives_ok( sub{ $AuthServID->add_child( $SubEntry2 ) }, 'AuthServID SubEntry lives' );
    lives_ok( sub{ $AuthServID->add_child( $Version ) }, 'AuthServID Version lives' );
};

subtest 'version' => sub{
    setup();
    dies_ok( sub{ $Version->add_child( $Header2 ) }, 'Version Header dies' );
    dies_ok( sub{ $Version->add_child( $Base2 ) }, 'Version Base dies' );
    dies_ok( sub{ $Version->add_child( $Comment2 ) }, 'Version Comment dies' );
    dies_ok( sub{ $Version->add_child( $Comment2 ) }, 'Version Comment repeat dies' );
    dies_ok( sub{ $Version->add_child( $Entry2 ) }, 'Version Entry dies' );
    dies_ok( sub{ $Version->add_child( $Group2 ) }, 'Version Group dies' );
    dies_ok( sub{ $Version->add_child( $SubEntry2 ) }, 'Version SubEntry dies' );
    dies_ok( sub{ $Version->add_child( $AuthServID) }, 'Version AuthServID dies' );
    dies_ok( sub{ $Version->add_child( $Version ) }, 'Version Version dies' );
};

done_testing();