radarrplexorganizrnginxsonarrdashboardsabnzbdheimdallembycouchpotatonzbgetbookmarkapplication-dashboardmuximuxlandingpagestartpagelandinghtpcserverhomepage
		
		
		
		
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							129 lines
						
					
					
						
							4.1 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							129 lines
						
					
					
						
							4.1 KiB
						
					
					
				| <?php | |
| 
 | |
| /* | |
|  * This file is part of the Symfony package. | |
|  * | |
|  * (c) Fabien Potencier <fabien@symfony.com> | |
|  * | |
|  * For the full copyright and license information, please view the LICENSE | |
|  * file that was distributed with this source code. | |
|  */ | |
| 
 | |
| namespace Symfony\Component\Mime\Tests\Encoder; | |
| 
 | |
| use PHPUnit\Framework\TestCase; | |
| use Symfony\Component\Mime\Encoder\Rfc2231Encoder; | |
| 
 | |
| class Rfc2231EncoderTest extends TestCase | |
| { | |
|     private $rfc2045Token = '/^[\x21\x23-\x27\x2A\x2B\x2D\x2E\x30-\x39\x41-\x5A\x5E-\x7E]+$/D'; | |
| 
 | |
|     /* -- | |
|     This algorithm is described in RFC 2231, but is barely touched upon except | |
|     for mentioning bytes can be represented as their octet values (e.g. %20 for | |
|     the SPACE character). | |
|  | |
|     The tests here focus on how to use that representation to always generate text | |
|     which matches RFC 2045's definition of "token". | |
|     */ | |
| 
 | |
|     public function testEncodingAsciiCharactersProducesValidToken() | |
|     { | |
|         $string = ''; | |
|         foreach (range(0x00, 0x7F) as $octet) { | |
|             $char = pack('C', $octet); | |
|             $string .= $char; | |
|         } | |
|         $encoder = new Rfc2231Encoder(); | |
|         $encoded = $encoder->encodeString($string); | |
| 
 | |
|         foreach (explode("\r\n", $encoded) as $line) { | |
|             $this->assertRegExp($this->rfc2045Token, $line, 'Encoder should always return a valid RFC 2045 token.'); | |
|         } | |
|     } | |
| 
 | |
|     public function testEncodingNonAsciiCharactersProducesValidToken() | |
|     { | |
|         $string = ''; | |
|         foreach (range(0x80, 0xFF) as $octet) { | |
|             $char = pack('C', $octet); | |
|             $string .= $char; | |
|         } | |
|         $encoder = new Rfc2231Encoder(); | |
|         $encoded = $encoder->encodeString($string); | |
| 
 | |
|         foreach (explode("\r\n", $encoded) as $line) { | |
|             $this->assertRegExp($this->rfc2045Token, $line, 'Encoder should always return a valid RFC 2045 token.'); | |
|         } | |
|     } | |
| 
 | |
|     public function testMaximumLineLengthCanBeSet() | |
|     { | |
|         $string = ''; | |
|         for ($x = 0; $x < 200; ++$x) { | |
|             $char = 'a'; | |
|             $string .= $char; | |
|         } | |
|         $encoder = new Rfc2231Encoder(); | |
|         $encoded = $encoder->encodeString($string, 'utf-8', 0, 75); | |
| 
 | |
|         // 72 here and not 75 as we read 4 chars at a time | |
|         $this->assertEquals( | |
|             str_repeat('a', 72)."\r\n". | |
|             str_repeat('a', 72)."\r\n". | |
|             str_repeat('a', 56), | |
|             $encoded, | |
|             'Lines should be wrapped at each 72 characters' | |
|         ); | |
|     } | |
| 
 | |
|     public function testFirstLineCanHaveShorterLength() | |
|     { | |
|         $string = ''; | |
|         for ($x = 0; $x < 200; ++$x) { | |
|             $char = 'a'; | |
|             $string .= $char; | |
|         } | |
|         $encoder = new Rfc2231Encoder(); | |
|         $encoded = $encoder->encodeString($string, 'utf-8', 24, 72); | |
| 
 | |
|         $this->assertEquals( | |
|             str_repeat('a', 48)."\r\n". | |
|             str_repeat('a', 72)."\r\n". | |
|             str_repeat('a', 72)."\r\n". | |
|             str_repeat('a', 8), | |
|             $encoded, | |
|             'First line should be 24 bytes shorter than the others.' | |
|         ); | |
|     } | |
| 
 | |
|     public function testEncodingAndDecodingSamples() | |
|     { | |
|         $dir = realpath(__DIR__.'/../Fixtures/samples/charsets'); | |
|         $sampleFp = opendir($dir); | |
|         while (false !== $encoding = readdir($sampleFp)) { | |
|             if ('.' == substr($encoding, 0, 1)) { | |
|                 continue; | |
|             } | |
| 
 | |
|             $encoder = new Rfc2231Encoder(); | |
|             if (is_dir($dir.'/'.$encoding)) { | |
|                 $fileFp = opendir($dir.'/'.$encoding); | |
|                 while (false !== $sampleFile = readdir($fileFp)) { | |
|                     if ('.' == substr($sampleFile, 0, 1)) { | |
|                         continue; | |
|                     } | |
| 
 | |
|                     $text = file_get_contents($dir.'/'.$encoding.'/'.$sampleFile); | |
|                     $encodedText = $encoder->encodeString($text, $encoding); | |
|                     $this->assertEquals( | |
|                         urldecode(implode('', explode("\r\n", $encodedText))), $text, | |
|                         'Encoded string should decode back to original string for sample '.$dir.'/'.$encoding.'/'.$sampleFile | |
|                     ); | |
|                 } | |
|                 closedir($fileFp); | |
|             } | |
|         } | |
|         closedir($sampleFp); | |
|     } | |
| }
 | |
| 
 |