PageRenderTime 47ms CodeModel.GetById 16ms RepoModel.GetById 1ms app.codeStats 0ms

/standard/tags/release-1.0.0RC2a/tests/Zend/Mail/MaildirWritableTest.php

https://github.com/bhaumik25/zend-framework
PHP | 418 lines | 336 code | 65 blank | 17 comment | 21 complexity | 5e3e1d077a5871c297a8c1798400e935 MD5 | raw file
  1. <?php
  2. /**
  3. * @category Zend
  4. * @package Zend_Mail
  5. * @subpackage UnitTests
  6. */
  7. /**
  8. * Zend_Mail_Storage_Folder_Maildir
  9. */
  10. require_once 'Zend/Mail/Storage/Writable/Maildir.php';
  11. /**
  12. * PHPUnit test case
  13. */
  14. require_once 'PHPUnit/Framework/TestCase.php';
  15. /**
  16. * @category Zend
  17. * @package Zend_Mail
  18. * @subpackage UnitTests
  19. */
  20. class Zend_Mail_MaildirWritableTest extends PHPUnit_Framework_TestCase
  21. {
  22. protected $_params;
  23. protected $_originalDir;
  24. protected $_tmpdir;
  25. protected $_subdirs = array('.', '.subfolder', '.subfolder.test');
  26. public function setUp()
  27. {
  28. $this->_originalDir = dirname(__FILE__) . '/_files/test.maildir/';
  29. if (!is_dir($this->_originalDir . '/cur/')) {
  30. $this->markTestSkipped('You have to unpack maildir.tar in Zend/Mail/_files/test.maildir/ '
  31. . 'directory before enabling the maildir tests');
  32. return;
  33. }
  34. if ($this->_tmpdir == null) {
  35. if (TESTS_ZEND_MAIL_TEMPDIR != null) {
  36. $this->_tmpdir = TESTS_ZEND_MAIL_TEMPDIR;
  37. } else {
  38. $this->_tmpdir = dirname(__FILE__) . '/_files/test.tmp/';
  39. }
  40. if (!file_exists($this->_tmpdir)) {
  41. mkdir($this->_tmpdir);
  42. }
  43. $count = 0;
  44. $dh = opendir($this->_tmpdir);
  45. while (readdir($dh) !== false) {
  46. ++$count;
  47. }
  48. closedir($dh);
  49. if ($count != 2) {
  50. $this->markTestSkipped('Are you sure your tmp dir is a valid empty dir?');
  51. return;
  52. }
  53. }
  54. $this->_params = array();
  55. $this->_params['dirname'] = $this->_tmpdir;
  56. foreach ($this->_subdirs as $dir) {
  57. if ($dir != '.') {
  58. mkdir($this->_tmpdir . $dir);
  59. }
  60. foreach (array('cur', 'new') as $subdir) {
  61. if (!file_exists($this->_originalDir . $dir . '/' . $subdir)) {
  62. continue;
  63. }
  64. mkdir($this->_tmpdir . $dir . '/' . $subdir);
  65. $dh = opendir($this->_originalDir . $dir . '/' . $subdir);
  66. while (($entry = readdir($dh)) !== false) {
  67. $entry = $dir . '/' . $subdir . '/' . $entry;
  68. if (!is_file($this->_originalDir . $entry)) {
  69. continue;
  70. }
  71. copy($this->_originalDir . $entry, $this->_tmpdir . $entry);
  72. }
  73. closedir($dh);
  74. }
  75. }
  76. }
  77. public function tearDown()
  78. {
  79. foreach (array_reverse($this->_subdirs) as $dir) {
  80. if (!file_exists($this->_tmpdir . $dir)) {
  81. continue;
  82. }
  83. foreach (array('cur', 'new', 'tmp') as $subdir) {
  84. if (!file_exists($this->_tmpdir . $dir . '/' . $subdir)) {
  85. continue;
  86. }
  87. $dh = opendir($this->_tmpdir . $dir . '/' . $subdir);
  88. while (($entry = readdir($dh)) !== false) {
  89. $entry = $this->_tmpdir . $dir . '/' . $subdir . '/' . $entry;
  90. if (!is_file($entry)) {
  91. continue;
  92. }
  93. unlink($entry);
  94. }
  95. closedir($dh);
  96. rmdir($this->_tmpdir . $dir . '/' . $subdir);
  97. }
  98. if ($dir != '.') {
  99. rmdir($this->_tmpdir . $dir);
  100. }
  101. }
  102. }
  103. public function testCreateFolder()
  104. {
  105. $mail = new Zend_Mail_Storage_Writable_Maildir($this->_params);
  106. $mail->createFolder('subfolder.test1');
  107. $mail->createFolder('test2', 'INBOX.subfolder');
  108. $mail->createFolder('test3', $mail->getFolders()->subfolder);
  109. $mail->createFolder('foo.bar');
  110. try {
  111. $mail->selectFolder($mail->getFolders()->subfolder->test1);
  112. $mail->selectFolder($mail->getFolders()->subfolder->test2);
  113. $mail->selectFolder($mail->getFolders()->subfolder->test3);
  114. $mail->selectFolder($mail->getFolders()->foo->bar);
  115. } catch (Exception $e) {
  116. $this->fail('could not get new folders');
  117. }
  118. // to tear down
  119. $this->_subdirs[] = '.subfolder.test1';
  120. $this->_subdirs[] = '.subfolder.test2';
  121. $this->_subdirs[] = '.subfolder.test3';
  122. $this->_subdirs[] = '.foo';
  123. $this->_subdirs[] = '.foo.bar';
  124. }
  125. public function testCreateFolderEmtpyPart()
  126. {
  127. $mail = new Zend_Mail_Storage_Writable_Maildir($this->_params);
  128. try {
  129. $mail->createFolder('foo..bar');
  130. } catch (Exception $e) {
  131. return; //ok
  132. }
  133. $this->fail('no exception while creating folder with empty part name');
  134. }
  135. public function testCreateFolderSlash()
  136. {
  137. $mail = new Zend_Mail_Storage_Writable_Maildir($this->_params);
  138. try {
  139. $mail->createFolder('foo/bar');
  140. } catch (Exception $e) {
  141. return; //ok
  142. }
  143. $this->fail('no exception while creating folder with slash');
  144. }
  145. public function testCreateFolderDirectorySeparator()
  146. {
  147. $mail = new Zend_Mail_Storage_Writable_Maildir($this->_params);
  148. try {
  149. $mail->createFolder('foo' . DIRECTORY_SEPARATOR . 'bar');
  150. } catch (Exception $e) {
  151. return; //ok
  152. }
  153. $this->fail('no exception while creating folder with DIRECTORY_SEPARATOR');
  154. }
  155. public function testCreateFolderExistingDir()
  156. {
  157. $mail = new Zend_Mail_Storage_Writable_Maildir($this->_params);
  158. unset($mail->getFolders()->subfolder->test);
  159. try {
  160. $mail->createFolder('subfolder.test');
  161. } catch (Exception $e) {
  162. return; // ok
  163. }
  164. $this->fail('should not be able to create existing folder');
  165. }
  166. public function testCreateExistingFolder()
  167. {
  168. $mail = new Zend_Mail_Storage_Writable_Maildir($this->_params);
  169. try {
  170. $mail->createFolder('subfolder.test');
  171. } catch (Exception $e) {
  172. return; // ok
  173. }
  174. $this->fail('should not be able to create existing folder');
  175. }
  176. public function testRemoveFolderName()
  177. {
  178. $mail = new Zend_Mail_Storage_Writable_Maildir($this->_params);
  179. $mail->removeFolder('INBOX.subfolder.test');
  180. try {
  181. $mail->selectFolder($mail->getFolders()->subfolder->test);
  182. } catch (Exception $e) {
  183. return; // ok
  184. }
  185. $this->fail('folder still exists');
  186. }
  187. public function testRemoveFolderInstance()
  188. {
  189. $mail = new Zend_Mail_Storage_Writable_Maildir($this->_params);
  190. $mail->removeFolder($mail->getFolders()->subfolder->test);
  191. try {
  192. $mail->selectFolder($mail->getFolders()->subfolder->test);
  193. } catch (Exception $e) {
  194. return; // ok
  195. }
  196. $this->fail('folder still exists');
  197. }
  198. public function testRemoveFolderWithChildren()
  199. {
  200. $mail = new Zend_Mail_Storage_Writable_Maildir($this->_params);
  201. try {
  202. $mail->removeFolder($mail->getFolders()->subfolder);
  203. } catch (Exception $e) {
  204. return; // ok
  205. }
  206. $this->fail('should not be able to remove a folder with children');
  207. }
  208. public function testRemoveSelectedFolder()
  209. {
  210. $mail = new Zend_Mail_Storage_Writable_Maildir($this->_params);
  211. $mail->selectFolder('subfolder.test');
  212. try {
  213. $mail->removeFolder('subfolder.test');
  214. } catch (Exception $e) {
  215. return; // ok
  216. }
  217. $this->fail('no error while removing selected folder');
  218. }
  219. public function testRemoveInvalidFolder()
  220. {
  221. $mail = new Zend_Mail_Storage_Writable_Maildir($this->_params);
  222. try {
  223. $mail->removeFolder('thisFolderDoestNotExist');
  224. } catch (Exception $e) {
  225. return; // ok
  226. }
  227. $this->fail('no error while removing invalid folder');
  228. }
  229. public function testRenameFolder()
  230. {
  231. $mail = new Zend_Mail_Storage_Writable_Maildir($this->_params);
  232. try {
  233. $mail->renameFolder('INBOX.subfolder', 'INBOX.foo');
  234. $mail->renameFolder($mail->getFolders()->foo, 'subfolder');
  235. } catch (Exception $e) {
  236. $this->fail('renaming failed');
  237. }
  238. try {
  239. $mail->renameFolder('INBOX', 'foo');
  240. } catch (Exception $e) {
  241. return; // ok
  242. }
  243. $this->fail('no error while renaming INBOX');
  244. }
  245. public function testRenameSelectedFolder()
  246. {
  247. $mail = new Zend_Mail_Storage_Writable_Maildir($this->_params);
  248. $mail->selectFolder('subfolder.test');
  249. try {
  250. $mail->renameFolder('subfolder.test', 'foo');
  251. } catch (Exception $e) {
  252. return; // ok
  253. }
  254. $this->fail('no error while renaming selected folder');
  255. }
  256. public function testRenameToChild()
  257. {
  258. $mail = new Zend_Mail_Storage_Writable_Maildir($this->_params);
  259. try {
  260. $mail->renameFolder('subfolder.test', 'subfolder.test.foo');
  261. } catch (Exception $e) {
  262. return; // ok
  263. }
  264. $this->fail('no error while renaming folder to child of old');
  265. }
  266. public function testAppend()
  267. {
  268. $mail = new Zend_Mail_Storage_Writable_Maildir($this->_params);
  269. $count = $mail->countMessages();
  270. $message = '';
  271. $message .= "From: me@example.org\r\n";
  272. $message .= "To: you@example.org\r\n";
  273. $message .= "Subject: append test\r\n";
  274. $message .= "\r\n";
  275. $message .= "This is a test\r\n";
  276. $mail->appendMessage($message);
  277. $this->assertEquals($count + 1, $mail->countMessages());
  278. $this->assertEquals($mail->getMessage($count + 1)->subject, 'append test');
  279. }
  280. public function testCopy()
  281. {
  282. $mail = new Zend_Mail_Storage_Writable_Maildir($this->_params);
  283. $mail->selectFolder('subfolder.test');
  284. $count = $mail->countMessages();
  285. $mail->selectFolder('INBOX');
  286. $message = $mail->getMessage(1);
  287. $mail->copyMessage(1, 'subfolder.test');
  288. $mail->selectFolder('subfolder.test');
  289. $this->assertEquals($count + 1, $mail->countMessages());
  290. $this->assertEquals($mail->getMessage($count + 1)->subject, $message->subject);
  291. $this->assertEquals($mail->getMessage($count + 1)->from, $message->from);
  292. $this->assertEquals($mail->getMessage($count + 1)->to, $message->to);
  293. try {
  294. $mail->copyMessage(1, 'justARandomFolder');
  295. } catch (Exception $e) {
  296. return; // ok
  297. }
  298. $this->fail('no error while copying to wrong folder');
  299. }
  300. public function testSetFlags()
  301. {
  302. $mail = new Zend_Mail_Storage_Writable_Maildir($this->_params);
  303. $mail->setFlags(1, array(Zend_Mail_Storage::FLAG_SEEN));
  304. $message = $mail->getMessage(1);
  305. $this->assertTrue($message->hasFlag(Zend_Mail_Storage::FLAG_SEEN));
  306. $this->assertFalse($message->hasFlag(Zend_Mail_Storage::FLAG_FLAGGED));
  307. $mail->setFlags(1, array(Zend_Mail_Storage::FLAG_SEEN, Zend_Mail_Storage::FLAG_FLAGGED));
  308. $message = $mail->getMessage(1);
  309. $this->assertTrue($message->hasFlag(Zend_Mail_Storage::FLAG_SEEN));
  310. $this->assertTrue($message->hasFlag(Zend_Mail_Storage::FLAG_FLAGGED));
  311. $mail->setFlags(1, array(Zend_Mail_Storage::FLAG_FLAGGED));
  312. $message = $mail->getMessage(1);
  313. $this->assertFalse($message->hasFlag(Zend_Mail_Storage::FLAG_SEEN));
  314. $this->assertTrue($message->hasFlag(Zend_Mail_Storage::FLAG_FLAGGED));
  315. try {
  316. $mail->setFlags(1, array(Zend_Mail_Storage::FLAG_RECENT));
  317. } catch (Exception $e) {
  318. return; // ok
  319. }
  320. $this->fail('should not be able to set recent flag');
  321. }
  322. public function testSetFlagsRemovedFile()
  323. {
  324. $mail = new Zend_Mail_Storage_Writable_Maildir($this->_params);
  325. unlink($this->_params['dirname'] . 'cur/1000000000.P1.example.org:2,S');
  326. try {
  327. $mail->setFlags(1, array(Zend_Mail_Storage::FLAG_FLAGGED));
  328. } catch (Exception $e) {
  329. return; // ok
  330. }
  331. $this->fail('should not be able to set flags with removed file');
  332. }
  333. public function testRemove()
  334. {
  335. $mail = new Zend_Mail_Storage_Writable_Maildir($this->_params);
  336. $count = $mail->countMessages();
  337. $mail->removeMessage(1);
  338. $this->assertEquals($mail->countMessages(), --$count);
  339. unset($mail[2]);
  340. $this->assertEquals($mail->countMessages(), --$count);
  341. }
  342. public function testRemoveRemovedFile()
  343. {
  344. $mail = new Zend_Mail_Storage_Writable_Maildir($this->_params);
  345. unlink($this->_params['dirname'] . 'cur/1000000000.P1.example.org:2,S');
  346. try {
  347. $mail->removeMessage(1);
  348. } catch (Exception $e) {
  349. return; // ok
  350. }
  351. $this->fail('should not be able to remove message which is already removed in fs');
  352. }
  353. }