NativeQpContentEncoderAcceptanceTest.php 3.0KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. <?php
  2. require_once 'Swift/Tests/SwiftUnitTestCase.php';
  3. require_once 'Swift/Mime/ContentEncoder/NativeQpContentEncoder.php';
  4. require_once 'Swift/CharacterStream/ArrayCharacterStream.php';
  5. require_once 'Swift/CharacterReaderFactory/SimpleCharacterReaderFactory.php';
  6. require_once 'Swift/ByteStream/ArrayByteStream.php';
  7. class Swift_Mime_ContentEncoder_NativeQpContentEncoderAcceptanceTest
  8. extends Swift_Tests_SwiftUnitTestCase
  9. {
  10. /**
  11. * @var Swift_Mime_ContentEncoder_NativeQpContentEncoder
  12. */
  13. protected $_encoder;
  14. public function setUp()
  15. {
  16. $this->_samplesDir = realpath(dirname(__FILE__) . '/../../../../_samples/charsets');
  17. $this->_encoder = new Swift_Mime_ContentEncoder_NativeQpContentEncoder();
  18. }
  19. public function testEncodingAndDecodingSamples()
  20. {
  21. $sampleFp = opendir($this->_samplesDir);
  22. while (false !== $encodingDir = readdir($sampleFp)) {
  23. if (substr($encodingDir, 0, 1) == '.') {
  24. continue;
  25. }
  26. $sampleDir = $this->_samplesDir . '/' . $encodingDir;
  27. if (is_dir($sampleDir)) {
  28. $fileFp = opendir($sampleDir);
  29. while (false !== $sampleFile = readdir($fileFp)) {
  30. if (substr($sampleFile, 0, 1) == '.') {
  31. continue;
  32. }
  33. $text = file_get_contents($sampleDir . '/' . $sampleFile);
  34. $os = new Swift_ByteStream_ArrayByteStream();
  35. $os->write($text);
  36. $is = new Swift_ByteStream_ArrayByteStream();
  37. $this->_encoder->encodeByteStream($os, $is);
  38. $encoded = '';
  39. while (false !== $bytes = $is->read(8192)) {
  40. $encoded .= $bytes;
  41. }
  42. $this->assertEqual(
  43. quoted_printable_decode($encoded), $text,
  44. '%s: Encoded string should decode back to original string for sample ' .
  45. $sampleDir . '/' . $sampleFile
  46. );
  47. }
  48. closedir($fileFp);
  49. }
  50. }
  51. closedir($sampleFp);
  52. }
  53. public function testEncodingAndDecodingSamplesFromDiConfiguredInstance()
  54. {
  55. $encoder = $this->_createEncoderFromContainer();
  56. $this->assertSame('=C3=A4=C3=B6=C3=BC=C3=9F', $encoder->encodeString('äöüß'));
  57. }
  58. public function testCharsetChangeNotImplemented()
  59. {
  60. $this->_encoder->charsetChanged('utf-8');
  61. $this->expectException(new RuntimeException('Charset "charset" not supported. NativeQpContentEncoder only supports "utf-8"'));
  62. $this->_encoder->charsetChanged('charset');
  63. }
  64. public function testGetName()
  65. {
  66. $this->assertSame('quoted-printable', $this->_encoder->getName());
  67. }
  68. // -- Private Methods
  69. private function _createEncoderFromContainer()
  70. {
  71. return Swift_DependencyContainer::getInstance()
  72. ->lookup('mime.nativeqpcontentencoder')
  73. ;
  74. }
  75. }