PageRenderTime 49ms CodeModel.GetById 17ms RepoModel.GetById 1ms app.codeStats 0ms

/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/ContentEncoder/QpContentEncoderAcceptanceTest.php

https://gitlab.com/techniconline/kmc
PHP | 156 lines | 125 code | 27 blank | 4 comment | 16 complexity | 40417c5f289b61c172ffb728dba44e40 MD5 | raw file
  1. <?php
  2. class Swift_Mime_ContentEncoder_QpContentEncoderAcceptanceTest extends \PHPUnit_Framework_TestCase
  3. {
  4. private $_samplesDir;
  5. private $_factory;
  6. public function setUp()
  7. {
  8. $this->_samplesDir = realpath(__DIR__ . '/../../../../_samples/charsets');
  9. $this->_factory = new Swift_CharacterReaderFactory_SimpleCharacterReaderFactory();
  10. }
  11. public function testEncodingAndDecodingSamples()
  12. {
  13. $sampleFp = opendir($this->_samplesDir);
  14. while (false !== $encodingDir = readdir($sampleFp)) {
  15. if (substr($encodingDir, 0, 1) == '.') {
  16. continue;
  17. }
  18. $encoding = $encodingDir;
  19. $charStream = new Swift_CharacterStream_NgCharacterStream(
  20. $this->_factory, $encoding);
  21. $encoder = new Swift_Mime_ContentEncoder_QpContentEncoder($charStream);
  22. $sampleDir = $this->_samplesDir . '/' . $encodingDir;
  23. if (is_dir($sampleDir)) {
  24. $fileFp = opendir($sampleDir);
  25. while (false !== $sampleFile = readdir($fileFp)) {
  26. if (substr($sampleFile, 0, 1) == '.') {
  27. continue;
  28. }
  29. $text = file_get_contents($sampleDir . '/' . $sampleFile);
  30. $os = new Swift_ByteStream_ArrayByteStream();
  31. $os->write($text);
  32. $is = new Swift_ByteStream_ArrayByteStream();
  33. $encoder->encodeByteStream($os, $is);
  34. $encoded = '';
  35. while (false !== $bytes = $is->read(8192)) {
  36. $encoded .= $bytes;
  37. }
  38. $this->assertEquals(
  39. quoted_printable_decode($encoded), $text,
  40. '%s: Encoded string should decode back to original string for sample ' .
  41. $sampleDir . '/' . $sampleFile
  42. );
  43. }
  44. closedir($fileFp);
  45. }
  46. }
  47. closedir($sampleFp);
  48. }
  49. public function testEncodingAndDecodingSamplesFromDiConfiguredInstance()
  50. {
  51. $sampleFp = opendir($this->_samplesDir);
  52. while (false !== $encodingDir = readdir($sampleFp)) {
  53. if (substr($encodingDir, 0, 1) == '.') {
  54. continue;
  55. }
  56. $encoding = $encodingDir;
  57. $encoder = $this->_createEncoderFromContainer();
  58. $sampleDir = $this->_samplesDir . '/' . $encodingDir;
  59. if (is_dir($sampleDir)) {
  60. $fileFp = opendir($sampleDir);
  61. while (false !== $sampleFile = readdir($fileFp)) {
  62. if (substr($sampleFile, 0, 1) == '.') {
  63. continue;
  64. }
  65. $text = file_get_contents($sampleDir . '/' . $sampleFile);
  66. $os = new Swift_ByteStream_ArrayByteStream();
  67. $os->write($text);
  68. $is = new Swift_ByteStream_ArrayByteStream();
  69. $encoder->encodeByteStream($os, $is);
  70. $encoded = '';
  71. while (false !== $bytes = $is->read(8192)) {
  72. $encoded .= $bytes;
  73. }
  74. $this->assertEquals(
  75. str_replace("\r\n", "\n", quoted_printable_decode($encoded)), str_replace("\r\n", "\n", $text),
  76. '%s: Encoded string should decode back to original string for sample ' .
  77. $sampleDir . '/' . $sampleFile
  78. );
  79. }
  80. closedir($fileFp);
  81. }
  82. }
  83. closedir($sampleFp);
  84. }
  85. public function testEncodingLFTextWithDiConfiguredInstance()
  86. {
  87. $encoder = $this->_createEncoderFromContainer();
  88. $this->assertEquals("a\r\nb\r\nc", $encoder->encodeString("a\nb\nc"));
  89. }
  90. public function testEncodingCRTextWithDiConfiguredInstance()
  91. {
  92. $encoder = $this->_createEncoderFromContainer();
  93. $this->assertEquals("a\r\nb\r\nc", $encoder->encodeString("a\rb\rc"));
  94. }
  95. public function testEncodingLFCRTextWithDiConfiguredInstance()
  96. {
  97. $encoder = $this->_createEncoderFromContainer();
  98. $this->assertEquals("a\r\n\r\nb\r\n\r\nc", $encoder->encodeString("a\n\rb\n\rc"));
  99. }
  100. public function testEncodingCRLFTextWithDiConfiguredInstance()
  101. {
  102. $encoder = $this->_createEncoderFromContainer();
  103. $this->assertEquals("a\r\nb\r\nc", $encoder->encodeString("a\r\nb\r\nc"));
  104. }
  105. public function testEncodingDotStuffingWithDiConfiguredInstance()
  106. {
  107. // Enable DotEscaping
  108. Swift_Preferences::getInstance()->setQPDotEscape(true);
  109. $encoder = $this->_createEncoderFromContainer();
  110. $this->assertEquals("a=2E\r\n=2E\r\n=2Eb\r\nc", $encoder->encodeString("a.\r\n.\r\n.b\r\nc"));
  111. // Return to default
  112. Swift_Preferences::getInstance()->setQPDotEscape(false);
  113. $encoder = $this->_createEncoderFromContainer();
  114. $this->assertEquals("a.\r\n.\r\n.b\r\nc", $encoder->encodeString("a.\r\n.\r\n.b\r\nc"));
  115. }
  116. public function testDotStuffingEncodingAndDecodingSamplesFromDiConfiguredInstance()
  117. {
  118. // Enable DotEscaping
  119. Swift_Preferences::getInstance()->setQPDotEscape(true);
  120. $this->testEncodingAndDecodingSamplesFromDiConfiguredInstance();
  121. // Disable DotStuffing to continue
  122. Swift_Preferences::getInstance()->setQPDotEscape(false);
  123. }
  124. private function _createEncoderFromContainer()
  125. {
  126. return Swift_DependencyContainer::getInstance()
  127. ->lookup('mime.qpcontentencoder');
  128. }
  129. }