Change Section to debug for libmimetic0-dbg.
[debian/mimetic.git] / test / t.rfc822.cxx
1 #include "t.rfc822.h"
2 #include <string>
3
4 namespace mimetic
5 {
6 using namespace std;
7
8
9
10 void testRfc822::testGroup()
11 {
12     struct test_item
13     {
14         enum { max_n = 16 };
15         const char *input, *name, *mailboxes[max_n];
16     };
17     static const test_item data[] = {
18         {
19              "empty: ;", 
20                "empty", 
21             { 0 } 
22         },
23         {
24              "name: e@mail.com;", 
25                "name", 
26             {"e@mail.com", 0 } 
27         },
28         {
29              " group name : e@mail.com, b@mail.com", 
30                "group name", 
31             {"e@mail.com", 0 } 
32         },
33         {
34              "group(comment)name: e@mail.com   , se@cond.com, th@ird.com;", 
35                "group(comment)name", 
36             {"e@mail.com", "se@cond.com", "th@ird.com", 0 } 
37         },
38
39         { 0, 0, {0} }
40         };
41     for( int i = 0; data[i].input; ++i)
42     {
43         Group grp(data[i].input);
44         TEST_ASSERT_EQUALS_M(grp.name(), data[i].name,
45             PRINT_ON_FAILURE_2(grp.name(), data[i].name) );
46         Group::const_iterator bit = grp.begin(), eit = grp.end();
47         for( int t = 0; data[i].mailboxes[t]; ++t, ++bit)
48         {
49             TEST_ASSERT( bit != eit );
50             const Mailbox& mbx = *bit;
51             /*
52             cerr << mbx.mailbox() << endl;
53             cerr << mbx.domain() << endl;
54             cerr << mbx.str() << endl;
55             */
56             TEST_ASSERT_EQUALS_M(mbx, data[i].mailboxes[t],
57                 PRINT_ON_FAILURE_3(t, mbx.str(), data[i].mailboxes[t]) );
58         }
59     }
60
61 }
62
63 void testRfc822::testMailbox()
64 {
65     struct test_item
66     {
67         const char *input, *mailbox, *domain, *label, *sourceroute;
68     };
69     static const test_item data[] = {
70         { "e@mail.com", "e", "mail.com", "", "" },
71         { "<e@mail.com>", "e", "mail.com", "", "" },
72         { "(My Name) <e@mail.com>", "e", "mail.com", "(My Name)", "" },
73         { "descr <e@mail.com>", "e", "mail.com", "descr", "" },
74         { "descr <e@mail.com>", "e", "mail.com", "descr", "" },
75         { "\"with a space\"@mail.com", "\"with a space\"", 
76           "mail.com", "", "" },
77         { "<\"with a space\"@mail.com>", "\"with a space\"", 
78           "mail.com", "", "" },
79         { "name surname <@dom1.com@dom2.com:e@mail.com>", "e", 
80           "mail.com", "name surname", "@dom1.com@dom2.com" },
81         // with comments
82         { "de(this is a comment)scr <e(boom)@mail.com>", "e", 
83           "mail.com", "de(this is a comment)scr", "" },
84         { "<e(boom). (boo)d@mail.com>", "e.d", "mail.com", "", "" },
85         { "Bella Ragga <e(boom). (boo)d@mail.com>", "e.d", 
86           "mail.com", "Bella Ragga", "" },
87         { 0,0,0,0,0 }
88         };
89     // test parser
90     for( int i = 0; data[i].input; ++i)
91     {
92         Mailbox mbx(data[i].input);
93         TEST_ASSERT_EQUALS_M(mbx.mailbox(), data[i].mailbox, 
94             PRINT_ON_FAILURE_4(
95                 i, 
96                 data[i].input, 
97                 mbx.mailbox(), 
98                 data[i].mailbox));
99         TEST_ASSERT_EQUALS_M(mbx.domain(), data[i].domain,
100             PRINT_ON_FAILURE_4(
101                 i, 
102                 data[i].input, 
103                 mbx.domain(), 
104                 data[i].domain));
105         TEST_ASSERT_EQUALS_M(mbx.label(), data[i].label, 
106             PRINT_ON_FAILURE_4(
107                 i, 
108                 data[i].input, 
109                 mbx.label(), 
110                 data[i].label));
111         TEST_ASSERT_EQUALS_M(mbx.sourceroute(), data[i].sourceroute,
112             PRINT_ON_FAILURE_4(
113                 i, 
114                 data[i].input, 
115                 mbx.sourceroute(), 
116                 data[i].sourceroute));
117     }
118     
119     // test == and != operators
120     for( int i = 0; data[i].input; ++i)
121     {
122         Mailbox mbx, mbxParsed(data[i].input);
123         mbx.mailbox(data[i].mailbox);
124         mbx.domain(data[i].domain);
125         mbx.label(data[i].label);
126         mbx.sourceroute(data[i].sourceroute);
127         TEST_ASSERT_EQUALS_M(mbxParsed, mbx,
128             PRINT_ON_FAILURE_4(
129                 i, 
130                 data[i].input, 
131                 mbx.str(),
132                 mbxParsed.str()));
133     }
134 }
135
136 void testRfc822::testAddress()
137 {
138     Address a("e@mail.com"), b;
139     int i;
140     TEST_ASSERT(!a.isGroup());
141
142     b.set("e@mail.com");
143     TEST_ASSERT_EQUALS(a, b);
144
145     a.set("<e@mail.com>");
146     TEST_ASSERT(!a.isGroup());
147
148     a.set(" desc <e@mail.com>");
149     TEST_ASSERT(!a.isGroup());
150     
151     a.set("group label: e@mail.com; <b@aa.com>; blah <email@di.com>; ");
152     TEST_ASSERT(a.isGroup());
153
154     b.set("group label: ;");
155     TEST_ASSERT(b.isGroup());
156
157 }
158
159
160 }