diff options
Diffstat (limited to 'vendor/chillerlan/php-qrcode/tests')
28 files changed, 993 insertions, 501 deletions
diff --git a/vendor/chillerlan/php-qrcode/tests/Data/AlphaNumTest.php b/vendor/chillerlan/php-qrcode/tests/Data/AlphaNumTest.php index c29b1f639..10847633c 100644 --- a/vendor/chillerlan/php-qrcode/tests/Data/AlphaNumTest.php +++ b/vendor/chillerlan/php-qrcode/tests/Data/AlphaNumTest.php @@ -12,13 +12,19 @@ namespace chillerlan\QRCodeTest\Data; -use chillerlan\QRCode\Data\{AlphaNum, QRCodeDataException}; +use chillerlan\QRCode\Data\{AlphaNum, QRCodeDataException, QRDataInterface}; +use chillerlan\QRCode\QROptions; -class AlphaNumTest extends DatainterfaceTestAbstract{ +/** + * Tests the AlphaNum class + */ +final class AlphaNumTest extends DatainterfaceTestAbstract{ + + /** @internal */ + protected string $testdata = '0 $%*+-./:'; - protected $FQCN = AlphaNum::class; - protected $testdata = '0 $%*+-./:'; - protected $expected = [ + /** @internal */ + protected array $expected = [ 32, 80, 36, 212, 252, 15, 175, 251, 176, 236, 17, 236, 17, 236, 17, 236, 17, 236, 17, 236, 17, 236, 17, 236, @@ -34,7 +40,18 @@ class AlphaNumTest extends DatainterfaceTestAbstract{ 92, 112, 20, 198, 27 ]; - public function testGetCharCodeException(){ + /** + * @inheritDoc + * @internal + */ + protected function getDataInterfaceInstance(QROptions $options):QRDataInterface{ + return new AlphaNum($options); + } + + /** + * Tests if an exception is thrown when an invalid character is encountered + */ + public function testGetCharCodeException():void{ $this->expectException(QRCodeDataException::class); $this->expectExceptionMessage('illegal char: "#" [35]'); diff --git a/vendor/chillerlan/php-qrcode/tests/Data/ByteTest.php b/vendor/chillerlan/php-qrcode/tests/Data/ByteTest.php index cbfe1fab2..295603200 100644 --- a/vendor/chillerlan/php-qrcode/tests/Data/ByteTest.php +++ b/vendor/chillerlan/php-qrcode/tests/Data/ByteTest.php @@ -13,12 +13,19 @@ namespace chillerlan\QRCodeTest\Data; use chillerlan\QRCode\Data\Byte; +use chillerlan\QRCode\Data\QRDataInterface; +use chillerlan\QRCode\QROptions; -class ByteTest extends DatainterfaceTestAbstract{ +/** + * Tests the Byte class + */ +final class ByteTest extends DatainterfaceTestAbstract{ + + /** @internal */ + protected string $testdata = '[¯\_(ツ)_/¯]'; - protected $FQCN = Byte::class; - protected $testdata = '[¯\_(ツ)_/¯]'; - protected $expected = [ + /** @internal */ + protected array $expected = [ 64, 245, 188, 42, 245, 197, 242, 142, 56, 56, 66, 149, 242, 252, 42, 245, 208, 236, 17, 236, 17, 236, 17, 236, @@ -34,5 +41,12 @@ class ByteTest extends DatainterfaceTestAbstract{ 21, 47, 250, 101 ]; + /** + * @inheritDoc + * @internal + */ + protected function getDataInterfaceInstance(QROptions $options):QRDataInterface{ + return new Byte($options); + } } diff --git a/vendor/chillerlan/php-qrcode/tests/Data/DatainterfaceTestAbstract.php b/vendor/chillerlan/php-qrcode/tests/Data/DatainterfaceTestAbstract.php index 19d74617a..d533c3f17 100644 --- a/vendor/chillerlan/php-qrcode/tests/Data/DatainterfaceTestAbstract.php +++ b/vendor/chillerlan/php-qrcode/tests/Data/DatainterfaceTestAbstract.php @@ -12,54 +12,116 @@ namespace chillerlan\QRCodeTest\Data; +use chillerlan\QRCode\QRCode; use chillerlan\QRCode\QROptions; +use PHPUnit\Framework\TestCase; use chillerlan\QRCode\Data\{QRCodeDataException, QRDataInterface, QRMatrix}; -use chillerlan\QRCodeTest\QRTestAbstract; +use ReflectionClass; -abstract class DatainterfaceTestAbstract extends QRTestAbstract{ +use function str_repeat; - /** - * @var \chillerlan\QRCode\Data\QRDataAbstract - */ - protected $dataInterface; +/** + * The data interface test abstract + */ +abstract class DatainterfaceTestAbstract extends TestCase{ - protected $testdata; - protected $expected; + /** @internal */ + protected ReflectionClass $reflection; + /** @internal */ + protected QRDataInterface $dataInterface; + /** @internal */ + protected string $testdata; + /** @internal */ + protected array $expected; + /** + * @internal + */ protected function setUp():void{ - parent::setUp(); - - $this->dataInterface = $this->reflection->newInstanceArgs([new QROptions(['version' => 4])]); + $this->dataInterface = $this->getDataInterfaceInstance(new QROptions(['version' => 4])); + $this->reflection = new ReflectionClass($this->dataInterface); } - public function testInstance(){ - $this->dataInterface = $this->reflection->newInstanceArgs([new QROptions, $this->testdata]); + /** + * Returns a data interface instance + * + * @internal + */ + abstract protected function getDataInterfaceInstance(QROptions $options):QRDataInterface; - $this->assertInstanceOf(QRDataInterface::class, $this->dataInterface); + /** + * Verifies the data interface instance + */ + public function testInstance():void{ + $this::assertInstanceOf(QRDataInterface::class, $this->dataInterface); } - public function testSetData(){ + /** + * Tests ecc masking and verifies against a sample + */ + public function testMaskEcc():void{ $this->dataInterface->setData($this->testdata); - $this->assertSame($this->expected, $this->getProperty('matrixdata')->getValue($this->dataInterface)); + $maskECC = $this->reflection->getMethod('maskECC'); + $maskECC->setAccessible(true); + + $this::assertSame($this->expected, $maskECC->invoke($this->dataInterface)); } - public function testInitMatrix(){ - $m = $this->dataInterface->setData($this->testdata)->initMatrix(0); + /** + * @see testInitMatrix() + * @internal + * @return int[][] + */ + public function MaskPatternProvider():array{ + return [[0], [1], [2], [3], [4], [5], [6], [7]]; + } - $this->assertInstanceOf(QRMatrix::class, $m); + /** + * Tests initializing the data matrix + * + * @dataProvider MaskPatternProvider + */ + public function testInitMatrix(int $maskPattern):void{ + $this->dataInterface->setData($this->testdata); + + $matrix = $this->dataInterface->initMatrix($maskPattern); + + $this::assertInstanceOf(QRMatrix::class, $matrix); + $this::assertSame($maskPattern, $matrix->maskPattern()); } - public function testGetMinimumVersion(){ - $this->assertSame(1, $this->getMethod('getMinimumVersion')->invoke($this->dataInterface)); + /** + * Tests getting the minimum QR version for the given data + */ + public function testGetMinimumVersion():void{ + $this->dataInterface->setData($this->testdata); + + $getMinimumVersion = $this->reflection->getMethod('getMinimumVersion'); + $getMinimumVersion->setAccessible(true); + + $this::assertSame(1, $getMinimumVersion->invoke($this->dataInterface)); } - public function testGetMinimumVersionException(){ + /** + * Tests if an exception is thrown when the data exceeds the maximum version while auto detecting + */ + public function testGetMinimumVersionException():void{ $this->expectException(QRCodeDataException::class); $this->expectExceptionMessage('data exceeds'); - $this->getProperty('strlen')->setValue($this->dataInterface, 13370); - $this->getMethod('getMinimumVersion')->invoke($this->dataInterface); + $this->dataInterface = $this->getDataInterfaceInstance(new QROptions(['version' => QRCode::VERSION_AUTO])); + $this->dataInterface->setData(str_repeat($this->testdata, 1337)); + } + + /** + * Tests if an exception is thrown on data overflow + */ + public function testCodeLengthOverflowException():void{ + $this->expectException(QRCodeDataException::class); + $this->expectExceptionMessage('code length overflow'); + + $this->dataInterface->setData(str_repeat($this->testdata, 1337)); } } diff --git a/vendor/chillerlan/php-qrcode/tests/Data/KanjiTest.php b/vendor/chillerlan/php-qrcode/tests/Data/KanjiTest.php index 108b8fed7..484f388dc 100644 --- a/vendor/chillerlan/php-qrcode/tests/Data/KanjiTest.php +++ b/vendor/chillerlan/php-qrcode/tests/Data/KanjiTest.php @@ -12,13 +12,19 @@ namespace chillerlan\QRCodeTest\Data; -use chillerlan\QRCode\Data\{Kanji, QRCodeDataException}; +use chillerlan\QRCode\QROptions; +use chillerlan\QRCode\Data\{Kanji, QRCodeDataException, QRDataInterface}; -class KanjiTest extends DatainterfaceTestAbstract{ +/** + * Tests the Kanji class + */ +final class KanjiTest extends DatainterfaceTestAbstract{ + + /** @internal */ + protected string $testdata = '茗荷茗荷茗荷茗荷茗荷'; - protected $FQCN = Kanji::class; - protected $testdata = '茗荷茗荷茗荷茗荷茗荷'; - protected $expected = [ + /** @internal */ + protected array $expected = [ 128, 173, 85, 26, 95, 85, 70, 151, 213, 81, 165, 245, 84, 105, 125, 85, 26, 92, 0, 236, 17, 236, 17, 236, @@ -34,17 +40,32 @@ class KanjiTest extends DatainterfaceTestAbstract{ 96, 113, 54, 191 ]; - public function testIllegalCharException1(){ + /** + * @inheritDoc + * @internal + */ + protected function getDataInterfaceInstance(QROptions $options):QRDataInterface{ + return new Kanji($options); + } + + /** + * Tests if an exception is thrown when an invalid character is encountered + */ + public function testIllegalCharException1():void{ $this->expectException(QRCodeDataException::class); $this->expectExceptionMessage('illegal char at 1 [16191]'); $this->dataInterface->setData('ÃÃ'); } - public function testIllegalCharException2(){ + /** + * Tests if an exception is thrown when an invalid character is encountered + */ + public function testIllegalCharException2():void{ $this->expectException(QRCodeDataException::class); $this->expectExceptionMessage('illegal char at 1'); $this->dataInterface->setData('Ã'); } + } diff --git a/vendor/chillerlan/php-qrcode/tests/Data/MaskPatternTesterTest.php b/vendor/chillerlan/php-qrcode/tests/Data/MaskPatternTesterTest.php index ae4af9f29..d286b41dc 100644 --- a/vendor/chillerlan/php-qrcode/tests/Data/MaskPatternTesterTest.php +++ b/vendor/chillerlan/php-qrcode/tests/Data/MaskPatternTesterTest.php @@ -12,18 +12,31 @@ namespace chillerlan\QRCodeTest\Data; -use chillerlan\QRCode\{QROptions, Data\Byte, Data\MaskPatternTester}; -use chillerlan\QRCodeTest\QRTestAbstract; +use chillerlan\QRCode\QROptions; +use chillerlan\QRCode\Data\{Byte, MaskPatternTester}; +use PHPUnit\Framework\TestCase; -class MaskPatternTesterTest extends QRTestAbstract{ +/** + * MaskPatternTester coverage test + */ +final class MaskPatternTesterTest extends TestCase{ - protected $FQCN = MaskPatternTester::class; + /** + * Tests getting the best mask pattern + */ + public function testMaskpattern():void{ + $dataInterface = new Byte(new QROptions(['version' => 10]), 'test'); + + $this::assertSame(3, (new MaskPatternTester($dataInterface))->getBestMaskPattern()); + } - // coverage - public function testMaskpattern(){ - $matrix = (new Byte(new QROptions(['version' => 10]), 'test'))->initMatrix(3, true); + /** + * Tests getting the penalty value for a given mask pattern + */ + public function testMaskpatternID():void{ + $dataInterface = new Byte(new QROptions(['version' => 10]), 'test'); - $this->assertSame(4243, (new MaskPatternTester($matrix))->testPattern()); + $this::assertSame(4243, (new MaskPatternTester($dataInterface))->testPattern(3)); } } diff --git a/vendor/chillerlan/php-qrcode/tests/Data/NumberTest.php b/vendor/chillerlan/php-qrcode/tests/Data/NumberTest.php index 983346a34..dcd9507ab 100644 --- a/vendor/chillerlan/php-qrcode/tests/Data/NumberTest.php +++ b/vendor/chillerlan/php-qrcode/tests/Data/NumberTest.php @@ -12,13 +12,19 @@ namespace chillerlan\QRCodeTest\Data; -use chillerlan\QRCode\Data\{Number, QRCodeDataException}; +use chillerlan\QRCode\QROptions; +use chillerlan\QRCode\Data\{Number, QRCodeDataException, QRDataInterface}; -class NumberTest extends DatainterfaceTestAbstract{ +/** + * Tests the Number class + */ +final class NumberTest extends DatainterfaceTestAbstract{ + + /** @internal */ + protected string $testdata = '0123456789'; - protected $FQCN = Number::class; - protected $testdata = '0123456789'; - protected $expected = [ + /** @internal */ + protected array $expected = [ 16, 40, 12, 86, 106, 105, 0, 236, 17, 236, 17, 236, 17, 236, 17, 236, 17, 236, 17, 236, 17, 236, 17, 236, @@ -34,7 +40,18 @@ class NumberTest extends DatainterfaceTestAbstract{ 89, 63, 168, 151 ]; - public function testGetCharCodeException(){ + /** + * @inheritDoc + * @internal + */ + protected function getDataInterfaceInstance(QROptions $options):QRDataInterface{ + return new Number($options); + } + + /** + * Tests if an exception is thrown when an invalid character is encountered + */ + public function testGetCharCodeException():void{ $this->expectException(QRCodeDataException::class); $this->expectExceptionMessage('illegal char: "#" [35]'); diff --git a/vendor/chillerlan/php-qrcode/tests/Data/QRMatrixTest.php b/vendor/chillerlan/php-qrcode/tests/Data/QRMatrixTest.php index 531c82eb2..68b31a5de 100644..100755 --- a/vendor/chillerlan/php-qrcode/tests/Data/QRMatrixTest.php +++ b/vendor/chillerlan/php-qrcode/tests/Data/QRMatrixTest.php @@ -15,177 +15,294 @@ namespace chillerlan\QRCodeTest\Data; use chillerlan\QRCode\QRCode; use chillerlan\QRCode\QROptions; use chillerlan\QRCode\Data\{QRCodeDataException, QRMatrix}; -use chillerlan\QRCodeTest\QRTestAbstract; +use PHPUnit\Framework\TestCase; use ReflectionClass; -class QRMatrixTest extends QRTestAbstract{ - - protected $FQCN = QRMatrix::class; +/** + * Tests the QRMatix class + */ +final class QRMatrixTest extends TestCase{ - protected $version = 7; + /** @internal */ + protected const version = 40; + /** @internal */ + protected QRMatrix $matrix; /** - * @var \chillerlan\QRCode\Data\QRMatrix + * invokes a QRMatrix object + * + * @internal */ - protected $matrix; - protected function setUp():void{ - parent::setUp(); + $this->matrix = $this->getMatrix($this::version); + } + + /** + * shortcut + * + * @internal + */ + protected function getMatrix(int $version):QRMatrix{ + return new QRMatrix($version, QRCode::ECC_L); + } - $this->matrix = $this->reflection->newInstanceArgs([$this->version, QRCode::ECC_L]); + /** + * Validates the QRMatrix instance + */ + public function testInstance():void{ + $this::assertInstanceOf(QRMatrix::class, $this->matrix); } - public function testInvalidVersionException(){ + /** + * Tests if an exception is thrown when an invalid QR version was given + */ + public function testInvalidVersionException():void{ $this->expectException(QRCodeDataException::class); $this->expectExceptionMessage('invalid QR Code version'); - $this->reflection->newInstanceArgs([42, 0]); + $this->matrix = new QRMatrix(42, 0); } - public function testInvalidEccException(){ + /** + * Tests if an exception is thrown when an invalid ECC level was given + */ + public function testInvalidEccException():void{ $this->expectException(QRCodeDataException::class); $this->expectExceptionMessage('invalid ecc level'); - $this->reflection->newInstanceArgs([1, 42]); + $this->matrix = new QRMatrix(1, 42); } - public function testInstance(){ - $this->assertInstanceOf($this->FQCN, $this->matrix); + /** + * Tests if size() returns the actual matrix size/count + */ + public function testSize():void{ + $this::assertCount($this->matrix->size(), $this->matrix->matrix()); } - public function testSize(){ - $this->assertCount($this->matrix->size(), $this->matrix->matrix()); + /** + * Tests if version() returns the current (given) version + */ + public function testVersion():void{ + $this::assertSame($this::version, $this->matrix->version()); } - public function testVersion(){ - $this->assertSame($this->version, $this->matrix->version()); + /** + * Tests if eccLevel() returns the current (given) ECC level + */ + public function testECC():void{ + $this::assertSame(QRCode::ECC_L, $this->matrix->eccLevel()); } - public function testECC(){ - $this->assertSame(QRCode::ECC_L, $this->matrix->eccLevel()); - } + /** + * Tests if maskPattern() returns the current (or default) mask pattern + */ + public function testMaskPattern():void{ + $this::assertSame(-1, $this->matrix->maskPattern()); // default - public function testMaskPattern(){ - $this->assertSame(-1, $this->matrix->maskPattern()); + // @todo: actual mask pattern after mapData() } - public function testGetSetCheck(){ + /** + * Tests the set(), get() and check() methods + */ + public function testGetSetCheck():void{ $this->matrix->set(10, 10, true, QRMatrix::M_TEST); - $this->assertSame(65280, $this->matrix->get(10, 10)); - $this->assertTrue($this->matrix->check(10, 10)); + $this::assertSame(65280, $this->matrix->get(10, 10)); + $this::assertTrue($this->matrix->check(10, 10)); $this->matrix->set(20, 20, false, QRMatrix::M_TEST); - $this->assertSame(255, $this->matrix->get(20, 20)); - $this->assertFalse($this->matrix->check(20, 20)); + $this::assertSame(255, $this->matrix->get(20, 20)); + $this::assertFalse($this->matrix->check(20, 20)); } - public function testSetDarkModule(){ - $this->matrix->setDarkModule(); + /** + * Version data provider for several pattern tests + * + * @return int[][] + * @internal + */ + public function versionProvider():array{ + $versions = []; - $this->assertSame(QRMatrix::M_DARKMODULE << 8, $this->matrix->get(8, $this->matrix->size() - 8)); + for($i = 1; $i <= 40; $i++){ + $versions[] = [$i]; + } + + return $versions; } - public function testSetFinderPattern(){ - $this->matrix->setFinderPattern(); + /** + * Tests setting the dark module and verifies its position + * + * @dataProvider versionProvider + */ + public function testSetDarkModule(int $version):void{ + $matrix = $this->getMatrix($version)->setDarkModule(); + + $this::assertSame(QRMatrix::M_DARKMODULE << 8, $matrix->get(8, $matrix->size() - 8)); + } + + /** + * Tests setting the finder patterns and verifies their positions + * + * @dataProvider versionProvider + */ + public function testSetFinderPattern(int $version):void{ + $matrix = $this->getMatrix($version)->setFinderPattern(); - $this->assertSame(QRMatrix::M_FINDER << 8, $this->matrix->get(0, 0)); - $this->assertSame(QRMatrix::M_FINDER << 8, $this->matrix->get(0, $this->matrix->size() - 1)); - $this->assertSame(QRMatrix::M_FINDER << 8, $this->matrix->get($this->matrix->size() - 1, 0)); + $this::assertSame(QRMatrix::M_FINDER << 8, $matrix->get(0, 0)); + $this::assertSame(QRMatrix::M_FINDER << 8, $matrix->get(0, $matrix->size() - 1)); + $this::assertSame(QRMatrix::M_FINDER << 8, $matrix->get($matrix->size() - 1, 0)); } - public function testSetSeparators(){ - $this->matrix->setSeparators(); + /** + * Tests the separator patterns and verifies their positions + * + * @dataProvider versionProvider + */ + public function testSetSeparators(int $version):void{ + $matrix = $this->getMatrix($version)->setSeparators(); - $this->assertSame(QRMatrix::M_SEPARATOR, $this->matrix->get(7, 0)); - $this->assertSame(QRMatrix::M_SEPARATOR, $this->matrix->get(0, 7)); - $this->assertSame(QRMatrix::M_SEPARATOR, $this->matrix->get(0, $this->matrix->size() - 8)); - $this->assertSame(QRMatrix::M_SEPARATOR, $this->matrix->get($this->matrix->size() - 8, 0)); + $this::assertSame(QRMatrix::M_SEPARATOR, $matrix->get(7, 0)); + $this::assertSame(QRMatrix::M_SEPARATOR, $matrix->get(0, 7)); + $this::assertSame(QRMatrix::M_SEPARATOR, $matrix->get(0, $matrix->size() - 8)); + $this::assertSame(QRMatrix::M_SEPARATOR, $matrix->get($matrix->size() - 8, 0)); } - public function testSetAlignmentPattern(){ - $this->matrix + /** + * Tests the alignment patterns and verifies their positions - version 1 (no pattern) skipped + * + * @dataProvider versionProvider + */ + public function testSetAlignmentPattern(int $version):void{ + + if($version === 1){ + $this->markTestSkipped('N/A'); + + /** @noinspection PhpUnreachableStatementInspection */ + return; + } + + $matrix = $this + ->getMatrix($version) ->setFinderPattern() ->setAlignmentPattern() ; - $alignmentPattern = (new ReflectionClass(QRMatrix::class))->getConstant('alignmentPattern')[$this->version]; + $alignmentPattern = (new ReflectionClass(QRMatrix::class))->getConstant('alignmentPattern')[$version]; foreach($alignmentPattern as $py){ foreach($alignmentPattern as $px){ - if($this->matrix->get($px, $py) === QRMatrix::M_FINDER << 8){ - $this->assertSame(QRMatrix::M_FINDER << 8, $this->matrix->get($px, $py), 'skipped finder pattern'); + if($matrix->get($px, $py) === QRMatrix::M_FINDER << 8){ + $this::assertSame(QRMatrix::M_FINDER << 8, $matrix->get($px, $py), 'skipped finder pattern'); continue; } - $this->assertSame(QRMatrix::M_ALIGNMENT << 8, $this->matrix->get($px, $py)); + $this::assertSame(QRMatrix::M_ALIGNMENT << 8, $matrix->get($px, $py)); } } } - public function testSetTimingPattern(){ - $this->matrix + /** + * Tests the timing patterns and verifies their positions + * + * @dataProvider versionProvider + */ + public function testSetTimingPattern(int $version):void{ + + $matrix = $this + ->getMatrix($version) ->setAlignmentPattern() ->setTimingPattern() ; - $size = $this->matrix->size(); + $size = $matrix->size(); for($i = 7; $i < $size - 7; $i++){ if($i % 2 === 0){ - $p1 = $this->matrix->get(6, $i); + $p1 = $matrix->get(6, $i); if($p1 === QRMatrix::M_ALIGNMENT << 8){ - $this->assertSame(QRMatrix::M_ALIGNMENT << 8, $p1, 'skipped alignment pattern'); + $this::assertSame(QRMatrix::M_ALIGNMENT << 8, $p1, 'skipped alignment pattern'); continue; } - $this->assertSame(QRMatrix::M_TIMING << 8, $p1); - $this->assertSame(QRMatrix::M_TIMING << 8, $this->matrix->get($i, 6)); + $this::assertSame(QRMatrix::M_TIMING << 8, $p1); + $this::assertSame(QRMatrix::M_TIMING << 8, $matrix->get($i, 6)); } } } - public function testSetVersionNumber(){ - $this->matrix->setVersionNumber(true); + /** + * Tests the version patterns and verifies their positions - version < 7 skipped + * + * @dataProvider versionProvider + */ + public function testSetVersionNumber(int $version):void{ + + if($version < 7){ + $this->markTestSkipped('N/A'); + + /** @noinspection PhpUnreachableStatementInspection */ + return; + } + + $matrix = $this->getMatrix($version)->setVersionNumber(true); - $this->assertSame(QRMatrix::M_VERSION, $this->matrix->get($this->matrix->size() - 9, 0)); - $this->assertSame(QRMatrix::M_VERSION, $this->matrix->get($this->matrix->size() - 11, 5)); - $this->assertSame(QRMatrix::M_VERSION, $this->matrix->get(0, $this->matrix->size() - 9)); - $this->assertSame(QRMatrix::M_VERSION, $this->matrix->get(5, $this->matrix->size() - 11)); + $this::assertSame(QRMatrix::M_VERSION, $matrix->get($matrix->size() - 9, 0)); + $this::assertSame(QRMatrix::M_VERSION, $matrix->get($matrix->size() - 11, 5)); + $this::assertSame(QRMatrix::M_VERSION, $matrix->get(0, $matrix->size() - 9)); + $this::assertSame(QRMatrix::M_VERSION, $matrix->get(5, $matrix->size() - 11)); } - public function testSetFormatInfo(){ - $this->matrix->setFormatInfo(0, true); + /** + * Tests the format patterns and verifies their positions + * + * @dataProvider versionProvider + */ + public function testSetFormatInfo(int $version):void{ + $matrix = $this->getMatrix($version)->setFormatInfo(0, true); - $this->assertSame(QRMatrix::M_FORMAT, $this->matrix->get(8, 0)); - $this->assertSame(QRMatrix::M_FORMAT, $this->matrix->get(0, 8)); - $this->assertSame(QRMatrix::M_FORMAT, $this->matrix->get($this->matrix->size() - 1, 8)); - $this->assertSame(QRMatrix::M_FORMAT, $this->matrix->get($this->matrix->size() - 8, 8)); + $this::assertSame(QRMatrix::M_FORMAT, $matrix->get(8, 0)); + $this::assertSame(QRMatrix::M_FORMAT, $matrix->get(0, 8)); + $this::assertSame(QRMatrix::M_FORMAT, $matrix->get($matrix->size() - 1, 8)); + $this::assertSame(QRMatrix::M_FORMAT, $matrix->get($matrix->size() - 8, 8)); } - public function testSetQuietZone(){ - $size = $this->matrix->size(); + /** + * Tests the quiet zone pattern and verifies its position + * + * @dataProvider versionProvider + */ + public function testSetQuietZone(int $version):void{ + $matrix = $this->getMatrix($version); + + $size = $matrix->size(); $q = 5; - $this->matrix->set(0, 0, true, QRMatrix::M_TEST); - $this->matrix->set($size - 1, $size - 1, true, QRMatrix::M_TEST); + $matrix->set(0, 0, true, QRMatrix::M_TEST); + $matrix->set($size - 1, $size - 1, true, QRMatrix::M_TEST); - $this->matrix->setQuietZone($q); + $matrix->setQuietZone($q); - $this->assertCount($size + 2 * $q, $this->matrix->matrix()); - $this->assertCount($size + 2 * $q, $this->matrix->matrix()[$size - 1]); + $this::assertCount($size + 2 * $q, $matrix->matrix()); + $this::assertCount($size + 2 * $q, $matrix->matrix()[$size - 1]); - $size = $this->matrix->size(); - $this->assertSame(QRMatrix::M_QUIETZONE, $this->matrix->get(0, 0)); - $this->assertSame(QRMatrix::M_QUIETZONE, $this->matrix->get($size - 1, $size - 1)); + $size = $matrix->size(); + $this::assertSame(QRMatrix::M_QUIETZONE, $matrix->get(0, 0)); + $this::assertSame(QRMatrix::M_QUIETZONE, $matrix->get($size - 1, $size - 1)); - $this->assertSame(QRMatrix::M_TEST << 8, $this->matrix->get($q, $q)); - $this->assertSame(QRMatrix::M_TEST << 8, $this->matrix->get($size - 1 - $q, $size - 1 - $q)); + $this::assertSame(QRMatrix::M_TEST << 8, $matrix->get($q, $q)); + $this::assertSame(QRMatrix::M_TEST << 8, $matrix->get($size - 1 - $q, $size - 1 - $q)); } - public function testSetQuietZoneException(){ + /** + * Tests if an exception is thrown in an attempt to create it before data was written + */ + public function testSetQuietZoneException():void{ $this->expectException(QRCodeDataException::class); $this->expectExceptionMessage('use only after writing data'); diff --git a/vendor/chillerlan/php-qrcode/tests/Helpers/BitBufferTest.php b/vendor/chillerlan/php-qrcode/tests/Helpers/BitBufferTest.php index 25d1c3504..e9479a5c6 100644 --- a/vendor/chillerlan/php-qrcode/tests/Helpers/BitBufferTest.php +++ b/vendor/chillerlan/php-qrcode/tests/Helpers/BitBufferTest.php @@ -12,21 +12,22 @@ namespace chillerlan\QRCodeTest\Helpers; -use chillerlan\QRCode\{QRCode, Helpers\BitBuffer}; -use chillerlan\QRCodeTest\QRTestAbstract; +use chillerlan\QRCode\QRCode; +use chillerlan\QRCode\Helpers\BitBuffer; +use PHPUnit\Framework\TestCase; -class BitBufferTest extends QRTestAbstract{ +/** + * BitBuffer coverage test + */ +final class BitBufferTest extends TestCase{ - /** - * @var \chillerlan\QRCode\Helpers\BitBuffer - */ - protected $bitBuffer; + protected BitBuffer $bitBuffer; protected function setUp():void{ $this->bitBuffer = new BitBuffer; } - public function bitProvider(){ + public function bitProvider():array{ return [ 'number' => [QRCode::DATA_NUMBER, 16], 'alphanum' => [QRCode::DATA_ALPHANUM, 32], @@ -38,16 +39,16 @@ class BitBufferTest extends QRTestAbstract{ /** * @dataProvider bitProvider */ - public function testPut($data, $value){ + public function testPut(int $data, int $value):void{ $this->bitBuffer->put($data, 4); - $this->assertSame($value, $this->bitBuffer->buffer[0]); - $this->assertSame(4, $this->bitBuffer->length); + $this::assertSame($value, $this->bitBuffer->getBuffer()[0]); + $this::assertSame(4, $this->bitBuffer->getLength()); } - public function testClear(){ + public function testClear():void{ $this->bitBuffer->clear(); - $this->assertSame([], $this->bitBuffer->buffer); - $this->assertSame(0, $this->bitBuffer->length); + $this::assertSame([], $this->bitBuffer->getBuffer()); + $this::assertSame(0, $this->bitBuffer->getLength()); } } diff --git a/vendor/chillerlan/php-qrcode/tests/Helpers/PolynomialTest.php b/vendor/chillerlan/php-qrcode/tests/Helpers/PolynomialTest.php index 7f6da303c..b0f3f4aa7 100644 --- a/vendor/chillerlan/php-qrcode/tests/Helpers/PolynomialTest.php +++ b/vendor/chillerlan/php-qrcode/tests/Helpers/PolynomialTest.php @@ -14,26 +14,26 @@ namespace chillerlan\QRCodeTest\Helpers; use chillerlan\QRCode\Helpers\Polynomial; use chillerlan\QRCode\QRCodeException; -use chillerlan\QRCodeTest\QRTestAbstract; +use PHPUnit\Framework\TestCase; -class PolynomialTest extends QRTestAbstract{ +/** + * Polynomial coverage test + */ +final class PolynomialTest extends TestCase{ - /** - * @var \chillerlan\QRCode\Helpers\Polynomial - */ - protected $polynomial; + protected Polynomial $polynomial; protected function setUp():void{ $this->polynomial = new Polynomial; } - public function testGexp(){ - $this->assertSame(142, $this->polynomial->gexp(-1)); - $this->assertSame(133, $this->polynomial->gexp(128)); - $this->assertSame(2, $this->polynomial->gexp(256)); + public function testGexp():void{ + $this::assertSame(142, $this->polynomial->gexp(-1)); + $this::assertSame(133, $this->polynomial->gexp(128)); + $this::assertSame(2, $this->polynomial->gexp(256)); } - public function testGlogException(){ + public function testGlogException():void{ $this->expectException(QRCodeException::class); $this->expectExceptionMessage('log(0)'); diff --git a/vendor/chillerlan/php-qrcode/tests/Output/QRFpdfTest.php b/vendor/chillerlan/php-qrcode/tests/Output/QRFpdfTest.php index 1b49182d2..a3ab0f5b9 100644 --- a/vendor/chillerlan/php-qrcode/tests/Output/QRFpdfTest.php +++ b/vendor/chillerlan/php-qrcode/tests/Output/QRFpdfTest.php @@ -23,8 +23,6 @@ use function class_exists, substr; */ class QRFpdfTest extends QROutputTestAbstract{ - protected $FQCN = QRFpdf::class; - /** * @inheritDoc * @internal @@ -33,6 +31,8 @@ class QRFpdfTest extends QROutputTestAbstract{ if(!class_exists(FPDF::class)){ $this->markTestSkipped('FPDF not available'); + + /** @noinspection PhpUnreachableStatementInspection */ return; } @@ -41,6 +41,24 @@ class QRFpdfTest extends QROutputTestAbstract{ /** * @inheritDoc + * @internal + */ + protected function getOutputInterface(QROptions $options):QROutputInterface{ + return new QRFpdf($options, $this->matrix); + } + + /** + * @inheritDoc + * @internal + */ + public function types():array{ + return [ + 'fpdf' => [QRCode::OUTPUT_FPDF], + ]; + } + + /** + * @inheritDoc */ public function testSetModuleValues():void{ @@ -50,6 +68,7 @@ class QRFpdfTest extends QROutputTestAbstract{ 4 => [255, 255, 255], ]; + $this->outputInterface = $this->getOutputInterface($this->options); $this->outputInterface->dump(); $this::assertTrue(true); // tricking the code coverage @@ -57,25 +76,22 @@ class QRFpdfTest extends QROutputTestAbstract{ /** * @inheritDoc + * @dataProvider types */ - public function testRenderImage():void{ - $type = QRCode::OUTPUT_FPDF; - + public function testRenderImage(string $type):void{ $this->options->outputType = $type; $this->options->imageBase64 = false; - $this->outputInterface->dump($this::cachefile.$type); // substr() to avoid CreationDate - $expected = substr(file_get_contents($this::cachefile.$type), 0, 2000); - $actual = substr($this->outputInterface->dump(), 0, 2000); + $expected = substr(file_get_contents(__DIR__.'/samples/'.$type), 0, 2500); + $actual = substr((new QRCode($this->options))->render('test'), 0, 2500); $this::assertSame($expected, $actual); } public function testOutputGetResource():void{ $this->options->returnResource = true; - - $this->setOutputInterface(); + $this->outputInterface = $this->getOutputInterface($this->options); $this::assertInstanceOf(FPDF::class, $this->outputInterface->dump()); } diff --git a/vendor/chillerlan/php-qrcode/tests/Output/QRImageTest.php b/vendor/chillerlan/php-qrcode/tests/Output/QRImageTest.php index c4466a658..4da150b83 100644 --- a/vendor/chillerlan/php-qrcode/tests/Output/QRImageTest.php +++ b/vendor/chillerlan/php-qrcode/tests/Output/QRImageTest.php @@ -12,14 +12,41 @@ namespace chillerlan\QRCodeTest\Output; -use chillerlan\QRCode\{QRCode, Output\QRImage}; -use const PHP_MAJOR_VERSION; +use chillerlan\QRCode\{QRCode, QROptions}; +use chillerlan\QRCode\Output\{QROutputInterface, QRImage}; +/** + * Tests the QRImage output module + */ class QRImageTest extends QROutputTestAbstract{ - protected $FQCN = QRImage::class; + /** + * @inheritDoc + * @internal + */ + public function setUp():void{ - public function types(){ + if(!extension_loaded('gd')){ + $this->markTestSkipped('ext-gd not loaded'); + return; + } + + parent::setUp(); + } + + /** + * @inheritDoc + * @internal + */ + protected function getOutputInterface(QROptions $options):QROutputInterface{ + return new QRImage($options, $this->matrix); + } + + /** + * @inheritDoc + * @internal + */ + public function types():array{ return [ 'png' => [QRCode::OUTPUT_IMAGE_PNG], 'gif' => [QRCode::OUTPUT_IMAGE_GIF], @@ -28,25 +55,9 @@ class QRImageTest extends QROutputTestAbstract{ } /** - * @dataProvider types - * @param $type + * @inheritDoc */ - public function testImageOutput($type){ - $this->options->outputType = $type; - $this->options->imageBase64 = false; - - $this->setOutputInterface(); - $this->outputInterface->dump($this::cachefile.$type); - $img = $this->outputInterface->dump(); - - if($type === QRCode::OUTPUT_IMAGE_JPG){ // jpeg encoding may cause different results - $this->markAsRisky(); - } - - $this->assertSame($img, file_get_contents($this::cachefile.$type)); - } - - public function testSetModuleValues(){ + public function testSetModuleValues():void{ $this->options->moduleValues = [ // data @@ -54,24 +65,25 @@ class QRImageTest extends QROutputTestAbstract{ 4 => [255, 255, 255], ]; - $this->setOutputInterface()->dump(); + $this->outputInterface = $this->getOutputInterface($this->options); + $this->outputInterface->dump(); - $this->assertTrue(true); // tricking the code coverage + $this::assertTrue(true); // tricking the code coverage } + /** + * @phan-suppress PhanUndeclaredClassReference + */ public function testOutputGetResource():void{ $this->options->returnResource = true; + $this->outputInterface = $this->getOutputInterface($this->options); - $this->setOutputInterface(); + $actual = $this->outputInterface->dump(); - $data = $this->outputInterface->dump(); - - if(PHP_MAJOR_VERSION >= 8){ - $this::assertInstanceOf('\\GdImage', $data); - } - else{ - $this::assertIsResource($data); - } + /** @noinspection PhpElementIsNotAvailableInCurrentPhpVersionInspection */ + \PHP_MAJOR_VERSION >= 8 + ? $this::assertInstanceOf(\GdImage::class, $actual) + : $this::assertIsResource($actual); } } diff --git a/vendor/chillerlan/php-qrcode/tests/Output/QRImagickTest.php b/vendor/chillerlan/php-qrcode/tests/Output/QRImagickTest.php index c927cc64e..aeb5109d5 100644 --- a/vendor/chillerlan/php-qrcode/tests/Output/QRImagickTest.php +++ b/vendor/chillerlan/php-qrcode/tests/Output/QRImagickTest.php @@ -9,40 +9,59 @@ * @copyright 2018 smiley * @license MIT * + * @noinspection PhpUndefinedClassInspection * @noinspection PhpComposerExtensionStubsInspection */ namespace chillerlan\QRCodeTest\Output; use Imagick; -use chillerlan\QRCode\{QRCode, Output\QRImagick}; +use chillerlan\QRCode\{QRCode, QROptions}; +use chillerlan\QRCode\Output\{QROutputInterface, QRImagick}; +/** + * Tests the QRImagick output module + */ class QRImagickTest extends QROutputTestAbstract{ - protected $FQCN = QRImagick::class; - + /** + * @inheritDoc + * @internal + */ public function setUp():void{ if(!extension_loaded('imagick')){ $this->markTestSkipped('ext-imagick not loaded'); + + /** @noinspection PhpUnreachableStatementInspection */ return; } parent::setUp(); } - public function testImageOutput(){ - $type = QRCode::OUTPUT_IMAGICK; - - $this->options->outputType = $type; - $this->setOutputInterface(); - $this->outputInterface->dump($this::cachefile.$type); - $img = $this->outputInterface->dump(); + /** + * @inheritDoc + * @internal + */ + protected function getOutputInterface(QROptions $options):QROutputInterface{ + return new QRImagick($options, $this->matrix); + } - $this->assertSame($img, file_get_contents($this::cachefile.$type)); + /** + * @inheritDoc + * @internal + */ + public function types():array{ + return [ + 'imagick' => [QRCode::OUTPUT_IMAGICK], + ]; } - public function testSetModuleValues(){ + /** + * @inheritDoc + */ + public function testSetModuleValues():void{ $this->options->moduleValues = [ // data @@ -50,17 +69,18 @@ class QRImagickTest extends QROutputTestAbstract{ 4 => '#ECF9BE', ]; - $this->setOutputInterface()->dump(); + $this->outputInterface = $this->getOutputInterface($this->options); + $this->outputInterface->dump(); - $this->assertTrue(true); // tricking the code coverage + $this::assertTrue(true); // tricking the code coverage } public function testOutputGetResource():void{ $this->options->returnResource = true; - - $this->setOutputInterface(); + $this->outputInterface = $this->getOutputInterface($this->options); $this::assertInstanceOf(Imagick::class, $this->outputInterface->dump()); } + } diff --git a/vendor/chillerlan/php-qrcode/tests/Output/QRMarkupTest.php b/vendor/chillerlan/php-qrcode/tests/Output/QRMarkupTest.php index 24fdc3ce6..cc18077d5 100644 --- a/vendor/chillerlan/php-qrcode/tests/Output/QRMarkupTest.php +++ b/vendor/chillerlan/php-qrcode/tests/Output/QRMarkupTest.php @@ -12,13 +12,27 @@ namespace chillerlan\QRCodeTest\Output; -use chillerlan\QRCode\{QRCode, Output\QRMarkup}; +use chillerlan\QRCode\{QRCode, QROptions}; +use chillerlan\QRCode\Output\{QROutputInterface, QRMarkup}; +/** + * Tests the QRMarkup output module + */ class QRMarkupTest extends QROutputTestAbstract{ - protected $FQCN = QRMarkup::class; + /** + * @inheritDoc + * @internal + */ + protected function getOutputInterface(QROptions $options):QROutputInterface{ + return new QRMarkup($options, $this->matrix); + } - public function types(){ + /** + * @inheritDoc + * @internal + */ + public function types():array{ return [ 'html' => [QRCode::OUTPUT_MARKUP_HTML], 'svg' => [QRCode::OUTPUT_MARKUP_SVG], @@ -26,43 +40,9 @@ class QRMarkupTest extends QROutputTestAbstract{ } /** - * @dataProvider types - * @param $type - */ - public function testMarkupOutputFile($type){ - $this->options->outputType = $type; - $this->options->cachefile = $this::cachefile.$type; - $this->setOutputInterface(); - $data = $this->outputInterface->dump(); - - $this->assertSame($data, file_get_contents($this->options->cachefile)); - } - - /** - * @dataProvider types - * @param $type + * @inheritDoc */ - public function testMarkupOutput($type){ - $this->options->imageBase64 = false; - $this->options->outputType = $type; - $this->setOutputInterface(); - - $expected = explode($this->options->eol, file_get_contents($this::cachefile.$type)); - // cut off the doctype & head - array_shift($expected); - - if($type === QRCode::OUTPUT_MARKUP_HTML){ - // cut off the </body> tag - array_pop($expected); - } - - $expected = implode($this->options->eol, $expected); - - $this->assertSame(trim($expected), trim($this->outputInterface->dump())); - } - - public function testSetModuleValues(){ - + public function testSetModuleValues():void{ $this->options->imageBase64 = false; $this->options->moduleValues = [ // data @@ -70,10 +50,10 @@ class QRMarkupTest extends QROutputTestAbstract{ 4 => '#ECF9BE', ]; - $this->setOutputInterface(); + $this->outputInterface = $this->getOutputInterface($this->options); $data = $this->outputInterface->dump(); - $this->assertStringContainsString('#4A6000', $data); - $this->assertStringContainsString('#ECF9BE', $data); + $this::assertStringContainsString('#4A6000', $data); + $this::assertStringContainsString('#ECF9BE', $data); } } diff --git a/vendor/chillerlan/php-qrcode/tests/Output/QROutputTestAbstract.php b/vendor/chillerlan/php-qrcode/tests/Output/QROutputTestAbstract.php index 6cd95d080..d48468bca 100644 --- a/vendor/chillerlan/php-qrcode/tests/Output/QROutputTestAbstract.php +++ b/vendor/chillerlan/php-qrcode/tests/Output/QROutputTestAbstract.php @@ -12,60 +12,129 @@ namespace chillerlan\QRCodeTest\Output; -use chillerlan\QRCode\QROptions; -use chillerlan\QRCode\Data\Byte; +use chillerlan\QRCode\{QRCode, QROptions}; +use chillerlan\QRCode\Data\{Byte, QRMatrix}; use chillerlan\QRCode\Output\{QRCodeOutputException, QROutputInterface}; -use chillerlan\QRCodeTest\QRTestAbstract; +use PHPUnit\Framework\TestCase; -use function dirname, file_exists, mkdir; +use function file_exists, in_array, mkdir; -abstract class QROutputTestAbstract extends QRTestAbstract{ +use const PHP_OS_FAMILY, PHP_VERSION_ID; - const cachefile = __DIR__.'/../../.build/output_test/test.'; +/** + * Test abstract for the several (built-in) output modules, + * should also be used to test custom output modules + */ +abstract class QROutputTestAbstract extends TestCase{ + + /** @internal */ + protected string $builddir = __DIR__.'/../../.build/output_test'; + /** @internal */ + protected QROutputInterface $outputInterface; + /** @internal */ + protected QROptions $options; + /** @internal */ + protected QRMatrix $matrix; /** - * @var \chillerlan\QRCode\Output\QROutputInterface + * Attempts to create a directory under /.build and instances several required objects + * + * @internal */ - protected $outputInterface; + protected function setUp():void{ + + if(!file_exists($this->builddir)){ + mkdir($this->builddir, 0777, true); + } + + $this->options = new QROptions; + $this->matrix = (new Byte($this->options, 'testdata'))->initMatrix(0); + $this->outputInterface = $this->getOutputInterface($this->options); + } /** - * @var \chillerlan\QRCode\QROptions + * Returns a QROutputInterface instance with the given options and using $this->matrix + * + * @internal */ - protected $options; + abstract protected function getOutputInterface(QROptions $options):QROutputInterface; /** - * @var \chillerlan\QRCode\Data\QRMatrix + * Validate the instance of the interface */ - protected $matrix; - - protected function setUp():void{ - parent::setUp(); + public function testInstance():void{ + $this::assertInstanceOf(QROutputInterface::class, $this->outputInterface); + } - $buildDir = dirname($this::cachefile); - if(!file_exists($buildDir)){ - mkdir($buildDir, 0777, true); - } + /** + * Tests if an exception is thrown when trying to write a cache file to an invalid destination + */ + public function testSaveException():void{ + $this->expectException(QRCodeOutputException::class); + $this->expectExceptionMessage('Could not write data to cache file: /foo/bar.test'); - $this->options = new QROptions; - $this->setOutputInterface(); + $this->options->cachefile = '/foo/bar.test'; + $this->outputInterface = $this->getOutputInterface($this->options); + $this->outputInterface->dump(); } - protected function setOutputInterface(){ - $this->outputInterface = $this->reflection->newInstanceArgs([$this->options, (new Byte($this->options, 'testdata'))->initMatrix(0)]); - return $this->outputInterface; - } + /** + * covers the module values settings + */ + abstract public function testSetModuleValues():void; - public function testInstance(){ - $this->assertInstanceOf(QROutputInterface::class, $this->outputInterface); + /* + * additional, non-essential, potentially inaccurate coverage tests + */ + + /** + * @see testStringOutput() + * @return string[][] + * @internal + */ + abstract public function types():array; + + /** + * coverage of the built-in output modules + * + * @dataProvider types + */ + public function testStringOutput(string $type):void{ + $this->options->outputType = $type; + $this->options->cachefile = $this->builddir.'/test.'.$type; + $this->options->imageBase64 = false; + + $this->outputInterface = $this->getOutputInterface($this->options); + $data = $this->outputInterface->dump(); // creates the cache file + + $this::assertSame($data, file_get_contents($this->options->cachefile)); } - public function testSaveException(){ - $this->expectException(QRCodeOutputException::class); - $this->expectExceptionMessage('Could not write data to cache file: /foo'); + /** + * covers the built-in output modules, tests against pre-rendered data + * + * @dataProvider types + */ + public function testRenderImage(string $type):void{ + + // may fail on CI, different PHP (platform) versions produce different output + // the samples were generated on php-7.4.3-Win32-vc15-x64 + if( + (PHP_OS_FAMILY !== 'Windows' || PHP_VERSION_ID >= 80100) + && in_array($type, [QRCode::OUTPUT_IMAGE_JPG, QRCode::OUTPUT_IMAGICK, QRCode::OUTPUT_MARKUP_SVG]) + ){ + $this::markTestSkipped('may fail on CI'); + + /** @noinspection PhpUnreachableStatementInspection */ + return; + } - $this->options->cachefile = '/foo'; - $this->setOutputInterface(); - $this->outputInterface->dump(); + $this->options->outputType = $type; + + $this::assertSame( + trim(file_get_contents(__DIR__.'/samples/'.$type)), + trim((new QRCode($this->options))->render('test')) + ); } } diff --git a/vendor/chillerlan/php-qrcode/tests/Output/QRStringTest.php b/vendor/chillerlan/php-qrcode/tests/Output/QRStringTest.php index 5dbd34010..c41d109be 100644 --- a/vendor/chillerlan/php-qrcode/tests/Output/QRStringTest.php +++ b/vendor/chillerlan/php-qrcode/tests/Output/QRStringTest.php @@ -12,13 +12,28 @@ namespace chillerlan\QRCodeTest\Output; -use chillerlan\QRCode\{QRCode, Output\QRString}; +use chillerlan\QRCodeExamples\MyCustomOutput; +use chillerlan\QRCode\{QRCode, QROptions}; +use chillerlan\QRCode\Output\{QROutputInterface, QRString}; +/** + * Tests the QRString output module + */ class QRStringTest extends QROutputTestAbstract{ - protected $FQCN = QRString::class; + /** + * @inheritDoc + * @internal + */ + protected function getOutputInterface(QROptions $options):QROutputInterface{ + return new QRString($options, $this->matrix); + } - public function types(){ + /** + * @inheritDoc + * @internal + */ + public function types():array{ return [ 'json' => [QRCode::OUTPUT_STRING_JSON], 'text' => [QRCode::OUTPUT_STRING_TEXT], @@ -26,19 +41,9 @@ class QRStringTest extends QROutputTestAbstract{ } /** - * @dataProvider types - * @param $type + * @inheritDoc */ - public function testStringOutput($type){ - $this->options->outputType = $type; - $this->options->cachefile = $this::cachefile.$type; - $this->setOutputInterface(); - $data = $this->outputInterface->dump(); - - $this->assertSame($data, file_get_contents($this->options->cachefile)); - } - - public function testSetModuleValues(){ + public function testSetModuleValues():void{ $this->options->moduleValues = [ // data @@ -46,11 +51,26 @@ class QRStringTest extends QROutputTestAbstract{ 4 => 'B', ]; - $this->setOutputInterface(); - $data = $this->outputInterface->dump(); + $this->outputInterface = $this->getOutputInterface($this->options); + $data = $this->outputInterface->dump(); + + $this::assertStringContainsString('A', $data); + $this::assertStringContainsString('B', $data); + } + + /** + * covers the custom output functionality via an example + */ + public function testCustomOutput():void{ + $this->options->version = 5; + $this->options->eccLevel = QRCode::ECC_L; + $this->options->outputType = QRCode::OUTPUT_CUSTOM; + $this->options->outputInterface = MyCustomOutput::class; - $this->assertStringContainsString('A', $data); - $this->assertStringContainsString('B', $data); + $this::assertSame( + file_get_contents(__DIR__.'/samples/custom'), + (new QRCode($this->options))->render('test') + ); } } diff --git a/vendor/chillerlan/php-qrcode/tests/Output/samples/custom b/vendor/chillerlan/php-qrcode/tests/Output/samples/custom new file mode 100644 index 000000000..e19a64352 --- /dev/null +++ b/vendor/chillerlan/php-qrcode/tests/Output/samples/custom @@ -0,0 +1,45 @@ +000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000 +000011111110111010000101111010000011111110000 +000010000010111000001101011000001010000010000 +000010111010101101011000001101011010111010000 +000010111010110100111110010100111010111010000 +000010111010000001101011000001101010111010000 +000010000010100111110010100111110010000010000 +000011111110101010101010101010101011111110000 +000000000000010010100111110010100000000000000 +000011001110000101111010000101111001011110000 +000000000000111010000101111010000111100010000 +000001011010100111110010100111110011001010000 +000010000101111101011000001101011110011110000 +000000011010100011000001101011000101110100000 +000011001100001001101011000001101010011010000 +000010110111110000001101011000001100110100000 +000010000100100010100111110010100001100100000 +000011111110111101111010000101111010100110000 +000011010000111010000101111010000111100100000 +000010101111111111110010100111110011001000000 +000010110001110101011000001101011110011010000 +000001001111100011000001101011000101110010000 +000011000100110001101011000001101010011100000 +000001000011001000001101011000001100110000000 +000011101001011010100111110010100001100000000 +000010111010001101111010000101111010100110000 +000011100000001010000101111010000111100000000 +000000001110110111110010100111110011001000000 +000000011001011101011000001101011110011100000 +000011111110101011000001101011001111110110000 +000000000000110001101011000001101000111100000 +000011111110001000001101011000011010110000000 +000010000010101010100111110010101000100100000 +000010111010111101111010000101111111100110000 +000010111010011010000101111010001101100010000 +000010111010000111110010100111100101101100000 +000010000010101101011000001101001100111100000 +000011111110101011000001101011000110010110000 +000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000 diff --git a/vendor/chillerlan/php-qrcode/tests/Output/samples/fpdf b/vendor/chillerlan/php-qrcode/tests/Output/samples/fpdf Binary files differnew file mode 100644 index 000000000..15b041b9f --- /dev/null +++ b/vendor/chillerlan/php-qrcode/tests/Output/samples/fpdf diff --git a/vendor/chillerlan/php-qrcode/tests/Output/samples/gif b/vendor/chillerlan/php-qrcode/tests/Output/samples/gif new file mode 100644 index 000000000..aff9a0fa9 --- /dev/null +++ b/vendor/chillerlan/php-qrcode/tests/Output/samples/gif @@ -0,0 +1 @@ +data:image/gif;base64,R0lGODlhkQCRAIAAAAQCBP///yH5BAEAAAEALAAAAACRAJEAAAL+jI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si8YhMKpfMpvOpBEin1Kr1ek1gpY6qdgsOU1niMviL7Y4R5raV7I4D0NmGly13w/Nm+tu+dsDXtjcY5nfHkGhgWFY4x7GoIOlXGRmYQnmhKYg56clZEToyOjF6CuqJURrCGoE6pRaLN7vh+nH7AMsFWMuouglcIklIy9vpG0CcmlyMfJzJLGb5DFlN/dvcZ2wdre3Ija0s3T3+PR2+sgx+nd7+ng1tjg6Psk4fX36vT464JX5i3xl3+WTJE+esoDpyA+vtKodwW72ADP8RnAfxYkT+dgpVCLToUFjHBR/TaDRRsk7IZAAvJsT4yJ/Jlfh0VZw50t5NlTlfGuTHEebCc4dcSoSQ8s9ElDuV9jxqk2jDnBSlgnwa9KdMnkI9iqSQa9VXU2NblX11VkPYXgeZsgz2FsRaRWk9zCVZV2xcUXkv7QXb18LdT39FNKq5b+NhnDoXM05s1DHXqpIh0wRaObDazJaxyuM8WC9ozKQVg4bC1ilqHVNX52jt+gbs2DVm087nM/Lnrw9bh4YbR6vujEur+dacgY/wy8vxBv0tOE/zrlRPGr9KvXHw1Kanb1UNne/flw9bXu6snThu7OWtewaPXLR6jMfH9+PODT3l+eT+ed+naxVRMaVWX1vM4XedgEPtFuBkCK4nx0/hAaZggg4CyKAhEsYHXGn5YTfdYhsWZlaFEF7oXIaDjGggCejlhiFpyhHIYXQNzvedabnot6CMdRXoI4kHvpAUWY81ZaSKMRQpAZA5NvmfC0yideSNSXpIg5Pu0ceef1W22IKWxZ0In31f4tjji14itmaZYD6ipplsyukmml6daR6ZPFqI5W17vtfdbYA+mN2fUBgap5KCFtpmoGMeGiVhig4p5WhvbgmkbZVaeiWLQaIYpqV2VsfndxN2IOqo2T3J56l+jdYpjTe6akuNpL4HI5k2TNheqyB+KKQ3l1IJZlKachn+bHqoNgpsTazOwCuzvjL2rAzGRmqqtEhBtV+2JkpaVIxXHmtYU4hyu6W3w+JiLrbNqpYnuOSWqKKYKYZ777i/DtPut/M+am+os0b6763ITrppvV1aCSWdhnb7bqLwElotreIpjOe7scb4sFsYcyXxud8u2S/CjGYsbro9qtvnySBruyoM1/qLJKbuEllyy1Ma3PGd60b1sR7D9SqsqiEepiPMENc68HM1p+yz0YSKOLTSHksNtZ5Q7QwunJlVvK/BO6QKNrUqvyZq2aBanB5nak/86Nhpa0x31ovejXfeeu/Nd99+/w144IIPTnjhhh+OeOKKL854444/DnnkkhcCXgAAOw== diff --git a/vendor/chillerlan/php-qrcode/tests/Output/samples/html b/vendor/chillerlan/php-qrcode/tests/Output/samples/html new file mode 100644 index 000000000..aa154a333 --- /dev/null +++ b/vendor/chillerlan/php-qrcode/tests/Output/samples/html @@ -0,0 +1,31 @@ +<div> +<div><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span></div> +<div><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span></div> +<div><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span></div> +<div><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span></div> +<div><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span></div> +<div><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span></div> +<div><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span></div> +<div><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span></div> +<div><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span></div> +<div><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span></div> +<div><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span></div> +<div><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span></div> +<div><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span></div> +<div><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span></div> +<div><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span></div> +<div><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span></div> +<div><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span></div> +<div><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span></div> +<div><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span></div> +<div><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span></div> +<div><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span></div> +<div><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span></div> +<div><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span></div> +<div><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span></div> +<div><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #000;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span></div> +<div><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span></div> +<div><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span></div> +<div><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span></div> +<div><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span><span style="background: #fff;"></span></div> +</div> diff --git a/vendor/chillerlan/php-qrcode/tests/Output/samples/imagick b/vendor/chillerlan/php-qrcode/tests/Output/samples/imagick Binary files differnew file mode 100644 index 000000000..377725d85 --- /dev/null +++ b/vendor/chillerlan/php-qrcode/tests/Output/samples/imagick diff --git a/vendor/chillerlan/php-qrcode/tests/Output/samples/jpg b/vendor/chillerlan/php-qrcode/tests/Output/samples/jpg new file mode 100644 index 000000000..dd46e24a9 --- /dev/null +++ b/vendor/chillerlan/php-qrcode/tests/Output/samples/jpg @@ -0,0 +1 @@ +data:image/jpg;base64,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 diff --git a/vendor/chillerlan/php-qrcode/tests/Output/samples/json b/vendor/chillerlan/php-qrcode/tests/Output/samples/json new file mode 100644 index 000000000..f8423f75b --- /dev/null +++ b/vendor/chillerlan/php-qrcode/tests/Output/samples/json @@ -0,0 +1 @@ +[[18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18],[18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18],[18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18],[18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18],[18,18,18,18,1536,1536,1536,1536,1536,1536,1536,8,3584,1024,4,4,1024,8,1536,1536,1536,1536,1536,1536,1536,18,18,18,18],[18,18,18,18,1536,6,6,6,6,6,1536,8,14,1024,4,4,1024,8,1536,6,6,6,6,6,1536,18,18,18,18],[18,18,18,18,1536,6,5632,5632,5632,6,1536,8,3584,4,1024,4,1024,8,1536,6,5632,5632,5632,6,1536,18,18,18,18],[18,18,18,18,1536,6,5632,5632,5632,6,1536,8,3584,4,4,1024,4,8,1536,6,5632,5632,5632,6,1536,18,18,18,18],[18,18,18,18,1536,6,5632,5632,5632,6,1536,8,3584,1024,1024,4,4,8,1536,6,5632,5632,5632,6,1536,18,18,18,18],[18,18,18,18,1536,6,6,6,6,6,1536,8,14,4,4,4,4,8,1536,6,6,6,6,6,1536,18,18,18,18],[18,18,18,18,1536,1536,1536,1536,1536,1536,1536,8,3072,12,3072,12,3072,8,1536,1536,1536,1536,1536,1536,1536,18,18,18,18],[18,18,18,18,8,8,8,8,8,8,8,8,14,1024,1024,4,4,8,8,8,8,8,8,8,8,18,18,18,18],[18,18,18,18,3584,3584,3584,3584,14,14,3072,14,3584,4,1024,4,4,3584,14,14,3584,3584,3584,14,3584,18,18,18,18],[18,18,18,18,1024,4,4,1024,1024,1024,12,1024,4,4,1024,4,1024,4,4,1024,4,1024,1024,4,1024,18,18,18,18],[18,18,18,18,1024,4,1024,4,1024,1024,3072,4,4,4,1024,4,1024,1024,1024,1024,1024,4,4,1024,1024,18,18,18,18],[18,18,18,18,1024,4,1024,1024,4,4,12,1024,1024,4,1024,4,1024,1024,4,4,4,1024,4,1024,4,18,18,18,18],[18,18,18,18,4,1024,1024,4,1024,4,3072,4,4,1024,1024,1024,4,1024,4,4,1024,1024,4,1024,4,18,18,18,18],[18,18,18,18,8,8,8,8,8,8,8,8,512,4,1024,4,4,1024,4,1024,4,1024,4,1024,4,18,18,18,18],[18,18,18,18,1536,1536,1536,1536,1536,1536,1536,8,14,4,1024,4,4,1024,1024,4,1024,1024,1024,4,4,18,18,18,18],[18,18,18,18,1536,6,6,6,6,6,1536,8,14,1024,4,1024,1024,1024,1024,4,4,1024,1024,4,4,18,18,18,18],[18,18,18,18,1536,6,5632,5632,5632,6,1536,8,14,1024,1024,1024,4,4,1024,4,4,4,1024,1024,1024,18,18,18,18],[18,18,18,18,1536,6,5632,5632,5632,6,1536,8,3584,1024,4,4,4,1024,4,4,1024,1024,4,1024,4,18,18,18,18],[18,18,18,18,1536,6,5632,5632,5632,6,1536,8,3584,4,1024,1024,4,1024,4,4,1024,4,1024,4,4,18,18,18,18],[18,18,18,18,1536,6,6,6,6,6,1536,8,3584,1024,1024,1024,1024,4,1024,4,1024,1024,4,4,1024,18,18,18,18],[18,18,18,18,1536,1536,1536,1536,1536,1536,1536,8,3584,1024,4,1024,1024,4,4,1024,4,4,4,4,4,18,18,18,18],[18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18],[18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18],[18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18],[18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18]] diff --git a/vendor/chillerlan/php-qrcode/tests/Output/samples/png b/vendor/chillerlan/php-qrcode/tests/Output/samples/png new file mode 100644 index 000000000..34148d735 --- /dev/null +++ b/vendor/chillerlan/php-qrcode/tests/Output/samples/png @@ -0,0 +1 @@ +data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJEAAACRCAIAAABMus10AAAABnRSTlMA/wD/AP83WBt9AAAACXBIWXMAAA7EAAAOxAGVKw4bAAACd0lEQVR4nO3dQW7jIABA0fFo7n/ldFnJC0sMBvu3762bJtUXMnUwHJ/P5w8pf5/+AAzTrEezHs16NOvRrEezHs16NOvRrEezHs16NOvRrEezHs16NOvRrEeznn8zLz6O467Pce20aOX6fa9XuJxeO/SbbzSzDMc469GsR7MezXqm5iAnNy5vHZplrJs4bPuLhhhnPZr1aNajWc+dc5CToavu0NV+6F7GU/OIdQ8cGWc9mvVo1qNZz8I5yFO2TUmeYpz1aNajWY9mPT9hDjKzPKTIOOvRrEezHs16Fs5B1l38n5pWvGQ6Y5z1aNajWY9mPXfOQbY9VDKzHmToq5ltf9EQ46xHsx7NejTrOV7yv/0M38Xwdpr1aNajWc9j+4PcuIvHzKO6626LrFsaa5z1aNajWY9mPfv2BzldhGd2AJm5gM9MOp7a0OzEOOvRrEezHs169u0PMnQB3/ZA7Utumgwxzno069GsR7Oefc/mzkwrtq34uHGrtJnffM0469GsR7MezXqm5iAzx7hse3pl3eKRpxhnPZr1aNajWc9j58XM3DXYtle79SDcQ7MezXo060mem7ttecg717AYZz2a9WjWo1lP8tzc6x9ed7fCfRD+k2Y9mvVo1pM8N3fmfbftALJuHa1x1qNZj2Y9mvUkz6y78fJ+4+LXbef1Gmc9mvVo1qNZT3IOcjLzeM6697UehG+a9WjWo1lP8tzck3WLR2Yez5n54WvGWY9mPZr1aNaTPDf32szK0XW3NnwX86tp1qNZj2Y9P+Hc3N/GOOvRrEezHs16NOvRrEezHs16NOvRrEezHs16NOvRrEezHs16NOvRrEezni+wifc/oOyB/wAAAABJRU5ErkJggg== diff --git a/vendor/chillerlan/php-qrcode/tests/Output/samples/svg b/vendor/chillerlan/php-qrcode/tests/Output/samples/svg new file mode 100644 index 000000000..54aceb9ec --- /dev/null +++ b/vendor/chillerlan/php-qrcode/tests/Output/samples/svg @@ -0,0 +1 @@ +data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJxci1zdmcgIiBzdHlsZT0id2lkdGg6IDEwMCU7IGhlaWdodDogYXV0bzsiIHZpZXdCb3g9IjAgMCAyOSAyOSI+DQo8ZGVmcz48c3R5bGU+cmVjdHtzaGFwZS1yZW5kZXJpbmc6Y3Jpc3BFZGdlc308L3N0eWxlPjwvZGVmcz4NCjxwYXRoIGNsYXNzPSJxci00ICIgc3Ryb2tlPSJ0cmFuc3BhcmVudCIgZmlsbD0iI2ZmZiIgZmlsbC1vcGFjaXR5PSIxIiBkPSJNMTQgNCBoMiB2MSBoLTJaIE0xNCA1IGgyIHYxIGgtMlogTTEzIDYgaDEgdjEgaC0xWiBNMTUgNiBoMSB2MSBoLTFaIE0xMyA3IGgyIHYxIGgtMlogTTE2IDcgaDEgdjEgaC0xWiBNMTUgOCBoMiB2MSBoLTJaIE0xMyA5IGg0IHYxIGgtNFogTTE1IDExIGgyIHYxIGgtMlogTTEzIDEyIGgxIHYxIGgtMVogTTE1IDEyIGgyIHYxIGgtMlogTTUgMTMgaDIgdjEgaC0yWiBNMTIgMTMgaDIgdjEgaC0yWiBNMTUgMTMgaDEgdjEgaC0xWiBNMTcgMTMgaDIgdjEgaC0yWiBNMjAgMTMgaDEgdjEgaC0xWiBNMjMgMTMgaDEgdjEgaC0xWiBNNSAxNCBoMSB2MSBoLTFaIE03IDE0IGgxIHYxIGgtMVogTTExIDE0IGgzIHYxIGgtM1ogTTE1IDE0IGgxIHYxIGgtMVogTTIxIDE0IGgyIHYxIGgtMlogTTUgMTUgaDEgdjEgaC0xWiBNOCAxNSBoMiB2MSBoLTJaIE0xMyAxNSBoMSB2MSBoLTFaIE0xNSAxNSBoMSB2MSBoLTFaIE0xOCAxNSBoMyB2MSBoLTNaIE0yMiAxNSBoMSB2MSBoLTFaIE0yNCAxNSBoMSB2MSBoLTFaIE00IDE2IGgxIHYxIGgtMVogTTcgMTYgaDEgdjEgaC0xWiBNOSAxNiBoMSB2MSBoLTFaIE0xMSAxNiBoMiB2MSBoLTJaIE0xNiAxNiBoMSB2MSBoLTFaIE0xOCAxNiBoMiB2MSBoLTJaIE0yMiAxNiBoMSB2MSBoLTFaIE0yNCAxNiBoMSB2MSBoLTFaIE0xMyAxNyBoMSB2MSBoLTFaIE0xNSAxNyBoMiB2MSBoLTJaIE0xOCAxNyBoMSB2MSBoLTFaIE0yMCAxNyBoMSB2MSBoLTFaIE0yMiAxNyBoMSB2MSBoLTFaIE0yNCAxNyBoMSB2MSBoLTFaIE0xMyAxOCBoMSB2MSBoLTFaIE0xNSAxOCBoMiB2MSBoLTJaIE0xOSAxOCBoMSB2MSBoLTFaIE0yMyAxOCBoMiB2MSBoLTJaIE0xNCAxOSBoMSB2MSBoLTFaIE0xOSAxOSBoMiB2MSBoLTJaIE0yMyAxOSBoMiB2MSBoLTJaIE0xNiAyMCBoMiB2MSBoLTJaIE0xOSAyMCBoMyB2MSBoLTNaIE0xNCAyMSBoMyB2MSBoLTNaIE0xOCAyMSBoMiB2MSBoLTJaIE0yMiAyMSBoMSB2MSBoLTFaIE0yNCAyMSBoMSB2MSBoLTFaIE0xMyAyMiBoMSB2MSBoLTFaIE0xNiAyMiBoMSB2MSBoLTFaIE0xOCAyMiBoMiB2MSBoLTJaIE0yMSAyMiBoMSB2MSBoLTFaIE0yMyAyMiBoMiB2MSBoLTJaIE0xNyAyMyBoMSB2MSBoLTFaIE0xOSAyMyBoMSB2MSBoLTFaIE0yMiAyMyBoMiB2MSBoLTJaIE0xNCAyNCBoMSB2MSBoLTFaIE0xNyAyNCBoMiB2MSBoLTJaIE0yMCAyNCBoNSB2MSBoLTVaICIgLz48cGF0aCBjbGFzcz0icXItNiAiIHN0cm9rZT0idHJhbnNwYXJlbnQiIGZpbGw9IiNmZmYiIGZpbGwtb3BhY2l0eT0iMSIgZD0iTTUgNSBoNSB2MSBoLTVaIE0xOSA1IGg1IHYxIGgtNVogTTUgNiBoMSB2MSBoLTFaIE05IDYgaDEgdjEgaC0xWiBNMTkgNiBoMSB2MSBoLTFaIE0yMyA2IGgxIHYxIGgtMVogTTUgNyBoMSB2MSBoLTFaIE05IDcgaDEgdjEgaC0xWiBNMTkgNyBoMSB2MSBoLTFaIE0yMyA3IGgxIHYxIGgtMVogTTUgOCBoMSB2MSBoLTFaIE05IDggaDEgdjEgaC0xWiBNMTkgOCBoMSB2MSBoLTFaIE0yMyA4IGgxIHYxIGgtMVogTTUgOSBoNSB2MSBoLTVaIE0xOSA5IGg1IHYxIGgtNVogTTUgMTkgaDUgdjEgaC01WiBNNSAyMCBoMSB2MSBoLTFaIE05IDIwIGgxIHYxIGgtMVogTTUgMjEgaDEgdjEgaC0xWiBNOSAyMSBoMSB2MSBoLTFaIE01IDIyIGgxIHYxIGgtMVogTTkgMjIgaDEgdjEgaC0xWiBNNSAyMyBoNSB2MSBoLTVaICIgLz48cGF0aCBjbGFzcz0icXItOCAiIHN0cm9rZT0idHJhbnNwYXJlbnQiIGZpbGw9IiNmZmYiIGZpbGwtb3BhY2l0eT0iMSIgZD0iTTExIDQgaDEgdjEgaC0xWiBNMTcgNCBoMSB2MSBoLTFaIE0xMSA1IGgxIHYxIGgtMVogTTE3IDUgaDEgdjEgaC0xWiBNMTEgNiBoMSB2MSBoLTFaIE0xNyA2IGgxIHYxIGgtMVogTTExIDcgaDEgdjEgaC0xWiBNMTcgNyBoMSB2MSBoLTFaIE0xMSA4IGgxIHYxIGgtMVogTTE3IDggaDEgdjEgaC0xWiBNMTEgOSBoMSB2MSBoLTFaIE0xNyA5IGgxIHYxIGgtMVogTTExIDEwIGgxIHYxIGgtMVogTTE3IDEwIGgxIHYxIGgtMVogTTQgMTEgaDggdjEgaC04WiBNMTcgMTEgaDggdjEgaC04WiBNNCAxNyBoOCB2MSBoLThaIE0xMSAxOCBoMSB2MSBoLTFaIE0xMSAxOSBoMSB2MSBoLTFaIE0xMSAyMCBoMSB2MSBoLTFaIE0xMSAyMSBoMSB2MSBoLTFaIE0xMSAyMiBoMSB2MSBoLTFaIE0xMSAyMyBoMSB2MSBoLTFaIE0xMSAyNCBoMSB2MSBoLTFaICIgLz48cGF0aCBjbGFzcz0icXItMTIgIiBzdHJva2U9InRyYW5zcGFyZW50IiBmaWxsPSIjZmZmIiBmaWxsLW9wYWNpdHk9IjEiIGQ9Ik0xMyAxMCBoMSB2MSBoLTFaIE0xNSAxMCBoMSB2MSBoLTFaIE0xMCAxMyBoMSB2MSBoLTFaIE0xMCAxNSBoMSB2MSBoLTFaICIgLz48cGF0aCBjbGFzcz0icXItMTQgIiBzdHJva2U9InRyYW5zcGFyZW50IiBmaWxsPSIjZmZmIiBmaWxsLW9wYWNpdHk9IjEiIGQ9Ik0xMiA1IGgxIHYxIGgtMVogTTEyIDkgaDEgdjEgaC0xWiBNMTIgMTEgaDEgdjEgaC0xWiBNOCAxMiBoMiB2MSBoLTJaIE0xMSAxMiBoMSB2MSBoLTFaIE0xOCAxMiBoMiB2MSBoLTJaIE0yMyAxMiBoMSB2MSBoLTFaIE0xMiAxOCBoMSB2MSBoLTFaIE0xMiAxOSBoMSB2MSBoLTFaIE0xMiAyMCBoMSB2MSBoLTFaICIgLz48cGF0aCBjbGFzcz0icXItMTggIiBzdHJva2U9InRyYW5zcGFyZW50IiBmaWxsPSIjZmZmIiBmaWxsLW9wYWNpdHk9IjEiIGQ9Ik0wIDAgaDI5IHYxIGgtMjlaIE0wIDEgaDI5IHYxIGgtMjlaIE0wIDIgaDI5IHYxIGgtMjlaIE0wIDMgaDI5IHYxIGgtMjlaIE0wIDQgaDQgdjEgaC00WiBNMjUgNCBoNCB2MSBoLTRaIE0wIDUgaDQgdjEgaC00WiBNMjUgNSBoNCB2MSBoLTRaIE0wIDYgaDQgdjEgaC00WiBNMjUgNiBoNCB2MSBoLTRaIE0wIDcgaDQgdjEgaC00WiBNMjUgNyBoNCB2MSBoLTRaIE0wIDggaDQgdjEgaC00WiBNMjUgOCBoNCB2MSBoLTRaIE0wIDkgaDQgdjEgaC00WiBNMjUgOSBoNCB2MSBoLTRaIE0wIDEwIGg0IHYxIGgtNFogTTI1IDEwIGg0IHYxIGgtNFogTTAgMTEgaDQgdjEgaC00WiBNMjUgMTEgaDQgdjEgaC00WiBNMCAxMiBoNCB2MSBoLTRaIE0yNSAxMiBoNCB2MSBoLTRaIE0wIDEzIGg0IHYxIGgtNFogTTI1IDEzIGg0IHYxIGgtNFogTTAgMTQgaDQgdjEgaC00WiBNMjUgMTQgaDQgdjEgaC00WiBNMCAxNSBoNCB2MSBoLTRaIE0yNSAxNSBoNCB2MSBoLTRaIE0wIDE2IGg0IHYxIGgtNFogTTI1IDE2IGg0IHYxIGgtNFogTTAgMTcgaDQgdjEgaC00WiBNMjUgMTcgaDQgdjEgaC00WiBNMCAxOCBoNCB2MSBoLTRaIE0yNSAxOCBoNCB2MSBoLTRaIE0wIDE5IGg0IHYxIGgtNFogTTI1IDE5IGg0IHYxIGgtNFogTTAgMjAgaDQgdjEgaC00WiBNMjUgMjAgaDQgdjEgaC00WiBNMCAyMSBoNCB2MSBoLTRaIE0yNSAyMSBoNCB2MSBoLTRaIE0wIDIyIGg0IHYxIGgtNFogTTI1IDIyIGg0IHYxIGgtNFogTTAgMjMgaDQgdjEgaC00WiBNMjUgMjMgaDQgdjEgaC00WiBNMCAyNCBoNCB2MSBoLTRaIE0yNSAyNCBoNCB2MSBoLTRaIE0wIDI1IGgyOSB2MSBoLTI5WiBNMCAyNiBoMjkgdjEgaC0yOVogTTAgMjcgaDI5IHYxIGgtMjlaIE0wIDI4IGgyOSB2MSBoLTI5WiAiIC8+PHBhdGggY2xhc3M9InFyLTUxMiAiIHN0cm9rZT0idHJhbnNwYXJlbnQiIGZpbGw9IiMwMDAiIGZpbGwtb3BhY2l0eT0iMSIgZD0iTTEyIDE3IGgxIHYxIGgtMVogIiAvPjxwYXRoIGNsYXNzPSJxci0xMDI0ICIgc3Ryb2tlPSJ0cmFuc3BhcmVudCIgZmlsbD0iIzAwMCIgZmlsbC1vcGFjaXR5PSIxIiBkPSJNMTMgNCBoMSB2MSBoLTFaIE0xNiA0IGgxIHYxIGgtMVogTTEzIDUgaDEgdjEgaC0xWiBNMTYgNSBoMSB2MSBoLTFaIE0xNCA2IGgxIHYxIGgtMVogTTE2IDYgaDEgdjEgaC0xWiBNMTUgNyBoMSB2MSBoLTFaIE0xMyA4IGgyIHYxIGgtMlogTTEzIDExIGgyIHYxIGgtMlogTTE0IDEyIGgxIHYxIGgtMVogTTQgMTMgaDEgdjEgaC0xWiBNNyAxMyBoMyB2MSBoLTNaIE0xMSAxMyBoMSB2MSBoLTFaIE0xNCAxMyBoMSB2MSBoLTFaIE0xNiAxMyBoMSB2MSBoLTFaIE0xOSAxMyBoMSB2MSBoLTFaIE0yMSAxMyBoMiB2MSBoLTJaIE0yNCAxMyBoMSB2MSBoLTFaIE00IDE0IGgxIHYxIGgtMVogTTYgMTQgaDEgdjEgaC0xWiBNOCAxNCBoMiB2MSBoLTJaIE0xNCAxNCBoMSB2MSBoLTFaIE0xNiAxNCBoNSB2MSBoLTVaIE0yMyAxNCBoMiB2MSBoLTJaIE00IDE1IGgxIHYxIGgtMVogTTYgMTUgaDIgdjEgaC0yWiBNMTEgMTUgaDIgdjEgaC0yWiBNMTQgMTUgaDEgdjEgaC0xWiBNMTYgMTUgaDIgdjEgaC0yWiBNMjEgMTUgaDEgdjEgaC0xWiBNMjMgMTUgaDEgdjEgaC0xWiBNNSAxNiBoMiB2MSBoLTJaIE04IDE2IGgxIHYxIGgtMVogTTEzIDE2IGgzIHYxIGgtM1ogTTE3IDE2IGgxIHYxIGgtMVogTTIwIDE2IGgyIHYxIGgtMlogTTIzIDE2IGgxIHYxIGgtMVogTTE0IDE3IGgxIHYxIGgtMVogTTE3IDE3IGgxIHYxIGgtMVogTTE5IDE3IGgxIHYxIGgtMVogTTIxIDE3IGgxIHYxIGgtMVogTTIzIDE3IGgxIHYxIGgtMVogTTE0IDE4IGgxIHYxIGgtMVogTTE3IDE4IGgyIHYxIGgtMlogTTIwIDE4IGgzIHYxIGgtM1ogTTEzIDE5IGgxIHYxIGgtMVogTTE1IDE5IGg0IHYxIGgtNFogTTIxIDE5IGgyIHYxIGgtMlogTTEzIDIwIGgzIHYxIGgtM1ogTTE4IDIwIGgxIHYxIGgtMVogTTIyIDIwIGgzIHYxIGgtM1ogTTEzIDIxIGgxIHYxIGgtMVogTTE3IDIxIGgxIHYxIGgtMVogTTIwIDIxIGgyIHYxIGgtMlogTTIzIDIxIGgxIHYxIGgtMVogTTE0IDIyIGgyIHYxIGgtMlogTTE3IDIyIGgxIHYxIGgtMVogTTIwIDIyIGgxIHYxIGgtMVogTTIyIDIyIGgxIHYxIGgtMVogTTEzIDIzIGg0IHYxIGgtNFogTTE4IDIzIGgxIHYxIGgtMVogTTIwIDIzIGgyIHYxIGgtMlogTTI0IDIzIGgxIHYxIGgtMVogTTEzIDI0IGgxIHYxIGgtMVogTTE1IDI0IGgyIHYxIGgtMlogTTE5IDI0IGgxIHYxIGgtMVogIiAvPjxwYXRoIGNsYXNzPSJxci0xNTM2ICIgc3Ryb2tlPSJ0cmFuc3BhcmVudCIgZmlsbD0iIzAwMCIgZmlsbC1vcGFjaXR5PSIxIiBkPSJNNCA0IGg3IHYxIGgtN1ogTTE4IDQgaDcgdjEgaC03WiBNNCA1IGgxIHYxIGgtMVogTTEwIDUgaDEgdjEgaC0xWiBNMTggNSBoMSB2MSBoLTFaIE0yNCA1IGgxIHYxIGgtMVogTTQgNiBoMSB2MSBoLTFaIE0xMCA2IGgxIHYxIGgtMVogTTE4IDYgaDEgdjEgaC0xWiBNMjQgNiBoMSB2MSBoLTFaIE00IDcgaDEgdjEgaC0xWiBNMTAgNyBoMSB2MSBoLTFaIE0xOCA3IGgxIHYxIGgtMVogTTI0IDcgaDEgdjEgaC0xWiBNNCA4IGgxIHYxIGgtMVogTTEwIDggaDEgdjEgaC0xWiBNMTggOCBoMSB2MSBoLTFaIE0yNCA4IGgxIHYxIGgtMVogTTQgOSBoMSB2MSBoLTFaIE0xMCA5IGgxIHYxIGgtMVogTTE4IDkgaDEgdjEgaC0xWiBNMjQgOSBoMSB2MSBoLTFaIE00IDEwIGg3IHYxIGgtN1ogTTE4IDEwIGg3IHYxIGgtN1ogTTQgMTggaDcgdjEgaC03WiBNNCAxOSBoMSB2MSBoLTFaIE0xMCAxOSBoMSB2MSBoLTFaIE00IDIwIGgxIHYxIGgtMVogTTEwIDIwIGgxIHYxIGgtMVogTTQgMjEgaDEgdjEgaC0xWiBNMTAgMjEgaDEgdjEgaC0xWiBNNCAyMiBoMSB2MSBoLTFaIE0xMCAyMiBoMSB2MSBoLTFaIE00IDIzIGgxIHYxIGgtMVogTTEwIDIzIGgxIHYxIGgtMVogTTQgMjQgaDcgdjEgaC03WiAiIC8+PHBhdGggY2xhc3M9InFyLTMwNzIgIiBzdHJva2U9InRyYW5zcGFyZW50IiBmaWxsPSIjMDAwIiBmaWxsLW9wYWNpdHk9IjEiIGQ9Ik0xMiAxMCBoMSB2MSBoLTFaIE0xNCAxMCBoMSB2MSBoLTFaIE0xNiAxMCBoMSB2MSBoLTFaIE0xMCAxMiBoMSB2MSBoLTFaIE0xMCAxNCBoMSB2MSBoLTFaIE0xMCAxNiBoMSB2MSBoLTFaICIgLz48cGF0aCBjbGFzcz0icXItMzU4NCAiIHN0cm9rZT0idHJhbnNwYXJlbnQiIGZpbGw9IiMwMDAiIGZpbGwtb3BhY2l0eT0iMSIgZD0iTTEyIDQgaDEgdjEgaC0xWiBNMTIgNiBoMSB2MSBoLTFaIE0xMiA3IGgxIHYxIGgtMVogTTEyIDggaDEgdjEgaC0xWiBNNCAxMiBoNCB2MSBoLTRaIE0xMiAxMiBoMSB2MSBoLTFaIE0xNyAxMiBoMSB2MSBoLTFaIE0yMCAxMiBoMyB2MSBoLTNaIE0yNCAxMiBoMSB2MSBoLTFaIE0xMiAyMSBoMSB2MSBoLTFaIE0xMiAyMiBoMSB2MSBoLTFaIE0xMiAyMyBoMSB2MSBoLTFaIE0xMiAyNCBoMSB2MSBoLTFaICIgLz48cGF0aCBjbGFzcz0icXItNTYzMiAiIHN0cm9rZT0idHJhbnNwYXJlbnQiIGZpbGw9IiMwMDAiIGZpbGwtb3BhY2l0eT0iMSIgZD0iTTYgNiBoMyB2MSBoLTNaIE0yMCA2IGgzIHYxIGgtM1ogTTYgNyBoMyB2MSBoLTNaIE0yMCA3IGgzIHYxIGgtM1ogTTYgOCBoMyB2MSBoLTNaIE0yMCA4IGgzIHYxIGgtM1ogTTYgMjAgaDMgdjEgaC0zWiBNNiAyMSBoMyB2MSBoLTNaIE02IDIyIGgzIHYxIGgtM1ogIiAvPjwvc3ZnPg0K diff --git a/vendor/chillerlan/php-qrcode/tests/Output/samples/text b/vendor/chillerlan/php-qrcode/tests/Output/samples/text new file mode 100644 index 000000000..23a7098f9 --- /dev/null +++ b/vendor/chillerlan/php-qrcode/tests/Output/samples/text @@ -0,0 +1,29 @@ +⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕ +⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕ +⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕ +⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕ +⭕⭕⭕⭕🔴🔴🔴🔴🔴🔴🔴⭕🔴🔴⭕⭕🔴⭕🔴🔴🔴🔴🔴🔴🔴⭕⭕⭕⭕ +⭕⭕⭕⭕🔴⭕⭕⭕⭕⭕🔴⭕⭕🔴⭕⭕🔴⭕🔴⭕⭕⭕⭕⭕🔴⭕⭕⭕⭕ +⭕⭕⭕⭕🔴⭕🔴🔴🔴⭕🔴⭕🔴⭕🔴⭕🔴⭕🔴⭕🔴🔴🔴⭕🔴⭕⭕⭕⭕ +⭕⭕⭕⭕🔴⭕🔴🔴🔴⭕🔴⭕🔴⭕⭕🔴⭕⭕🔴⭕🔴🔴🔴⭕🔴⭕⭕⭕⭕ +⭕⭕⭕⭕🔴⭕🔴🔴🔴⭕🔴⭕🔴🔴🔴⭕⭕⭕🔴⭕🔴🔴🔴⭕🔴⭕⭕⭕⭕ +⭕⭕⭕⭕🔴⭕⭕⭕⭕⭕🔴⭕⭕⭕⭕⭕⭕⭕🔴⭕⭕⭕⭕⭕🔴⭕⭕⭕⭕ +⭕⭕⭕⭕🔴🔴🔴🔴🔴🔴🔴⭕🔴⭕🔴⭕🔴⭕🔴🔴🔴🔴🔴🔴🔴⭕⭕⭕⭕ +⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕🔴🔴⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕ +⭕⭕⭕⭕🔴🔴🔴🔴⭕⭕🔴⭕🔴⭕🔴⭕⭕🔴⭕⭕🔴🔴🔴⭕🔴⭕⭕⭕⭕ +⭕⭕⭕⭕🔴⭕⭕🔴🔴🔴⭕🔴⭕⭕🔴⭕🔴⭕⭕🔴⭕🔴🔴⭕🔴⭕⭕⭕⭕ +⭕⭕⭕⭕🔴⭕🔴⭕🔴🔴🔴⭕⭕⭕🔴⭕🔴🔴🔴🔴🔴⭕⭕🔴🔴⭕⭕⭕⭕ +⭕⭕⭕⭕🔴⭕🔴🔴⭕⭕⭕🔴🔴⭕🔴⭕🔴🔴⭕⭕⭕🔴⭕🔴⭕⭕⭕⭕⭕ +⭕⭕⭕⭕⭕🔴🔴⭕🔴⭕🔴⭕⭕🔴🔴🔴⭕🔴⭕⭕🔴🔴⭕🔴⭕⭕⭕⭕⭕ +⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕🔴⭕🔴⭕⭕🔴⭕🔴⭕🔴⭕🔴⭕⭕⭕⭕⭕ +⭕⭕⭕⭕🔴🔴🔴🔴🔴🔴🔴⭕⭕⭕🔴⭕⭕🔴🔴⭕🔴🔴🔴⭕⭕⭕⭕⭕⭕ +⭕⭕⭕⭕🔴⭕⭕⭕⭕⭕🔴⭕⭕🔴⭕🔴🔴🔴🔴⭕⭕🔴🔴⭕⭕⭕⭕⭕⭕ +⭕⭕⭕⭕🔴⭕🔴🔴🔴⭕🔴⭕⭕🔴🔴🔴⭕⭕🔴⭕⭕⭕🔴🔴🔴⭕⭕⭕⭕ +⭕⭕⭕⭕🔴⭕🔴🔴🔴⭕🔴⭕🔴🔴⭕⭕⭕🔴⭕⭕🔴🔴⭕🔴⭕⭕⭕⭕⭕ +⭕⭕⭕⭕🔴⭕🔴🔴🔴⭕🔴⭕🔴⭕🔴🔴⭕🔴⭕⭕🔴⭕🔴⭕⭕⭕⭕⭕⭕ +⭕⭕⭕⭕🔴⭕⭕⭕⭕⭕🔴⭕🔴🔴🔴🔴🔴⭕🔴⭕🔴🔴⭕⭕🔴⭕⭕⭕⭕ +⭕⭕⭕⭕🔴🔴🔴🔴🔴🔴🔴⭕🔴🔴⭕🔴🔴⭕⭕🔴⭕⭕⭕⭕⭕⭕⭕⭕⭕ +⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕ +⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕ +⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕ +⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕ diff --git a/vendor/chillerlan/php-qrcode/tests/QRCodeTest.php b/vendor/chillerlan/php-qrcode/tests/QRCodeTest.php index 8613c961f..523d7eb8c 100644..100755 --- a/vendor/chillerlan/php-qrcode/tests/QRCodeTest.php +++ b/vendor/chillerlan/php-qrcode/tests/QRCodeTest.php @@ -13,128 +13,139 @@ namespace chillerlan\QRCodeTest; use chillerlan\QRCode\{QROptions, QRCode}; -use chillerlan\QRCode\Data\{AlphaNum, Byte, Number, QRCodeDataException}; +use chillerlan\QRCode\Data\{AlphaNum, Byte, Kanji, Number, QRCodeDataException}; use chillerlan\QRCode\Output\QRCodeOutputException; -use chillerlan\QRCodeExamples\MyCustomOutput; +use PHPUnit\Framework\TestCase; use function random_bytes; -class QRCodeTest extends QRTestAbstract{ +/** + * Tests basic functions of the QRCode class + */ +class QRCodeTest extends TestCase{ - protected $FQCN = QRCode::class; + /** @internal */ + protected QRCode $qrcode; + /** @internal */ + protected QROptions $options; /** - * @var \chillerlan\QRCode\QRCode + * invoke test instances + * + * @internal */ - protected $qrcode; - protected function setUp():void{ - parent::setUp(); - - $this->qrcode = $this->reflection->newInstance(); + $this->qrcode = new QRCode; + $this->options = new QROptions; } - public function testIsNumber(){ - $this->assertTrue($this->qrcode->isNumber('0123456789')); - $this->assertFalse($this->qrcode->isNumber('ABC')); - } + /** + * isNumber() should pass on any number and fail on anything else + */ + public function testIsNumber():void{ + $this::assertTrue($this->qrcode->isNumber('0123456789')); - public function testIsAlphaNum(){ - $this->assertTrue($this->qrcode->isAlphaNum('ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 $%*+-./:')); - $this->assertFalse($this->qrcode->isAlphaNum('abc')); + $this::assertFalse($this->qrcode->isNumber('ABC123')); } - public function testIsKanji(){ - $this->assertTrue($this->qrcode->isKanji('茗荷')); - $this->assertFalse($this->qrcode->isKanji('Ã')); + /** + * isAlphaNum() should pass on the 45 defined characters and fail on anything else (e.g. lowercase) + */ + public function testIsAlphaNum():void{ + $this::assertTrue($this->qrcode->isAlphaNum('ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 $%*+-./:')); + + $this::assertFalse($this->qrcode->isAlphaNum('abc')); } - // coverage - - public function typeDataProvider(){ - return [ - 'png' => [QRCode::OUTPUT_IMAGE_PNG, 'data:image/png;base64,'], - 'gif' => [QRCode::OUTPUT_IMAGE_GIF, 'data:image/gif;base64,'], - 'jpg' => [QRCode::OUTPUT_IMAGE_JPG, 'data:image/jpg;base64,'], - 'svg' => [QRCode::OUTPUT_MARKUP_SVG, 'data:image/svg+xml;base64,'], - 'html' => [QRCode::OUTPUT_MARKUP_HTML, '<div><span style="background:'], - 'text' => [QRCode::OUTPUT_STRING_TEXT, '⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕⭕'.PHP_EOL], - 'json' => [QRCode::OUTPUT_STRING_JSON, '[[18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18],'], - ]; + /** + * isKanji() should pass on Kanji/SJIS characters and fail on everything else + */ + public function testIsKanji():void{ + $this::assertTrue($this->qrcode->isKanji('茗荷')); + + $this::assertFalse($this->qrcode->isKanji('Ã')); + $this::assertFalse($this->qrcode->isKanji('ABC')); + $this::assertFalse($this->qrcode->isKanji('123')); } /** - * @dataProvider typeDataProvider - * @param $type + * isByte() passses any binary string and only fails on empty strings */ - public function testRenderImage($type, $expected){ - $this->qrcode = $this->reflection->newInstanceArgs([new QROptions(['outputType' => $type])]); + public function testIsByte():void{ + $this::assertTrue($this->qrcode->isByte("\x01\x02\x03")); + $this::assertTrue($this->qrcode->isByte(' ')); // not empty! - $this->assertStringContainsString($expected, $this->qrcode->render('test')); + $this::assertFalse($this->qrcode->isByte('')); } - public function testInitDataInterfaceException(){ + /** + * tests if an exception is thrown when an invalid (built-in) output type is specified + */ + public function testInitDataInterfaceException():void{ $this->expectException(QRCodeOutputException::class); $this->expectExceptionMessage('invalid output type'); - (new QRCode(new QROptions(['outputType' => 'foo'])))->render('test'); + $this->options->outputType = 'foo'; + + (new QRCode($this->options))->render('test'); } - public function testGetMatrixException(){ + /** + * tests if an exception is thrown when trying to call getMatrix() without data (empty string, no data set) + */ + public function testGetMatrixException():void{ $this->expectException(QRCodeDataException::class); $this->expectExceptionMessage('QRCode::getMatrix() No data given.'); $this->qrcode->getMatrix(''); } - public function testTrim() { - $m1 = $this->qrcode->getMatrix('hello'); - $m2 = $this->qrcode->getMatrix('hello '); // added space - - $this->assertNotEquals($m1, $m2); - } - - public function testImageTransparencyBGDefault(){ - $this->qrcode = $this->reflection->newInstanceArgs([new QROptions(['imageTransparencyBG' => 'foo'])]); + /** + * test whether stings are trimmed (they are not) - i'm still torn on that (see isByte) + */ + public function testAvoidTrimming():void{ + $m1 = $this->qrcode->getMatrix('hello')->matrix(); + $m2 = $this->qrcode->getMatrix('hello ')->matrix(); // added space - $this->assertSame([255,255,255], $this->getProperty('options')->getValue($this->qrcode)->imageTransparencyBG); + $this::assertNotSame($m1, $m2); } - public function testCustomOutput(){ - - $options = new QROptions([ - 'version' => 5, - 'eccLevel' => QRCode::ECC_L, - 'outputType' => QRCode::OUTPUT_CUSTOM, - 'outputInterface' => MyCustomOutput::class, - ]); - - $expected = '000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111110111010000101111010000011111110000000010000010111000001101011000001010000010000000010111010101101011000001101011010111010000000010111010110100111110010100111010111010000000010111010000001101011000001101010111010000000010000010100111110010100111110010000010000000011111110101010101010101010101011111110000000000000000010010100111110010100000000000000000011001110000101111010000101111001011110000000000000000111010000101111010000111100010000000001011010100111110010100111110011001010000000010000101111101011000001101011110011110000000000011010100011000001101011000101110100000000011001100001001101011000001101010011010000000010110111110000001101011000001100110100000000010000100100010100111110010100001100100000000011111110111101111010000101111010100110000000011010000111010000101111010000111100100000000010101111111111110010100111110011001000000000010110001110101011000001101011110011010000000001001111100011000001101011000101110010000000011000100110001101011000001101010011100000000001000011001000001101011000001100110000000000011101001011010100111110010100001100000000000010111010001101111010000101111010100110000000011100000001010000101111010000111100000000000000001110110111110010100111110011001000000000000011001011101011000001101011110011100000000011111110101011000001101011001111110110000000000000000110001101011000001101000111100000000011111110001000001101011000011010110000000000010000010101010100111110010101000100100000000010111010111101111010000101111111100110000000010111010011010000101111010001101100010000000010111010000111110010100111100101101100000000010000010101101011000001101001100111100000000011111110101011000001101011000110010110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'; - - $this->assertSame($expected, $this->reflection->newInstanceArgs([$options])->render('test')); - } + /** + * tests if the data mode is overriden if QROptions::$dataModeOverride is set to a valid value + * + * @see https://github.com/chillerlan/php-qrcode/issues/39 + */ + public function testDataModeOverride():void{ - public function testDataModeOverride(){ - $this->qrcode = $this->reflection->newInstance(); + // no (or invalid) value set - auto detection + $this->options->dataModeOverride = 'foo'; + $this->qrcode = new QRCode; - $this->assertInstanceOf(Number::class, $this->qrcode->initDataInterface('123')); - $this->assertInstanceOf(AlphaNum::class, $this->qrcode->initDataInterface('ABC123')); - $this->assertInstanceOf(Byte::class, $this->qrcode->initDataInterface(random_bytes(32))); + $this::assertInstanceOf(Number::class, $this->qrcode->initDataInterface('123')); + $this::assertInstanceOf(AlphaNum::class, $this->qrcode->initDataInterface('ABC123')); + $this::assertInstanceOf(Byte::class, $this->qrcode->initDataInterface(random_bytes(32))); + $this::assertInstanceOf(Kanji::class, $this->qrcode->initDataInterface('茗荷')); - $this->qrcode = $this->reflection->newInstanceArgs([new QROptions(['dataMode' => 'Byte'])]); + // data mode set: force the given data mode + $this->options->dataModeOverride = 'Byte'; + $this->qrcode = new QRCode($this->options); - $this->assertInstanceOf(Byte::class, $this->qrcode->initDataInterface('123')); - $this->assertInstanceOf(Byte::class, $this->qrcode->initDataInterface('ABC123')); - $this->assertInstanceOf(Byte::class, $this->qrcode->initDataInterface(random_bytes(32))); + $this::assertInstanceOf(Byte::class, $this->qrcode->initDataInterface('123')); + $this::assertInstanceOf(Byte::class, $this->qrcode->initDataInterface('ABC123')); + $this::assertInstanceOf(Byte::class, $this->qrcode->initDataInterface(random_bytes(32))); + $this::assertInstanceOf(Byte::class, $this->qrcode->initDataInterface('茗荷')); } - public function testDataModeOverrideError(){ + /** + * tests if an exception is thrown when an invalid character occurs when forcing a data mode other than Byte + */ + public function testDataModeOverrideError():void{ $this->expectException(QRCodeDataException::class); $this->expectExceptionMessage('illegal char:'); - $this->qrcode = $this->reflection->newInstanceArgs([new QROptions(['dataMode' => 'AlphaNum'])]); + $this->options->dataModeOverride = 'AlphaNum'; - $this->qrcode->initDataInterface(random_bytes(32)); + (new QRCode($this->options))->initDataInterface(random_bytes(32)); } } diff --git a/vendor/chillerlan/php-qrcode/tests/QROptionsTest.php b/vendor/chillerlan/php-qrcode/tests/QROptionsTest.php index 41bf69ced..3a0260623 100644 --- a/vendor/chillerlan/php-qrcode/tests/QROptionsTest.php +++ b/vendor/chillerlan/php-qrcode/tests/QROptionsTest.php @@ -8,6 +8,8 @@ * @author smiley <[email protected]> * @copyright 2018 smiley * @license MIT + * + * @noinspection PhpUnusedLocalVariableInspection */ namespace chillerlan\QRCodeTest; @@ -15,66 +17,128 @@ namespace chillerlan\QRCodeTest; use chillerlan\QRCode\{QRCode, QRCodeException, QROptions}; use PHPUnit\Framework\TestCase; +/** + * QROptions test + */ class QROptionsTest extends TestCase{ /** - * @var \chillerlan\QRCode\QROptions + * @see testVersionClamp() + * @return int[][] + * @internal + */ + public function VersionProvider():array{ + return [ + 'values > 40 should be clamped to 40' => [42, 40], + 'values < 1 should be clamped to 1' => [-42, 1], + 'values in between shold not be touched' => [21, 21], + 'value -1 should be treated as is (default)' => [QRCode::VERSION_AUTO, -1], + ]; + } + + /** + * Tests the $version clamping + * + * @dataProvider VersionProvider + */ + public function testVersionClamp(int $version, int $expected):void{ + $o = new QROptions(['version' => $version]); + + $this::assertSame($expected, $o->version); + } + + /** + * @see testVersionMinMaxClamp() + * @return int[][] + * @internal + */ + public function VersionMinMaxProvider():array{ + return [ + 'normal clamp' => [5, 10, 5, 10], + 'exceeding values' => [-42, 42, 1, 40], + 'min > max' => [10, 5, 5, 10], + 'min > max, exceeding' => [42, -42, 1, 40], + ]; + } + + /** + * Tests the $versionMin/$versionMax clamping + * + * @dataProvider VersionMinMaxProvider */ - protected $options; + public function testVersionMinMaxClamp(int $versionMin, int $versionMax, int $expectedMin, int $expectedMax):void{ + $o = new QROptions(['versionMin' => $versionMin, 'versionMax' => $versionMax]); - public function testVersionClamp(){ - $this->assertSame(40, (new QROptions(['version' => 42]))->version); - $this->assertSame(1, (new QROptions(['version' => -42]))->version); - $this->assertSame(21, (new QROptions(['version' => 21]))->version); - $this->assertSame(QRCode::VERSION_AUTO, (new QROptions)->version); // QRCode::VERSION_AUTO = -1, default + $this::assertSame($expectedMin, $o->versionMin); + $this::assertSame($expectedMax, $o->versionMax); } - public function testVersionMinMaxClamp(){ - // normal clamp - $o = new QROptions(['versionMin' => 5, 'versionMax' => 10]); - $this->assertSame(5, $o->versionMin); - $this->assertSame(10, $o->versionMax); - - // exceeding values - $o = new QROptions(['versionMin' => -42, 'versionMax' => 42]); - $this->assertSame(1, $o->versionMin); - $this->assertSame(40, $o->versionMax); - - // min > max - $o = new QROptions(['versionMin' => 10, 'versionMax' => 5]); - $this->assertSame(5, $o->versionMin); - $this->assertSame(10, $o->versionMax); - - $o = new QROptions(['versionMin' => 42, 'versionMax' => -42]); - $this->assertSame(1, $o->versionMin); - $this->assertSame(40, $o->versionMax); + /** + * @see testMaskPatternClamp() + * @return int[][] + * @internal + */ + public function MaskPatternProvider():array{ + return [ + 'exceed max' => [42, 7,], + 'exceed min' => [-42, 0], + 'default (-1)' => [QRCode::MASK_PATTERN_AUTO, -1], + ]; } - public function testMaskPatternClamp(){ - $this->assertSame(7, (new QROptions(['maskPattern' => 42]))->maskPattern); - $this->assertSame(0, (new QROptions(['maskPattern' => -42]))->maskPattern); - $this->assertSame(QRCode::MASK_PATTERN_AUTO, (new QROptions)->maskPattern); // QRCode::MASK_PATTERN_AUTO = -1, default + /** + * Tests the $maskPattern clamping + * + * @dataProvider MaskPatternProvider + */ + public function testMaskPatternClamp(int $maskPattern, int $expected):void{ + $o = new QROptions(['maskPattern' => $maskPattern]); + + $this::assertSame($expected, $o->maskPattern); } - public function testInvalidEccLevelException(){ + /** + * Tests if an exception is thrown on an incorrect ECC level + */ + public function testInvalidEccLevelException():void{ $this->expectException(QRCodeException::class); $this->expectExceptionMessage('Invalid error correct level: 42'); - new QROptions(['eccLevel' => 42]); + $o = new QROptions(['eccLevel' => 42]); + } + + /** + * @see testClampRGBValues() + * @return int[][][] + * @internal + */ + public function RGBProvider():array{ + return [ + 'exceeding values' => [[-1, 0, 999], [0, 0 ,255]], + 'too few values' => [[1, 2], [255, 255, 255]], + 'too many values' => [[1, 2, 3, 4, 5], [1, 2, 3]], + ]; } - public function testClampRGBValues(){ - $o = new QROptions(['imageTransparencyBG' => [-1, 0, 999]]); + /** + * Tests clamping of the RGB values for $imageTransparencyBG + * + * @dataProvider RGBProvider + */ + public function testClampRGBValues(array $rgb, array $expected):void{ + $o = new QROptions(['imageTransparencyBG' => $rgb]); - $this->assertSame(0, $o->imageTransparencyBG[0]); - $this->assertSame(0, $o->imageTransparencyBG[1]); - $this->assertSame(255, $o->imageTransparencyBG[2]); + $this::assertSame($expected, $o->imageTransparencyBG); } - public function testInvalidRGBValueException(){ + /** + * Tests if an exception is thrown when a non-numeric RGB value was encoutered + */ + public function testInvalidRGBValueException():void{ $this->expectException(QRCodeException::class); $this->expectExceptionMessage('Invalid RGB value.'); - new QROptions(['imageTransparencyBG' => ['r', 'g', 'b']]); + $o = new QROptions(['imageTransparencyBG' => ['r', 'g', 'b']]); } + } diff --git a/vendor/chillerlan/php-qrcode/tests/QRTestAbstract.php b/vendor/chillerlan/php-qrcode/tests/QRTestAbstract.php deleted file mode 100644 index 7b9eb8049..000000000 --- a/vendor/chillerlan/php-qrcode/tests/QRTestAbstract.php +++ /dev/null @@ -1,72 +0,0 @@ -<?php -/** - * Class QRTestAbstract - * - * @filesource QRTestAbstract.php - * @created 17.11.2017 - * @package chillerlan\QRCodeTest - * @author Smiley <[email protected]> - * @copyright 2017 Smiley - * @license MIT - */ - -namespace chillerlan\QRCodeTest; - -use PHPUnit\Framework\TestCase; -use ReflectionClass, ReflectionMethod, ReflectionProperty; - -abstract class QRTestAbstract extends TestCase{ - - /** - * @var \ReflectionClass - */ - protected $reflection; - - /** - * @var string - */ - protected $FQCN; - - protected function setUp():void{ - $this->reflection = new ReflectionClass($this->FQCN); - } - - /** - * @param string $method - * - * @return \ReflectionMethod - */ - protected function getMethod(string $method):ReflectionMethod { - $method = $this->reflection->getMethod($method); - $method->setAccessible(true); - - return $method; - } - - /** - * @param string $property - * - * @return \ReflectionProperty - */ - protected function getProperty(string $property):ReflectionProperty{ - $property = $this->reflection->getProperty($property); - $property->setAccessible(true); - - return $property; - } - - /** - * @param $object - * @param string $property - * @param $value - * - * @return void - */ - protected function setProperty($object, string $property, $value){ - $property = $this->getProperty($property); - $property->setAccessible(true); - $property->setValue($object, $value); - } - - -} |