~clinton-collins/familyproject/trunk

« back to all changes in this revision

Viewing changes to ZendFramework/tests/Zend/Mail/MaildirTest.php

  • Committer: Clinton Collins
  • Date: 2009-06-26 19:54:58 UTC
  • Revision ID: clinton.collins@gmail.com-20090626195458-5ebba0qcvo15xlpy
Initial Import

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<?php
 
2
 
 
3
/**
 
4
 * @category   Zend
 
5
 * @package    Zend_Mail
 
6
 * @subpackage UnitTests
 
7
 */
 
8
 
 
9
 
 
10
/**
 
11
 * Zend_Mail_Storage_Maildir
 
12
 */
 
13
require_once 'Zend/Mail/Storage/Maildir.php';
 
14
 
 
15
/**
 
16
 * Zend_Config
 
17
 */
 
18
require_once 'Zend/Config.php';
 
19
 
 
20
/**
 
21
 * PHPUnit test case
 
22
 */
 
23
require_once 'PHPUnit/Framework/TestCase.php';
 
24
 
 
25
 
 
26
/**
 
27
 * @category   Zend
 
28
 * @package    Zend_Mail
 
29
 * @subpackage UnitTests
 
30
 */
 
31
class Zend_Mail_MaildirTest extends PHPUnit_Framework_TestCase
 
32
{
 
33
    protected $_originalMaildir;
 
34
    protected $_maildir;
 
35
    protected $_tmpdir;
 
36
 
 
37
    public function setUp()
 
38
    {
 
39
        $this->_originalMaildir = dirname(__FILE__) . '/_files/test.maildir/';
 
40
        if (!is_dir($this->_originalMaildir . '/cur/')) {
 
41
            $this->markTestSkipped('You have to unpack maildir.tar in Zend/Mail/_files/test.maildir/ '
 
42
                                 . 'directory before enabling the maildir tests');
 
43
            return;
 
44
        }
 
45
 
 
46
        if ($this->_tmpdir == null) {
 
47
            if (TESTS_ZEND_MAIL_TEMPDIR != null) {
 
48
                $this->_tmpdir = TESTS_ZEND_MAIL_TEMPDIR;
 
49
            } else {
 
50
                $this->_tmpdir = dirname(__FILE__) . '/_files/test.tmp/';
 
51
            }
 
52
            if (!file_exists($this->_tmpdir)) {
 
53
                mkdir($this->_tmpdir);
 
54
            }
 
55
            $count = 0;
 
56
            $dh = opendir($this->_tmpdir);
 
57
            while (readdir($dh) !== false) {
 
58
                ++$count;
 
59
            }
 
60
            closedir($dh);
 
61
            if ($count != 2) {
 
62
                $this->markTestSkipped('Are you sure your tmp dir is a valid empty dir?');
 
63
                return;
 
64
            }
 
65
        }
 
66
 
 
67
        $this->_maildir = $this->_tmpdir;
 
68
 
 
69
        foreach (array('cur', 'new') as $dir) {
 
70
            mkdir($this->_tmpdir . $dir);
 
71
            $dh = opendir($this->_originalMaildir . $dir);
 
72
            while (($entry = readdir($dh)) !== false) {
 
73
                $entry = $dir . '/' . $entry;
 
74
                if (!is_file($this->_originalMaildir . $entry)) {
 
75
                    continue;
 
76
                }
 
77
                copy($this->_originalMaildir . $entry, $this->_tmpdir . $entry);
 
78
            }
 
79
            closedir($dh);
 
80
        }
 
81
    }
 
82
 
 
83
    public function tearDown()
 
84
    {
 
85
        foreach (array('cur', 'new') as $dir) {
 
86
            $dh = opendir($this->_tmpdir . $dir);
 
87
            while (($entry = readdir($dh)) !== false) {
 
88
                $entry = $this->_tmpdir . $dir . '/' . $entry;
 
89
                if (!is_file($entry)) {
 
90
                    continue;
 
91
                }
 
92
                unlink($entry);
 
93
            }
 
94
            closedir($dh);
 
95
            rmdir($this->_tmpdir . $dir);
 
96
        }
 
97
    }
 
98
 
 
99
    public function testLoadOk()
 
100
    {
 
101
        try {
 
102
            $mail = new Zend_Mail_Storage_Maildir(array('dirname' => $this->_maildir));
 
103
        } catch (Exception $e) {
 
104
            $this->fail('exception raised while loading maildir');
 
105
        }
 
106
    }
 
107
 
 
108
    public function testLoadConfig()
 
109
    {
 
110
        try {
 
111
            $mail = new Zend_Mail_Storage_Maildir(new Zend_Config(array('dirname' => $this->_maildir)));
 
112
        } catch (Exception $e) {
 
113
            $this->fail('exception raised while loading maildir');
 
114
        }
 
115
    }
 
116
 
 
117
    public function testLoadFailure()
 
118
    {
 
119
        try {
 
120
            $mail = new Zend_Mail_Storage_Maildir(array('dirname' => '/This/Dir/Does/Not/Exist'));
 
121
        } catch (Exception $e) {
 
122
            return; // test ok
 
123
        }
 
124
 
 
125
        $this->fail('no exception raised while loading unknown dir');
 
126
    }
 
127
 
 
128
    public function testLoadInvalid()
 
129
    {
 
130
        try {
 
131
            $mail = new Zend_Mail_Storage_Maildir(array('dirname' => dirname(__FILE__)));
 
132
        } catch (Exception $e) {
 
133
            return; // test ok
 
134
        }
 
135
 
 
136
        $this->fail('no exception while loading invalid dir');
 
137
    }
 
138
 
 
139
    public function testClose()
 
140
    {
 
141
        $mail = new Zend_Mail_Storage_Maildir(array('dirname' => $this->_maildir));
 
142
 
 
143
        try {
 
144
            $mail->close();
 
145
        } catch (Exception $e) {
 
146
            $this->fail('exception raised while closing maildir');
 
147
        }
 
148
    }
 
149
 
 
150
    public function testHasTop()
 
151
    {
 
152
        $mail = new Zend_Mail_Storage_Maildir(array('dirname' => $this->_maildir));
 
153
 
 
154
        $this->assertTrue($mail->hasTop);
 
155
    }
 
156
 
 
157
    public function testHasCreate()
 
158
    {
 
159
        $mail = new Zend_Mail_Storage_Maildir(array('dirname' => $this->_maildir));
 
160
 
 
161
        $this->assertFalse($mail->hasCreate);
 
162
    }
 
163
 
 
164
    public function testNoop()
 
165
    {
 
166
        $mail = new Zend_Mail_Storage_Maildir(array('dirname' => $this->_maildir));
 
167
 
 
168
        try {
 
169
            $mail->noop();
 
170
        } catch (Exception $e) {
 
171
            $this->fail('exception raised while doing nothing (noop)');
 
172
        }
 
173
    }
 
174
 
 
175
    public function testCount()
 
176
    {
 
177
        $mail = new Zend_Mail_Storage_Maildir(array('dirname' => $this->_maildir));
 
178
 
 
179
        $count = $mail->countMessages();
 
180
        $this->assertEquals(5, $count);
 
181
    }
 
182
 
 
183
    public function testSize()
 
184
    {
 
185
        $mail = new Zend_Mail_Storage_Maildir(array('dirname' => $this->_maildir));
 
186
        $shouldSizes = array(1 => 397, 89, 694, 452, 497);
 
187
 
 
188
 
 
189
        $sizes = $mail->getSize();
 
190
        $this->assertEquals($shouldSizes, $sizes);
 
191
    }
 
192
 
 
193
    public function testSingleSize()
 
194
    {
 
195
        $mail = new Zend_Mail_Storage_Maildir(array('dirname' => $this->_maildir));
 
196
 
 
197
        $size = $mail->getSize(2);
 
198
        $this->assertEquals(89, $size);
 
199
    }
 
200
 
 
201
    public function testFetchHeader()
 
202
    {
 
203
        $mail = new Zend_Mail_Storage_Maildir(array('dirname' => $this->_maildir));
 
204
 
 
205
        $subject = $mail->getMessage(1)->subject;
 
206
        $this->assertEquals('Simple Message', $subject);
 
207
    }
 
208
 
 
209
/*
 
210
    public function testFetchTopBody()
 
211
    {
 
212
        $mail = new Zend_Mail_Storage_Maildir(array('dirname' => $this->_maildir));
 
213
 
 
214
        $content = $mail->getHeader(3, 1)->getContent();
 
215
        $this->assertEquals('Fair river! in thy bright, clear flow', trim($content));
 
216
    }
 
217
*/
 
218
    public function testFetchMessageHeader()
 
219
    {
 
220
        $mail = new Zend_Mail_Storage_Maildir(array('dirname' => $this->_maildir));
 
221
 
 
222
        $subject = $mail->getMessage(1)->subject;
 
223
        $this->assertEquals('Simple Message', $subject);
 
224
    }
 
225
 
 
226
    public function testFetchMessageBody()
 
227
    {
 
228
        $mail = new Zend_Mail_Storage_Maildir(array('dirname' => $this->_maildir));
 
229
 
 
230
        $content = $mail->getMessage(3)->getContent();
 
231
        list($content, ) = explode("\n", $content, 2);
 
232
        $this->assertEquals('Fair river! in thy bright, clear flow', trim($content));
 
233
    }
 
234
 
 
235
    public function testFetchWrongSize()
 
236
    {
 
237
        $mail = new Zend_Mail_Storage_Maildir(array('dirname' => $this->_maildir));
 
238
 
 
239
        try {
 
240
            $mail->getSize(0);
 
241
        } catch (Exception $e) {
 
242
            return; // test ok
 
243
        }
 
244
 
 
245
        $this->fail('no exception raised while getting size for message 0');
 
246
    }
 
247
 
 
248
    public function testFetchWrongMessageBody()
 
249
    {
 
250
        $mail = new Zend_Mail_Storage_Maildir(array('dirname' => $this->_maildir));
 
251
 
 
252
        try {
 
253
            $mail->getMessage(0);
 
254
        } catch (Exception $e) {
 
255
            return; // test ok
 
256
        }
 
257
 
 
258
        $this->fail('no exception raised while fetching message 0');
 
259
    }
 
260
 
 
261
    public function testFailedRemove()
 
262
    {
 
263
        $mail = new Zend_Mail_Storage_Maildir(array('dirname' => $this->_maildir));
 
264
 
 
265
        try {
 
266
            $mail->removeMessage(1);
 
267
        } catch (Exception $e) {
 
268
            return; // test ok
 
269
        }
 
270
 
 
271
        $this->fail('no exception raised while deleting message (maildir is read-only)');
 
272
    }
 
273
 
 
274
    public function testHasFlag()
 
275
    {
 
276
        $mail = new Zend_Mail_Storage_Maildir(array('dirname' => $this->_maildir));
 
277
 
 
278
        $this->assertFalse($mail->getMessage(5)->hasFlag(Zend_Mail_Storage::FLAG_SEEN));
 
279
        $this->assertTrue($mail->getMessage(5)->hasFlag(Zend_Mail_Storage::FLAG_RECENT));
 
280
        $this->assertTrue($mail->getMessage(2)->hasFlag(Zend_Mail_Storage::FLAG_FLAGGED));
 
281
        $this->assertFalse($mail->getMessage(2)->hasFlag(Zend_Mail_Storage::FLAG_ANSWERED));
 
282
    }
 
283
 
 
284
    public function testGetFlags()
 
285
    {
 
286
        $mail = new Zend_Mail_Storage_Maildir(array('dirname' => $this->_maildir));
 
287
 
 
288
        $flags = $mail->getMessage(1)->getFlags();
 
289
        $this->assertTrue(isset($flags[Zend_Mail_Storage::FLAG_SEEN]));
 
290
        $this->assertTrue(in_array(Zend_Mail_Storage::FLAG_SEEN, $flags));
 
291
    }
 
292
 
 
293
    public function testUniqueId()
 
294
    {
 
295
        $mail = new Zend_Mail_Storage_Maildir(array('dirname' => $this->_maildir));
 
296
 
 
297
        $this->assertTrue($mail->hasUniqueId);
 
298
        $this->assertEquals(1, $mail->getNumberByUniqueId($mail->getUniqueId(1)));
 
299
 
 
300
        $ids = $mail->getUniqueId();
 
301
        $should_ids = array(1 => '1000000000.P1.example.org', '1000000001.P1.example.org', '1000000002.P1.example.org',
 
302
                            '1000000003.P1.example.org', '1000000004.P1.example.org');
 
303
        foreach ($ids as $num => $id) {
 
304
            $this->assertEquals($id, $should_ids[$num]);
 
305
 
 
306
            if ($mail->getNumberByUniqueId($id) != $num) {
 
307
                    $this->fail('reverse lookup failed');
 
308
            }
 
309
        }
 
310
    }
 
311
 
 
312
    public function testWrongUniqueId()
 
313
    {
 
314
        $mail = new Zend_Mail_Storage_Maildir(array('dirname' => $this->_maildir));
 
315
        try {
 
316
            $mail->getNumberByUniqueId('this_is_an_invalid_id');
 
317
        } catch (Exception $e) {
 
318
            return; // test ok
 
319
        }
 
320
 
 
321
        $this->fail('no exception while getting number for invalid id');
 
322
    }
 
323
 
 
324
    public function isFileTest($dir)
 
325
    {
 
326
        if (file_exists($this->_maildir . '/' . $dir)) {
 
327
            rename($this->_maildir . '/' . $dir, $this->_maildir . '/' . $dir . 'bak');
 
328
        }
 
329
        touch($this->_maildir . '/' . $dir);
 
330
 
 
331
        $check = false;
 
332
        try {
 
333
            $mail = new Zend_Mail_Storage_Maildir(array('dirname' => $this->_maildir));
 
334
        } catch (Exception $e) {
 
335
            $check = true;
 
336
            // test ok
 
337
        }
 
338
 
 
339
        unlink($this->_maildir . '/' . $dir);
 
340
        if (file_exists($this->_maildir . '/' . $dir . 'bak')) {
 
341
            rename($this->_maildir . '/' . $dir . 'bak', $this->_maildir . '/' . $dir);
 
342
        }
 
343
 
 
344
        if (!$check) {
 
345
           $this->fail('no exception while loading invalid dir with ' . $dir . ' as file');
 
346
        }
 
347
    }
 
348
 
 
349
    public function testCurIsFile()
 
350
    {
 
351
        $this->isFileTest('cur');
 
352
    }
 
353
 
 
354
    public function testNewIsFile()
 
355
    {
 
356
        $this->isFileTest('new');
 
357
    }
 
358
 
 
359
    public function testTmpIsFile()
 
360
    {
 
361
        $this->isFileTest('tmp');
 
362
    }
 
363
 
 
364
    public function notReadableTest($dir)
 
365
    {
 
366
        $stat = stat($this->_maildir . '/' . $dir);
 
367
        chmod($this->_maildir . '/' . $dir, 0);
 
368
 
 
369
        $check = false;
 
370
        try {
 
371
            $mail = new Zend_Mail_Storage_Maildir(array('dirname' => $this->_maildir));
 
372
        } catch (Exception $e) {
 
373
            $check = true;
 
374
            // test ok
 
375
        }
 
376
 
 
377
        chmod($this->_maildir . '/' . $dir, $stat['mode']);
 
378
 
 
379
        if (!$check) {
 
380
           $this->fail('no exception while loading invalid dir with ' . $dir . ' not readable');
 
381
        }
 
382
    }
 
383
 
 
384
    public function testNotReadableCur()
 
385
    {
 
386
        $this->notReadableTest('cur');
 
387
    }
 
388
 
 
389
    public function testNotReadableNew()
 
390
    {
 
391
        $this->notReadableTest('new');
 
392
    }
 
393
 
 
394
    public function testCountFlags()
 
395
    {
 
396
        $mail = new Zend_Mail_Storage_Maildir(array('dirname' => $this->_maildir));
 
397
                $this->assertEquals($mail->countMessages(Zend_Mail_Storage::FLAG_DELETED), 0);
 
398
                $this->assertEquals($mail->countMessages(Zend_Mail_Storage::FLAG_RECENT), 1);
 
399
                $this->assertEquals($mail->countMessages(Zend_Mail_Storage::FLAG_FLAGGED), 1);
 
400
                $this->assertEquals($mail->countMessages(Zend_Mail_Storage::FLAG_SEEN), 4);
 
401
                $this->assertEquals($mail->countMessages(array(Zend_Mail_Storage::FLAG_SEEN, Zend_Mail_Storage::FLAG_FLAGGED)), 1);
 
402
                $this->assertEquals($mail->countMessages(array(Zend_Mail_Storage::FLAG_SEEN, Zend_Mail_Storage::FLAG_RECENT)), 0);
 
403
    }
 
404
 
 
405
        public function testFetchPart()
 
406
        {
 
407
        $mail = new Zend_Mail_Storage_Maildir(array('dirname' => $this->_maildir));
 
408
        $this->assertEquals($mail->getMessage(4)->getPart(2)->contentType, 'text/x-vertical');
 
409
        }
 
410
 
 
411
        public function testPartSize()
 
412
        {
 
413
        $mail = new Zend_Mail_Storage_Maildir(array('dirname' => $this->_maildir));
 
414
        $this->assertEquals($mail->getMessage(4)->getPart(2)->getSize(), 88);
 
415
        }
 
416
 
 
417
    public function testSizePlusPlus()
 
418
    {
 
419
        rename($this->_maildir . '/cur/1000000000.P1.example.org:2,S', $this->_maildir . '/cur/1000000000.P1.example.org,S=123:2,S');
 
420
        rename($this->_maildir . '/cur/1000000001.P1.example.org:2,FS', $this->_maildir . '/cur/1000000001.P1.example.org,S=456:2,FS');
 
421
        $mail = new Zend_Mail_Storage_Maildir(array('dirname' => $this->_maildir));
 
422
        $shouldSizes = array(1 => 123, 456, 694, 452, 497);
 
423
 
 
424
 
 
425
        $sizes = $mail->getSize();
 
426
        $this->assertEquals($shouldSizes, $sizes);
 
427
    }
 
428
 
 
429
    public function testSingleSizePlusPlus()
 
430
    {
 
431
        rename($this->_maildir . '/cur/1000000001.P1.example.org:2,FS', $this->_maildir . '/cur/1000000001.P1.example.org,S=456:2,FS');
 
432
        $mail = new Zend_Mail_Storage_Maildir(array('dirname' => $this->_maildir));
 
433
 
 
434
        $size = $mail->getSize(2);
 
435
        $this->assertEquals(456, $size);
 
436
    }
 
437
 
 
438
}