Rle8DecoderTest.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. <?php
  2. namespace Mike42\GfxPhp\Codec\Bmp;
  3. use Exception;
  4. use PHPUnit\Framework\TestCase;
  5. class Rle8DecoderTest extends TestCase
  6. {
  7. public function testDecodeEmpty()
  8. {
  9. $decoder = new Rle8Decoder();
  10. $result = $decoder -> decodeNumbers([], 0, 0);
  11. $this -> assertEquals([], $result);
  12. }
  13. public function testDecodeEmpty2()
  14. {
  15. $decoder = new Rle8Decoder();
  16. $result = $decoder -> decodeNumbers([
  17. 0, 1 // End of bitmap
  18. ], 0, 0);
  19. $this -> assertEquals([], $result);
  20. }
  21. public function testDecodeRun()
  22. {
  23. $decoder = new Rle8Decoder();
  24. $result = $decoder -> decodeNumbers([
  25. 3, 1, // 3 1's
  26. 0, 0, // Line break
  27. 3, 3, // 3 3's
  28. 0, 0, // Line break
  29. 3, 5, // 3 5's
  30. 0, 1 // End of bitmap
  31. ], 3, 3);
  32. $expected = [
  33. [1, 1, 1],
  34. [3, 3, 3],
  35. [5, 5, 5]
  36. ];
  37. $this -> assertEquals($expected, $result);
  38. }
  39. public function testRunTooWide()
  40. {
  41. $this -> expectException(Exception::class);
  42. $decoder = new Rle8Decoder();
  43. $result = $decoder -> decodeNumbers([
  44. 4, 1, // 4 1's (x-direction overflow)
  45. 0, 0, // Line break
  46. 3, 3, // 3 3's
  47. 0, 0, // Line break
  48. 3, 5, // 3 5's
  49. 0, 1 // End of bitmap
  50. ], 3, 3);
  51. $expected = [
  52. [1, 1, 1],
  53. [3, 3, 3],
  54. [5, 5, 5]
  55. ];
  56. $this -> assertEquals($expected, $result);
  57. }
  58. public function testRunTooTall()
  59. {
  60. $this -> expectException(Exception::class);
  61. $decoder = new Rle8Decoder();
  62. $result = $decoder -> decodeNumbers([
  63. 3, 1, // 3 1's
  64. 0, 0, // Line break
  65. 3, 3, // 3 3's
  66. 0, 0, // Line break
  67. 3, 5, // 3 5's
  68. 0, 0, // Line break
  69. 3, 6, // 3 6's (y-direction overflow)
  70. 0, 1 // End of bitmap
  71. ], 3, 3);
  72. $expected = [
  73. [1, 1, 1],
  74. [3, 3, 3],
  75. [5, 5, 5]
  76. ];
  77. $this -> assertEquals($expected, $result);
  78. }
  79. public function testDeltaDiagonal()
  80. {
  81. $decoder = new Rle8Decoder();
  82. $result = $decoder -> decodeNumbers([
  83. 0, 2, // Jump..
  84. 2, 2, // .. diagonally
  85. 1, 1, // Print 1
  86. 0, 1 // End of bitmap
  87. ], 3, 3);
  88. $expected = [
  89. [0, 0, 0],
  90. [0, 0, 0],
  91. [0, 0, 1]
  92. ];
  93. $this -> assertEquals($expected, $result);
  94. }
  95. public function testDeltaRight()
  96. {
  97. $decoder = new Rle8Decoder();
  98. $result = $decoder -> decodeNumbers([
  99. 0, 2, // Jump..
  100. 2, 0, // .. right
  101. 1, 1, // Print 1
  102. 0, 1 // End of bitmap
  103. ], 3, 3);
  104. $expected = [
  105. [0, 0, 1],
  106. [0, 0, 0],
  107. [0, 0, 0]
  108. ];
  109. $this -> assertEquals($expected, $result);
  110. }
  111. public function testDeltaDown()
  112. {
  113. $decoder = new Rle8Decoder();
  114. $result = $decoder -> decodeNumbers([
  115. 0, 2, // Jump..
  116. 0, 2, // .. down
  117. 1, 1, // Print 1
  118. 0, 1 // End of bitmap
  119. ], 3, 3);
  120. $expected = [
  121. [0, 0, 0],
  122. [0, 0, 0],
  123. [1, 0, 0]
  124. ];
  125. $this -> assertEquals($expected, $result);
  126. }
  127. public function testAbsolute()
  128. {
  129. $decoder = new Rle8Decoder();
  130. $result = $decoder -> decodeNumbers([
  131. 0, 3, 1, 2, 3, 0, // Absolute run of 3 pixels + 1 pixel of padding
  132. 0, 0, // Line break
  133. 0, 3, 4, 5, 6, 0, // 3 pixels
  134. 0, 0, // Line break
  135. 0, 3, 7, 8, 9, 0, // 3 pixels
  136. 0, 0, // Line break
  137. 0, 1 // End of bitmap
  138. ], 3, 3);
  139. $expected = [
  140. [1, 2, 3],
  141. [4, 5, 6],
  142. [7, 8, 9]
  143. ];
  144. $this -> assertEquals($expected, $result);
  145. }
  146. }