PageRenderTime 24ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/DevApp/library/ServerLibraries/ZendFramework/1.7/tests/Zend/Mail/MessageTest.php

http://firephp.googlecode.com/
PHP | 421 lines | 313 code | 83 blank | 25 comment | 5 complexity | 9560be0b3a483f96fc848910c78b1ca7 MD5 | raw file
Possible License(s): BSD-3-Clause, LGPL-2.0, MIT, Apache-2.0
  1. <?php
  2. /**
  3. * @category Zend
  4. * @package Zend_Mail
  5. * @subpackage UnitTests
  6. */
  7. /**
  8. * Zend_Mail_Message
  9. */
  10. require_once 'Zend/Mail/Message.php';
  11. /**
  12. * Zend_Mail_Storage_Mbox
  13. */
  14. require_once 'Zend/Mail/Storage/Mbox.php';
  15. /**
  16. * Zend_Mime_Decode
  17. */
  18. require_once 'Zend/Mime/Decode.php';
  19. /**
  20. * PHPUnit test case
  21. */
  22. require_once 'PHPUnit/Framework/TestCase.php';
  23. /**
  24. * @category Zend
  25. * @package Zend_Mail
  26. * @subpackage UnitTests
  27. */
  28. class Zend_Mail_MessageTest extends PHPUnit_Framework_TestCase
  29. {
  30. protected $_file;
  31. public function setUp()
  32. {
  33. $this->_file = dirname(__FILE__) . '/_files/mail.txt';
  34. }
  35. public function testInvalidFile()
  36. {
  37. try {
  38. $message = new Zend_Mail_Message(array('file' => '/this/file/does/not/exists'));
  39. } catch (Exception $e) {
  40. return; // ok
  41. }
  42. $this->fail('no exception raised while loading unknown file');
  43. }
  44. public function testIsMultipart()
  45. {
  46. $message = new Zend_Mail_Message(array('file' => $this->_file));
  47. $this->assertTrue($message->isMultipart());
  48. }
  49. public function testGetHeader()
  50. {
  51. $message = new Zend_Mail_Message(array('file' => $this->_file));
  52. $this->assertEquals($message->subject, 'multipart');
  53. }
  54. public function testGetDecodedHeader()
  55. {
  56. $message = new Zend_Mail_Message(array('file' => $this->_file));
  57. $this->assertEquals($message->from, iconv('UTF-8', iconv_get_encoding('internal_encoding'),
  58. '"Peter M端ller" <peter-mueller@example.com>'));
  59. }
  60. public function testGetHeaderAsArray()
  61. {
  62. $message = new Zend_Mail_Message(array('file' => $this->_file));
  63. $this->assertEquals($message->getHeader('subject', 'array'), array('multipart'));
  64. }
  65. public function testGetHeaderFromOpenFile()
  66. {
  67. $fh = fopen($this->_file, 'r');
  68. $message = new Zend_Mail_Message(array('file' => $fh));
  69. $this->assertEquals($message->subject, 'multipart');
  70. }
  71. public function testGetFirstPart()
  72. {
  73. $message = new Zend_Mail_Message(array('file' => $this->_file));
  74. $this->assertEquals(substr($message->getPart(1)->getContent(), 0, 14), 'The first part');
  75. }
  76. public function testGetFirstPartTwice()
  77. {
  78. $message = new Zend_Mail_Message(array('file' => $this->_file));
  79. $message->getPart(1);
  80. $this->assertEquals(substr($message->getPart(1)->getContent(), 0, 14), 'The first part');
  81. }
  82. public function testGetWrongPart()
  83. {
  84. $message = new Zend_Mail_Message(array('file' => $this->_file));
  85. try {
  86. $message->getPart(-1);
  87. } catch (Exception $e) {
  88. return; // ok
  89. }
  90. $this->fail('no exception raised while fetching unknown part');
  91. }
  92. public function testNoHeaderMessage()
  93. {
  94. $message = new Zend_Mail_Message(array('file' => __FILE__));
  95. $this->assertEquals(substr($message->getContent(), 0, 5), '<?php');
  96. $raw = file_get_contents(__FILE__);
  97. $raw = "\t" . $raw;
  98. $message = new Zend_Mail_Message(array('raw' => $raw));
  99. $this->assertEquals(substr($message->getContent(), 0, 6), "\t<?php");
  100. }
  101. public function testMultipleHeader()
  102. {
  103. $raw = file_get_contents($this->_file);
  104. $raw = "sUBject: test\nSubJect: test2\n" . $raw;
  105. $message = new Zend_Mail_Message(array('raw' => $raw));
  106. $this->assertEquals($message->getHeader('subject', 'string'),
  107. 'test' . Zend_Mime::LINEEND . 'test2' . Zend_Mime::LINEEND . 'multipart');
  108. $this->assertEquals($message->getHeader('subject'), array('test', 'test2', 'multipart'));
  109. }
  110. public function testContentTypeDecode()
  111. {
  112. $message = new Zend_Mail_Message(array('file' => $this->_file));
  113. $this->assertEquals(Zend_Mime_Decode::splitContentType($message->ContentType),
  114. array('type' => 'multipart/alternative', 'boundary' => 'crazy-multipart'));
  115. }
  116. public function testSplitEmptyMessage()
  117. {
  118. $this->assertEquals(Zend_Mime_Decode::splitMessageStruct('', 'xxx'), null);
  119. }
  120. public function testSplitInvalidMessage()
  121. {
  122. try {
  123. Zend_Mime_Decode::splitMessageStruct("--xxx\n", 'xxx');
  124. } catch (Zend_Exception $e) {
  125. return; // ok
  126. }
  127. $this->fail('no exception raised while decoding invalid message');
  128. }
  129. public function testInvalidMailHandler()
  130. {
  131. try {
  132. $message = new Zend_Mail_Message(array('handler' => 1));
  133. } catch (Zend_Exception $e) {
  134. return; // ok
  135. }
  136. $this->fail('no exception raised while using invalid mail handler');
  137. }
  138. public function testMissingId()
  139. {
  140. $mail = new Zend_Mail_Storage_Mbox(array('filename' => dirname(__FILE__) . '/_files/test.mbox/INBOX'));
  141. try {
  142. $message = new Zend_Mail_Message(array('handler' => $mail));
  143. } catch (Zend_Exception $e) {
  144. return; // ok
  145. }
  146. $this->fail('no exception raised while mail handler without id');
  147. }
  148. public function testIterator()
  149. {
  150. $message = new Zend_Mail_Message(array('file' => $this->_file));
  151. foreach (new RecursiveIteratorIterator($message) as $num => $part) {
  152. if ($num == 1) {
  153. // explicit call of __toString() needed for PHP < 5.2
  154. $this->assertEquals(substr($part->__toString(), 0, 14), 'The first part');
  155. }
  156. }
  157. $this->assertEquals($part->contentType, 'text/x-vertical');
  158. }
  159. public function testDecodeString()
  160. {
  161. $is = Zend_Mime_Decode::decodeQuotedPrintable('=?UTF-8?Q?"Peter M=C3=BCller"?= <peter-mueller@example.com>');
  162. $should = iconv('UTF-8', iconv_get_encoding('internal_encoding'),
  163. '"Peter M端ller" <peter-mueller@example.com>');
  164. $this->assertEquals($is, $should);
  165. }
  166. public function testSplitHeader()
  167. {
  168. $header = 'foo; x=y; y="x"';
  169. $this->assertEquals(Zend_Mime_Decode::splitHeaderField($header), array('foo', 'x' => 'y', 'y' => 'x'));
  170. $this->assertEquals(Zend_Mime_Decode::splitHeaderField($header, 'x'), 'y');
  171. $this->assertEquals(Zend_Mime_Decode::splitHeaderField($header, 'y'), 'x');
  172. $this->assertEquals(Zend_Mime_Decode::splitHeaderField($header, 'foo', 'foo'), 'foo');
  173. $this->assertEquals(Zend_Mime_Decode::splitHeaderField($header, 'foo'), null);
  174. }
  175. public function testSplitInvalidHeader()
  176. {
  177. $header = '';
  178. try {
  179. Zend_Mime_Decode::splitHeaderField($header);
  180. } catch (Zend_Exception $e) {
  181. return; // ok
  182. }
  183. $this->fail('no exception raised while decoding invalid header field');
  184. }
  185. public function testSplitMessage()
  186. {
  187. $header = 'Test: test';
  188. $body = 'body';
  189. $newlines = array("\r\n", "\n\r", "\n", "\r");
  190. foreach ($newlines as $contentEOL) {
  191. foreach ($newlines as $decodeEOL) {
  192. $content = $header . $contentEOL . $contentEOL . $body;
  193. $decoded = Zend_Mime_Decode::splitMessage($content, $decoded_header, $decoded_body, $decodeEOL);
  194. $this->assertEquals(array('test' => 'test'), $decoded_header);
  195. $this->assertEquals($body, $decoded_body);
  196. }
  197. }
  198. }
  199. public function testToplines()
  200. {
  201. $message = new Zend_Mail_Message(array('headers' => file_get_contents($this->_file)));
  202. $this->assertTrue(strpos($message->getToplines(), 'multipart message') === 0);
  203. }
  204. public function testNoContent()
  205. {
  206. $message = new Zend_Mail_Message(array('raw' => 'Subject: test'));
  207. try {
  208. $message->getContent();
  209. } catch (Zend_Exception $e) {
  210. return; // ok
  211. }
  212. $this->fail('no exception raised while getting content of message without body');
  213. }
  214. public function testEmptyMessage()
  215. {
  216. $message = new Zend_Mail_Message(array());
  217. $this->assertEquals(array(), $message->getHeaders());
  218. $message = new Zend_Mail_Message(array());
  219. $subject = null;
  220. try {
  221. $subject = $message->subject;
  222. } catch (Zend_Exception $e) {
  223. // ok
  224. }
  225. if ($subject) {
  226. $this->fail('no exception raised while getting header from empty message');
  227. }
  228. $message = new Zend_Mail_Message(array());
  229. $part = null;
  230. try {
  231. $part = $message->getPart(1);
  232. } catch (Zend_Exception $e) {
  233. // ok
  234. }
  235. if ($part) {
  236. $this->fail('no exception raised while getting part from empty message');
  237. }
  238. $message = new Zend_Mail_Message(array());
  239. $this->assertTrue($message->countParts() == 0);
  240. }
  241. public function testWrongMultipart()
  242. {
  243. $message = new Zend_Mail_Message(array('raw' => "Content-Type: multipart/mixed\r\n\r\ncontent"));
  244. try {
  245. $message->getPart(1);
  246. } catch (Zend_Exception $e) {
  247. return; // ok
  248. }
  249. $this->fail('no exception raised while getting part from message without boundary');
  250. }
  251. public function testLateFetch()
  252. {
  253. $mail = new Zend_Mail_Storage_Mbox(array('filename' => dirname(__FILE__) . '/_files/test.mbox/INBOX'));
  254. $message = new Zend_Mail_Message(array('handler' => $mail, 'id' => 5));
  255. $this->assertEquals($message->countParts(), 2);
  256. $this->assertEquals($message->countParts(), 2);
  257. $message = new Zend_Mail_Message(array('handler' => $mail, 'id' => 5));
  258. $this->assertEquals($message->subject, 'multipart');
  259. $message = new Zend_Mail_Message(array('handler' => $mail, 'id' => 5));
  260. $this->assertTrue(strpos($message->getContent(), 'multipart message') === 0);
  261. }
  262. public function testManualIterator()
  263. {
  264. $message = new Zend_Mail_Message(array('file' => $this->_file));
  265. $this->assertTrue($message->valid());
  266. $this->assertEquals($message->getChildren(), $message->current());
  267. $this->assertEquals($message->key(), 1);
  268. $message->next();
  269. $this->assertTrue($message->valid());
  270. $this->assertEquals($message->getChildren(), $message->current());
  271. $this->assertEquals($message->key(), 2);
  272. $message->next();
  273. $this->assertFalse($message->valid());
  274. $message->rewind();
  275. $this->assertTrue($message->valid());
  276. $this->assertEquals($message->getChildren(), $message->current());
  277. $this->assertEquals($message->key(), 1);
  278. }
  279. public function testMessageFlagsAreSet()
  280. {
  281. $origFlags = array(
  282. 'foo' => 'bar',
  283. 'baz' => 'bat'
  284. );
  285. $message = new Zend_Mail_Message(array('flags' => $origFlags));
  286. $messageFlags = $message->getFlags();
  287. $this->assertTrue($message->hasFlag('bar'), var_export($messageFlags, 1));
  288. $this->assertTrue($message->hasFlag('bat'), var_export($messageFlags, 1));
  289. $this->assertEquals(array('bar' => 'bar', 'bat' => 'bat'), $messageFlags);
  290. }
  291. public function testGetHeaderFieldSingle()
  292. {
  293. $message = new Zend_Mail_Message(array('file' => $this->_file));
  294. $this->assertEquals($message->getHeaderField('subject'), 'multipart');
  295. }
  296. public function testGetHeaderFieldDefault()
  297. {
  298. $message = new Zend_Mail_Message(array('file' => $this->_file));
  299. $this->assertEquals($message->getHeaderField('content-type'), 'multipart/alternative');
  300. }
  301. public function testGetHeaderFieldNamed()
  302. {
  303. $message = new Zend_Mail_Message(array('file' => $this->_file));
  304. $this->assertEquals($message->getHeaderField('content-type', 'boundary'), 'crazy-multipart');
  305. }
  306. public function testGetHeaderFieldMissing()
  307. {
  308. $message = new Zend_Mail_Message(array('file' => $this->_file));
  309. $this->assertNull($message->getHeaderField('content-type', 'foo'));
  310. }
  311. public function testGetHeaderFieldInvalid()
  312. {
  313. $message = new Zend_Mail_Message(array('file' => $this->_file));
  314. try {
  315. $message->getHeaderField('fake-header-name', 'foo');
  316. } catch (Zend_Mail_Exception $e) {
  317. return;
  318. }
  319. $this->fail('No exception thrown while requesting invalid field name');
  320. }
  321. public function testCaseInsensitiveMultipart()
  322. {
  323. $message = new Zend_Mail_Message(array('raw' => "coNTent-TYpe: muLTIpaRT/x-empty\r\n\r\n"));
  324. $this->assertTrue($message->isMultipart());
  325. }
  326. public function testCaseInsensitiveField()
  327. {
  328. $header = 'test; fOO="this is a test"';
  329. $this->assertEquals(Zend_Mime_Decode::splitHeaderField($header, 'Foo'), 'this is a test');
  330. $this->assertEquals(Zend_Mime_Decode::splitHeaderField($header, 'bar'), null);
  331. }
  332. public function testSpaceInFieldName()
  333. {
  334. $header = 'test; foo =bar; baz =42';
  335. $this->assertEquals(Zend_Mime_Decode::splitHeaderField($header, 'foo'), 'bar');
  336. $this->assertEquals(Zend_Mime_Decode::splitHeaderField($header, 'baz'), 42);
  337. }
  338. }