QrCodeTest.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. <?php
  2. /*
  3. * (c) Jeroen van den Enden <info@endroid.nl>
  4. *
  5. * This source file is subject to the MIT license that is bundled
  6. * with this source code in the file LICENSE.
  7. */
  8. namespace Endroid\QrCode\Tests;
  9. use Endroid\QrCode\Factory\QrCodeFactory;
  10. use Endroid\QrCode\QrCode;
  11. use PHPUnit\Framework\TestCase;
  12. use Zxing\QrReader;
  13. class QrCodeTest extends TestCase
  14. {
  15. public function testReadable(): void
  16. {
  17. $messages = [
  18. 'Tiny',
  19. 'This one has spaces',
  20. 'd2llMS9uU01BVmlvalM2YU9BUFBPTTdQMmJabHpqdndt',
  21. 'http://this.is.an/url?with=query&string=attached',
  22. '11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111',
  23. '{"i":"serialized.data","v":1,"t":1,"d":"4AEPc9XuIQ0OjsZoSRWp9DRWlN6UyDvuMlyOYy8XjOw="}',
  24. 'Spëci&al ch@ract3rs',
  25. '有限公司',
  26. ];
  27. $qrCode = new QrCode();
  28. $qrCode->setSize(300);
  29. foreach ($messages as $message) {
  30. $qrCode->setText($message);
  31. $pngData = $qrCode->writeString();
  32. $this->assertTrue(is_string($pngData));
  33. $reader = new QrReader($pngData, QrReader::SOURCE_TYPE_BLOB);
  34. $this->assertEquals($message, $reader->text());
  35. }
  36. }
  37. public function testFactory(): void
  38. {
  39. $qrCodeFactory = new QrCodeFactory();
  40. $qrCode = $qrCodeFactory->create('QR Code', [
  41. 'writer' => 'png',
  42. 'size' => 300,
  43. 'margin' => 10,
  44. ]);
  45. $pngData = $qrCode->writeString();
  46. $this->assertTrue(is_string($pngData));
  47. $reader = new QrReader($pngData, QrReader::SOURCE_TYPE_BLOB);
  48. $this->assertEquals('QR Code', $reader->text());
  49. }
  50. public function testWriteQrCode(): void
  51. {
  52. $qrCode = new QrCode('QR Code');
  53. $qrCode->setWriterByName('binary');
  54. $binData = $qrCode->writeString();
  55. $this->assertTrue(is_string($binData));
  56. $qrCode->setWriterByName('debug');
  57. $debugData = $qrCode->writeString();
  58. $this->assertTrue(is_string($debugData));
  59. $qrCode->setWriterByName('eps');
  60. $epsData = $qrCode->writeString();
  61. $this->assertTrue(is_string($epsData));
  62. $qrCode->setWriterByName('png');
  63. $pngData = $qrCode->writeString();
  64. $this->assertTrue(is_string($pngData));
  65. $pngDataUriData = $qrCode->writeDataUri();
  66. $this->assertTrue(0 === strpos($pngDataUriData, 'data:image/png;base64'));
  67. $qrCode->setWriterByName('svg');
  68. $svgData = $qrCode->writeString();
  69. $this->assertTrue(is_string($svgData));
  70. $svgDataUriData = $qrCode->writeDataUri();
  71. $this->assertTrue(0 === strpos($svgDataUriData, 'data:image/svg+xml;base64'));
  72. }
  73. public function testSetSize(): void
  74. {
  75. $size = 400;
  76. $margin = 10;
  77. $qrCode = new QrCode('QR Code');
  78. $qrCode->setSize($size);
  79. $qrCode->setMargin($margin);
  80. $pngData = $qrCode->writeString();
  81. $image = imagecreatefromstring($pngData);
  82. $this->assertTrue(imagesx($image) === $size + 2 * $margin);
  83. $this->assertTrue(imagesy($image) === $size + 2 * $margin);
  84. }
  85. public function testSetLabel(): void
  86. {
  87. $qrCode = new QrCode('QR Code');
  88. $qrCode->setSize(300);
  89. $qrCode->setLabel('Scan the code', 15);
  90. $pngData = $qrCode->writeString();
  91. $this->assertTrue(is_string($pngData));
  92. $reader = new QrReader($pngData, QrReader::SOURCE_TYPE_BLOB);
  93. $this->assertEquals('QR Code', $reader->text());
  94. }
  95. public function testSetLogo(): void
  96. {
  97. $qrCode = new QrCode('QR Code');
  98. $qrCode->setSize(500);
  99. $qrCode->setLogoPath(__DIR__.'/../assets/images/symfony.png');
  100. $qrCode->setLogoWidth(100);
  101. $qrCode->setValidateResult(true);
  102. $pngData = $qrCode->writeString();
  103. $this->assertTrue(is_string($pngData));
  104. }
  105. public function testWriteFile(): void
  106. {
  107. $filename = __DIR__.'/output/qr-code.png';
  108. $qrCode = new QrCode('QR Code');
  109. $qrCode->writeFile($filename);
  110. $image = imagecreatefromstring(file_get_contents($filename));
  111. $this->assertTrue(is_resource($image));
  112. }
  113. }