DataTest.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. <?php
  2. /**
  3. *
  4. * @filesource DataTest.php
  5. * @created 08.02.2016
  6. * @author Smiley <smiley@chillerlan.net>
  7. * @copyright 2015 Smiley
  8. * @license MIT
  9. */
  10. namespace chillerlan\QRCodeTest\Data;
  11. use chillerlan\QRCode\BitBuffer;
  12. use chillerlan\QRCode\QRConst;
  13. use chillerlan\QRCode\Data\AlphaNum;
  14. use chillerlan\QRCode\Data\Byte;
  15. use chillerlan\QRCode\Data\Kanji;
  16. use chillerlan\QRCode\Data\Number;
  17. use PHPUnit\Framework\TestCase;
  18. class DataTest extends TestCase{
  19. /**
  20. * @var \chillerlan\QRCode\BitBuffer
  21. */
  22. protected $bitBuffer;
  23. /**
  24. * @var \chillerlan\QRCode\Data\QRDataInterface
  25. */
  26. protected $module;
  27. public function bitProviderMode(){
  28. return [
  29. [QRConst::MODE_NUMBER, Number::class, '123456789'],
  30. [QRConst::MODE_NUMBER, Number::class, '1234567890'],
  31. [QRConst::MODE_NUMBER, Number::class, '12345678901'],
  32. [QRConst::MODE_ALPHANUM, AlphaNum::class, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 $%*+-./:'],
  33. [QRConst::MODE_BYTE, Byte::class, '#\\'],
  34. [QRConst::MODE_KANJI, Kanji::class, '茗荷'],
  35. ];
  36. }
  37. protected function setUp(){
  38. $this->bitBuffer = new BitBuffer;
  39. }
  40. /**
  41. * @dataProvider bitProviderMode
  42. */
  43. public function testMode($mode, $class, $data){
  44. $this->module = new $class($data);
  45. $this->assertEquals($mode, $this->module->mode);
  46. }
  47. public function bitProviderWrite(){
  48. return [
  49. [Number::class, '123456789', [30, 220, 140, 84]],
  50. [Number::class, '1234567890', [30, 220, 140, 84, 0]],
  51. [Number::class, '12345678901', [30, 220, 140, 84, 8]],
  52. [AlphaNum::class, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 $%*+-./:', [57, 168, 165, 66, 174, 22, 122, 230, 95, 172, 81, 149, 180, 38, 178, 220, 28, 58, 11, 196, 88, 231, 40, 102, 87, 60, 237, 94, 99, 227, 108]],
  53. [Byte::class, '#\\', [35, 92]],
  54. [Kanji::class, '茗荷', [236, 100, 74, 18, 238]],
  55. ];
  56. }
  57. /**
  58. * @dataProvider bitProviderWrite
  59. */
  60. public function testWrite($class, $data, $expected){
  61. $this->bitBuffer->clear();
  62. $this->module = new $class($data);
  63. $this->module->write($this->bitBuffer);
  64. $this->assertSame($expected, $this->bitBuffer->buffer);
  65. }
  66. /**
  67. * @expectedException \chillerlan\QRCode\Data\QRCodeDataException
  68. * @expectedExceptionMessage illegal char: 92
  69. */
  70. public function testAlphaNumCharException(){
  71. $this->bitBuffer->clear();
  72. $this->module = new AlphaNum('\\');
  73. $this->module->write($this->bitBuffer);
  74. }
  75. /**
  76. * @expectedException \chillerlan\QRCode\Data\QRCodeDataException
  77. * @expectedExceptionMessage illegal char at 7 (50051)
  78. */
  79. public function testKanjiCharExceptionA(){
  80. $this->bitBuffer->clear();
  81. $this->module = new Kanji('茗荷Ã');
  82. $this->module->write($this->bitBuffer);
  83. }
  84. /**
  85. * @expectedException \chillerlan\QRCode\Data\QRCodeDataException
  86. * @expectedExceptionMessage illegal char at 7
  87. */
  88. public function testKanjiCharExceptionB(){
  89. $this->bitBuffer->clear();
  90. $this->module = new Kanji('茗荷\\');
  91. $this->module->write($this->bitBuffer);
  92. }
  93. /**
  94. * @expectedException \chillerlan\QRCode\Data\QRCodeDataException
  95. * @expectedExceptionMessage illegal char: 92
  96. */
  97. public function testNumberCharException(){
  98. $this->bitBuffer->clear();
  99. $this->module = new Number('\\');
  100. $this->module->write($this->bitBuffer);
  101. }
  102. }