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
|
<?php
namespace Roundcube\Tests\Framework;
use PHPUnit\Framework\TestCase;
use function Roundcube\Tests\invokeMethod;
/**
* Test class to test rcube_imap class
*/
class Framework_Imap extends TestCase
{
/**
* Class constructor
*/
function test_class()
{
$object = new \rcube_imap();
$this->assertInstanceOf(\rcube_imap::class, $object, "Class constructor");
}
/**
* Test convert_criteria()
*/
function test_convert_criteria()
{
$this->assertSame(
"FLAGGED SINCE 1-Feb-1994 NOT FROM \"Smith\"",
\rcube_imap::convert_criteria("FLAGGED SINCE 1-Feb-1994 NOT FROM \"Smith\"", RCUBE_CHARSET)
);
$this->assertSame(
"ALL TEXT el",
\rcube_imap::convert_criteria("ALL TEXT {4}\r\nżel", RCUBE_CHARSET)
);
$this->assertSame(
"ALL TEXT {4}\r\nżel",
\rcube_imap::convert_criteria("ALL TEXT {4}\r\nżel", RCUBE_CHARSET, RCUBE_CHARSET)
);
}
/**
* Folder sorting
*/
function test_sort_folder_list()
{
$_SESSION['imap_delimiter'] = '.';
$_SESSION['imap_namespace'] = [
'personal' => null,
'other' => [['Other Users.', '.']],
'shared' => [['Shared.', '.']],
];
foreach (['drafts', 'sent', 'junk', 'trash'] as $mbox) {
\rcube::get_instance()->config->set("{$mbox}_mbox", ucfirst($mbox));
}
$object = new \rcube_imap();
$result = $object->sort_folder_list([]);
$this->assertSame([], $result);
$result = $object->sort_folder_list(['B', 'A']);
$this->assertSame(['A', 'B'], $result);
$folders = [
'Trash',
'Sent',
'ABC',
'Drafts',
'INBOX.Trash',
'INBOX.Junk',
'INBOX.Sent',
'INBOX.Drafts',
'Shared.Test1',
'Other Users.Test2',
'Junk',
'INBOX',
'DEF',
];
$expected = [
'INBOX',
'INBOX.Drafts',
'INBOX.Junk',
'INBOX.Sent',
'INBOX.Trash',
'Drafts',
'Sent',
'Junk',
'Trash',
'ABC',
'DEF',
'Other Users.Test2',
'Shared.Test1',
];
$result = $object->sort_folder_list($folders);
$this->assertSame($expected, $result);
}
/**
* BODYSTRUCTURE parsing
*/
function test_bodystructure()
{
// A sample from #8803
$str = '(("TEXT" "PLAIN" ("CHARSET" "utf-8") NIL NIL "8bit" 232 7)'
. '("MESSAGE" "DISPOSITION-NOTIFICATION" ("NAME" "ATT-3.dat") NIL NIL "7bit" 269 NIL ("ATTACHMENT" ("FILENAME" "ATT-3.dat")))'
. '("MESSAGE" "RFC822" ("NAME" "Test mail.eml") NIL NIL "7bit" 3953 ("Fri, 25 Nov 2022 18:08:05 +0000" "Test mail"'
. ' (("Sender" NIL "sender" "hostname.tld"))'
. ' (("Sender" NIL "sender" "hostname.tld"))'
. ' (("Sender" NIL "sender" "hostname.tld"))'
. ' (("Recipient A" NIL "extmail" "exthost.tld"))'
. ' (("Recipient B" NIL "otherusr" "hostname.tld"))'
. ' NIL NIL "<960564af959918c2a7b2e59bde1ebb79@hostname.tld>")'
. ' ( "MIXED" ("BOUNDARY" "=_0cc01990d46dea96cd7d692970fcbf82") NIL NIL) 1 NIL ("ATTACHMENT" ("FILENAME" "Test mail.eml")))'
. ' "REPORT" ("BOUNDARY" "=_RrjQxjLYBqTMnoYWobuYlwN") NIL NIL)';
$structure = \rcube_imap_generic::tokenizeResponse($str, 1);
$imap = new \rcube_imap();
$result = invokeMethod($imap, 'structure_part', [$structure]);
$this->assertSame('0', $result->mime_id);
$this->assertSame('multipart', $result->ctype_primary);
$this->assertSame('report', $result->ctype_secondary);
$this->assertSame('multipart/report', $result->mimetype);
$this->assertSame(['boundary' => '=_RrjQxjLYBqTMnoYWobuYlwN'], $result->ctype_parameters);
$this->assertSame([], $result->d_parameters);
$this->assertSame('8bit', $result->encoding);
$this->assertCount(3, $result->parts);
$part = $result->parts[2];
$this->assertSame('3', $part->mime_id);
$this->assertSame('message/rfc822', $part->mimetype);
$this->assertSame('multipart/mixed', $part->real_mimetype);
$this->assertSame(3953, $part->size);
$this->assertCount(1, $part->parts);
}
}
|