DMWriterTest.cpp 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. /*
  2. * Copyright 2017 Huy Cuong Nguyen
  3. * Copyright 2008 ZXing authors
  4. */
  5. // SPDX-License-Identifier: Apache-2.0
  6. #include "datamatrix/DMWriter.h"
  7. #include "BitMatrixIO.h"
  8. #include "gtest/gtest.h"
  9. using namespace ZXing;
  10. using namespace ZXing::DataMatrix;
  11. TEST(DMWriterTest, ImageWriter)
  12. {
  13. int bigEnough = 64;
  14. Writer writer;
  15. writer.setMargin(0).setShapeHint(SymbolShape::SQUARE);
  16. auto matrix = writer.encode(L"Hello Google", bigEnough, bigEnough);
  17. EXPECT_LE(matrix.width(), bigEnough);
  18. EXPECT_LE(matrix.height(), bigEnough);
  19. }
  20. TEST(DMWriterTest, Writer2)
  21. {
  22. int bigEnough = 14;
  23. Writer writer;
  24. writer.setMargin(0).setShapeHint(SymbolShape::SQUARE);
  25. auto matrix = writer.encode(L"Hello Me", bigEnough, bigEnough);
  26. EXPECT_EQ(matrix.width(), bigEnough);
  27. EXPECT_EQ(matrix.height(), bigEnough);
  28. }
  29. TEST(DMWriterTest, TooSmallSize)
  30. {
  31. // The DataMatrix will not fit in this size, so the matrix should come back bigger
  32. int tooSmall = 8;
  33. Writer writer;
  34. writer.setMargin(0);
  35. auto matrix = writer.encode(L"http://www.google.com/", tooSmall, tooSmall);
  36. EXPECT_GT(matrix.width(), tooSmall);
  37. EXPECT_GT(matrix.height(), tooSmall);
  38. }
  39. static void DoTest(const std::wstring& text, SymbolShape shape, const char* expected)
  40. {
  41. Writer writer;
  42. writer.setMargin(0).setShapeHint(shape);
  43. auto matrix = writer.encode(text, 0, 0);
  44. auto actual = ToString(matrix, 'X', ' ', true);
  45. EXPECT_EQ(expected, actual);
  46. }
  47. TEST(DMWriterTest, Small)
  48. {
  49. DoTest(L"0", SymbolShape::SQUARE,
  50. "X X X X X \n"
  51. "X X X X X X \n"
  52. "X X X X \n"
  53. "X X X \n"
  54. "X X X X X X \n"
  55. "X X X X X X X \n"
  56. "X X X \n"
  57. "X X X X X X X \n"
  58. "X X X \n"
  59. "X X X X X X X X X X \n" );
  60. }
  61. TEST(DMWriterTest, Rectangle)
  62. {
  63. DoTest(L"abcde", SymbolShape::RECTANGLE,
  64. "X X X X X X X X X \n"
  65. "X X X X X X X X X \n"
  66. "X X X X X X X X \n"
  67. "X X X X X X X X X X X \n"
  68. "X X X X X X X X X X X X X \n"
  69. "X X X X X X X X X X \n"
  70. "X X X X X X X X X X X X \n"
  71. "X X X X X X X X X X X X X X X X X X \n");
  72. }
  73. TEST(DMWriterTest, Large)
  74. {
  75. auto text = L"123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-"
  76. L"123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-"
  77. L"123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-";
  78. auto expected =
  79. "X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
  80. "X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
  81. "X X X X X X X X X X X X X X X X X X X X X X X X \n"
  82. "X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
  83. "X X X X X X X X X X X X X X X X X X X X \n"
  84. "X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
  85. "X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
  86. "X X X X X X X X X X X X X X X X X X X X X X X X X \n"
  87. "X X X X X X X X X X X X X X X X X X X X X X X X \n"
  88. "X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
  89. "X X X X X X X X X X X X X X X X X X X X \n"
  90. "X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
  91. "X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
  92. "X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
  93. "X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
  94. "X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
  95. "X X X X X X X X X X X X X X X X X X X X X X \n"
  96. "X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
  97. "X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
  98. "X X X X X X X X X X X X X X X X X X X X X X X X X \n"
  99. "X X X X X X X X X X X X X X X X X X X X X X \n"
  100. "X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
  101. "X X X X X X X X X X X X X X X X X X X X X X X \n"
  102. "X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
  103. "X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
  104. "X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
  105. "X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
  106. "X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
  107. "X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
  108. "X X X X X X X X X X X X X X X X X X X X X X X \n"
  109. "X X X X X X X X X X X X X X X X X X X X X X X X X \n"
  110. "X X X X X X X X X X X X X X X X X X X X X X X X \n"
  111. "X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
  112. "X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
  113. "X X X X X X X X X X X X X X X X X X X X \n"
  114. "X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
  115. "X X X X X X X X X X X X X X X X X X X X X X X \n"
  116. "X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
  117. "X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
  118. "X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
  119. "X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
  120. "X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
  121. "X X X X X X X X X X X X X X X X X X X X X X X X X \n"
  122. "X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
  123. "X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
  124. "X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
  125. "X X X X X X X X X X X X X X X X X X X \n"
  126. "X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
  127. "X X X X X X X X X X X X X X X X X X X \n"
  128. "X X X X X X X X X X X X X X X X X X X X X X X X \n"
  129. "X X X X X X X X X X X X X X X X X X X X X X X X X X \n"
  130. "X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X \n";
  131. DoTest(text, SymbolShape::SQUARE, expected);
  132. }