radarrplexorganizrnginxsonarrdashboardhtpcserverhomepagesabnzbdheimdallembycouchpotatonzbgetbookmarkapplication-dashboardmuximuxlandingpagestartpagelanding
		
		
		
		
			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.
		
		
		
		
		
			
		
			
				
					
					
						
							158 lines
						
					
					
						
							6.2 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							158 lines
						
					
					
						
							6.2 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\Base64Encoder; | |
| 
 | |
| class Base64EncoderTest extends TestCase | |
| { | |
|     /* | |
|     There's really no point in testing the entire base64 encoding to the | |
|     level QP encoding has been tested.  base64_encode() has been in PHP for | |
|     years. | |
|     */ | |
| 
 | |
|     public function testInputOutputRatioIs3to4Bytes() | |
|     { | |
|         /* | |
|         RFC 2045, 6.8 | |
|  | |
|          The encoding process represents 24-bit groups of input bits as output | |
|          strings of 4 encoded characters.  Proceeding from left to right, a | |
|          24-bit input group is formed by concatenating 3 8bit input groups. | |
|          These 24 bits are then treated as 4 concatenated 6-bit groups, each | |
|          of which is translated into a single digit in the base64 alphabet. | |
|          */ | |
| 
 | |
|         $encoder = new Base64Encoder(); | |
|         $this->assertEquals('MTIz', $encoder->encodeString('123'), '3 bytes of input should yield 4 bytes of output'); | |
|         $this->assertEquals('MTIzNDU2', $encoder->encodeString('123456'), '6 bytes in input should yield 8 bytes of output'); | |
|         $this->assertEquals('MTIzNDU2Nzg5', $encoder->encodeString('123456789'), '%s: 9 bytes in input should yield 12 bytes of output'); | |
|     } | |
| 
 | |
|     public function testPadLength() | |
|     { | |
|         /* | |
|         RFC 2045, 6.8 | |
|  | |
|        Special processing is performed if fewer than 24 bits are available | |
|        at the end of the data being encoded.  A full encoding quantum is | |
|        always completed at the end of a body.  When fewer than 24 input bits | |
|        are available in an input group, zero bits are added (on the right) | |
|        to form an integral number of 6-bit groups.  Padding at the end of | |
|        the data is performed using the "=" character.  Since all base64 | |
|        input is an integral number of octets, only the following cases can | |
|        arise: (1) the final quantum of encoding input is an integral | |
|        multiple of 24 bits; here, the final unit of encoded output will be | |
|        an integral multiple of 4 characters with no "=" padding, (2) the | |
|        final quantum of encoding input is exactly 8 bits; here, the final | |
|        unit of encoded output will be two characters followed by two "=" | |
|        padding characters, or (3) the final quantum of encoding input is | |
|        exactly 16 bits; here, the final unit of encoded output will be three | |
|        characters followed by one "=" padding character. | |
|        */ | |
| 
 | |
|         $encoder = new Base64Encoder(); | |
|         for ($i = 0; $i < 30; ++$i) { | |
|             $input = pack('C', random_int(0, 255)); | |
|             $this->assertRegExp('~^[a-zA-Z0-9/\+]{2}==$~', $encoder->encodeString($input), 'A single byte should have 2 bytes of padding'); | |
|         } | |
| 
 | |
|         for ($i = 0; $i < 30; ++$i) { | |
|             $input = pack('C*', random_int(0, 255), random_int(0, 255)); | |
|             $this->assertRegExp('~^[a-zA-Z0-9/\+]{3}=$~', $encoder->encodeString($input), 'Two bytes should have 1 byte of padding'); | |
|         } | |
| 
 | |
|         for ($i = 0; $i < 30; ++$i) { | |
|             $input = pack('C*', random_int(0, 255), random_int(0, 255), random_int(0, 255)); | |
|             $this->assertRegExp('~^[a-zA-Z0-9/\+]{4}$~', $encoder->encodeString($input), 'Three bytes should have no padding'); | |
|         } | |
|     } | |
| 
 | |
|     public function testMaximumLineLengthIs76Characters() | |
|     { | |
|         /* | |
|          The encoded output stream must be represented in lines of no more | |
|          than 76 characters each.  All line breaks or other characters not | |
|          found in Table 1 must be ignored by decoding software. | |
|          */ | |
| 
 | |
|         $input = | |
|         'abcdefghijklmnopqrstuvwxyz'. | |
|         'ABCDEFGHIJKLMNOPQRSTUVWXYZ'. | |
|         '1234567890'. | |
|         'abcdefghijklmnopqrstuvwxyz'. | |
|         'ABCDEFGHIJKLMNOPQRSTUVWXYZ'. | |
|         '1234567890'. | |
|         'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; | |
| 
 | |
|         $output = | |
|         'YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQk'.//38 | |
|         'NERUZHSElKS0xNTk9QUVJTVFVWV1hZWjEyMzQ1'."\r\n".//76 * | |
|         'Njc4OTBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3'.//38 | |
|         'h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFla'."\r\n".//76 * | |
|         'MTIzNDU2Nzg5MEFCQ0RFRkdISUpLTE1OT1BRUl'.//38 | |
|         'NUVVZXWFla';                                       //48 | |
|  | |
|         $encoder = new Base64Encoder(); | |
|         $this->assertEquals($output, $encoder->encodeString($input), 'Lines should be no more than 76 characters'); | |
|     } | |
| 
 | |
|     public function testMaximumLineLengthCanBeSpecified() | |
|     { | |
|         $input = | |
|         'abcdefghijklmnopqrstuvwxyz'. | |
|         'ABCDEFGHIJKLMNOPQRSTUVWXYZ'. | |
|         '1234567890'. | |
|         'abcdefghijklmnopqrstuvwxyz'. | |
|         'ABCDEFGHIJKLMNOPQRSTUVWXYZ'. | |
|         '1234567890'. | |
|         'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; | |
| 
 | |
|         $output = | |
|         'YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQk'.//38 | |
|         'NERUZHSElKS0'."\r\n".//50 * | |
|         'xNTk9QUVJTVFVWV1hZWjEyMzQ1Njc4OTBhYmNk'.//38 | |
|         'ZWZnaGlqa2xt'."\r\n".//50 * | |
|         'bm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1'.//38 | |
|         'BRUlNUVVZXWF'."\r\n".//50 * | |
|         'laMTIzNDU2Nzg5MEFCQ0RFRkdISUpLTE1OT1BR'.//38 | |
|         'UlNUVVZXWFla';                                     //50 * | |
|  | |
|         $encoder = new Base64Encoder(); | |
|         $this->assertEquals($output, $encoder->encodeString($input, 'utf-8', 0, 50), 'Lines should be no more than 100 characters'); | |
|     } | |
| 
 | |
|     public function testFirstLineLengthCanBeDifferent() | |
|     { | |
|         $input = | |
|         'abcdefghijklmnopqrstuvwxyz'. | |
|         'ABCDEFGHIJKLMNOPQRSTUVWXYZ'. | |
|         '1234567890'. | |
|         'abcdefghijklmnopqrstuvwxyz'. | |
|         'ABCDEFGHIJKLMNOPQRSTUVWXYZ'. | |
|         '1234567890'. | |
|         'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; | |
| 
 | |
|         $output = | |
|         'YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQk'.//38 | |
|         'NERUZHSElKS0xNTk9QU'."\r\n".//57 * | |
|         'VJTVFVWV1hZWjEyMzQ1Njc4OTBhYmNkZWZnaGl'.//38 | |
|         'qa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLT'."\r\n".//76 * | |
|         'E1OT1BRUlNUVVZXWFlaMTIzNDU2Nzg5MEFCQ0R'.//38 | |
|         'FRkdISUpLTE1OT1BRUlNUVVZXWFla';                    //67 | |
|  | |
|         $encoder = new Base64Encoder(); | |
|         $this->assertEquals($output, $encoder->encodeString($input, 'utf-8', 19), 'First line offset is 19 so first line should be 57 chars long'); | |
|     } | |
| }
 | |
| 
 |