| 
<?php
 use ParagonIE\ConstantTime\Base64UrlSafe;
 use ParagonIE\ConstantTime\Binary;
 
 /**
 * Class Base64UrlSafeTest
 */
 class Base64UrlSafeTest extends PHPUnit\Framework\TestCase
 {
 /**
 * @covers Base64UrlSafe::encode()
 * @covers Base64UrlSafe::decode()
 *
 * @throws Exception
 * @throws TypeError
 */
 public function testRandom()
 {
 for ($i = 1; $i < 32; ++$i) {
 for ($j = 0; $j < 50; ++$j) {
 $random = \random_bytes($i);
 
 $enc = Base64UrlSafe::encode($random);
 $this->assertSame(
 $random,
 Base64UrlSafe::decode($enc)
 );
 $this->assertSame(
 \strtr(\base64_encode($random), '+/', '-_'),
 $enc
 );
 
 $unpadded = \rtrim($enc, '=');
 $this->assertSame(
 $unpadded,
 Base64UrlSafe::encodeUnpadded($random)
 );
 $this->assertSame(
 $random,
 Base64UrlSafe::decode($unpadded)
 );
 }
 }
 
 $random = \random_bytes(1 << 20);
 $enc = Base64UrlSafe::encode($random);
 $this->assertTrue(Binary::safeStrlen($enc) > 65536);
 $this->assertSame(
 $random,
 Base64UrlSafe::decode($enc)
 );
 $this->assertSame(
 \strtr(\base64_encode($random), '+/', '-_'),
 $enc
 );
 }
 }
 
 |