PNGReaderTests.cpp 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. #include "tests/PNGReaderTests.h"
  2. #include "tests/Test.h"
  3. #include "images/PNGReader.h"
  4. #include "utils/StringBuffer.h"
  5. template<int N>
  6. static void testRead(int correct, Test& test, PNGReader& png, const char* text) {
  7. Color<N>* buffer = new Color<N>[png.getBufferSize()];
  8. test.checkEqual(N != correct, png.readData(buffer), text);
  9. delete[] buffer;
  10. }
  11. static void testFullRead(int correct, Test& test, PNGReader& png, const char* text) {
  12. testRead<1>(correct, test, png, text);
  13. testRead<2>(correct, test, png, text);
  14. testRead<3>(correct, test, png, text);
  15. testRead<4>(correct, test, png, text);
  16. }
  17. static void testReadRGB8(Test& test, const char* path) {
  18. PNGReader png(StringBuffer<200>(path).append("rgb8.png"));
  19. if(png.hasError()) {
  20. test.checkEqual(false, true, "read rgb8 error");
  21. return;
  22. }
  23. test.checkEqual(32, png.getWidth(), "rgb8 width");
  24. test.checkEqual(64, png.getHeight(), "rgb8 height");
  25. test.checkEqual(3, png.getChannels(), "rgb8 channels");
  26. testFullRead(3, test, png, "rgb8 read");
  27. }
  28. static void testReadRGB16(Test& test, const char* path) {
  29. PNGReader png(StringBuffer<200>(path).append("rgb16.png"));
  30. if(png.hasError()) {
  31. test.checkEqual(false, true, "read rgb16 error");
  32. return;
  33. }
  34. test.checkEqual(32, png.getWidth(), "rgb16 width");
  35. test.checkEqual(64, png.getHeight(), "rgb16 height");
  36. test.checkEqual(3, png.getChannels(), "rgb16 channels");
  37. test.checkEqual(32 * 64, png.getBufferSize(), "rgb16 channels");
  38. testFullRead(3, test, png, "rgb16 read");
  39. }
  40. static void testReadRGBA8(Test& test, const char* path) {
  41. PNGReader png(StringBuffer<200>(path).append("rgba8.png"));
  42. if(png.hasError()) {
  43. test.checkEqual(false, true, "read rgba8 error");
  44. return;
  45. }
  46. test.checkEqual(32, png.getWidth(), "rgba8 width");
  47. test.checkEqual(64, png.getHeight(), "rgba8 height");
  48. test.checkEqual(4, png.getChannels(), "rgba8 channels");
  49. test.checkEqual(32 * 64, png.getBufferSize(), "rgba8 channels");
  50. testFullRead(4, test, png, "rgba8 read");
  51. }
  52. static void testReadRGBA16(Test& test, const char* path) {
  53. PNGReader png(StringBuffer<200>(path).append("rgba16.png"));
  54. if(png.hasError()) {
  55. test.checkEqual(false, true, "read rgba16 error");
  56. return;
  57. }
  58. test.checkEqual(32, png.getWidth(), "rgba16 width");
  59. test.checkEqual(64, png.getHeight(), "rgba16 height");
  60. test.checkEqual(4, png.getChannels(), "rgba16 channels");
  61. test.checkEqual(32 * 64, png.getBufferSize(), "rgba16 channels");
  62. testFullRead(4, test, png, "rgba16 read");
  63. }
  64. static void testReadGray8(Test& test, const char* path) {
  65. PNGReader png(StringBuffer<200>(path).append("gray8.png"));
  66. if(png.hasError()) {
  67. test.checkEqual(false, true, "read gray8 error");
  68. return;
  69. }
  70. test.checkEqual(32, png.getWidth(), "gray8 width");
  71. test.checkEqual(64, png.getHeight(), "gray8 height");
  72. test.checkEqual(1, png.getChannels(), "gray8 channels");
  73. test.checkEqual(32 * 64, png.getBufferSize(), "gray8 channels");
  74. testFullRead(1, test, png, "gray8 read");
  75. }
  76. static void testReadGray16(Test& test, const char* path) {
  77. PNGReader png(StringBuffer<200>(path).append("gray16.png"));
  78. if(png.hasError()) {
  79. test.checkEqual(false, true, "read gray16 error");
  80. return;
  81. }
  82. test.checkEqual(32, png.getWidth(), "gray16 width");
  83. test.checkEqual(64, png.getHeight(), "gray16 height");
  84. test.checkEqual(1, png.getChannels(), "gray16 channels");
  85. test.checkEqual(32 * 64, png.getBufferSize(), "gray16 channels");
  86. testFullRead(1, test, png, "gray16 read");
  87. }
  88. static void testReadGrayA8(Test& test, const char* path) {
  89. PNGReader png(StringBuffer<200>(path).append("graya8.png"));
  90. if(png.hasError()) {
  91. test.checkEqual(false, true, "read graya8 error");
  92. return;
  93. }
  94. test.checkEqual(32, png.getWidth(), "graya8 width");
  95. test.checkEqual(64, png.getHeight(), "graya8 height");
  96. test.checkEqual(2, png.getChannels(), "graya8 channels");
  97. test.checkEqual(32 * 64, png.getBufferSize(), "graya8 channels");
  98. testFullRead(2, test, png, "graya8 read");
  99. }
  100. static void testReadGrayA16(Test& test, const char* path) {
  101. PNGReader png(StringBuffer<200>(path).append("graya16.png"));
  102. if(png.hasError()) {
  103. test.checkEqual(false, true, "read graya16 error");
  104. return;
  105. }
  106. test.checkEqual(32, png.getWidth(), "graya16 width");
  107. test.checkEqual(64, png.getHeight(), "graya16 height");
  108. test.checkEqual(2, png.getChannels(), "graya16 channels");
  109. test.checkEqual(32 * 64, png.getBufferSize(), "graya16 channels");
  110. testFullRead(2, test, png, "graya16 read");
  111. }
  112. void PNGReaderTests::test(const char* path) {
  113. Test test("PNGReader");
  114. testReadRGB8(test, path);
  115. testReadRGB16(test, path);
  116. testReadRGBA8(test, path);
  117. testReadRGBA16(test, path);
  118. testReadGray8(test, path);
  119. testReadGray16(test, path);
  120. testReadGrayA8(test, path);
  121. testReadGrayA16(test, path);
  122. test.finalize();
  123. }