QRWriterTest.cpp 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. /*
  2. * Copyright 2017 Huy Cuong Nguyen
  3. * Copyright 2008 ZXing authors
  4. */
  5. // SPDX-License-Identifier: Apache-2.0
  6. #include "BitMatrixIO.h"
  7. #include "qrcode/QRWriter.h"
  8. #include "qrcode/QRErrorCorrectionLevel.h"
  9. #include "gtest/gtest.h"
  10. #include <stdexcept>
  11. using namespace ZXing;
  12. using namespace ZXing::QRCode;
  13. namespace {
  14. void DoTest(const std::wstring& contents, ErrorCorrectionLevel ecLevel, int resolution, const char* expected) {
  15. Writer writer;
  16. writer.setErrorCorrectionLevel(ecLevel);
  17. auto matrix = writer.encode(contents, resolution, resolution);
  18. auto actual = ToString(matrix, 'X', ' ', true);
  19. EXPECT_EQ(matrix.width(), resolution);
  20. EXPECT_EQ(matrix.height(), resolution);
  21. EXPECT_EQ(actual, expected);
  22. }
  23. }
  24. TEST(QRWriterTest, OverSize)
  25. {
  26. // The QR should be multiplied up to fit, with extra padding if necessary
  27. int bigEnough = 256;
  28. Writer writer;
  29. BitMatrix matrix = writer.encode(L"http://www.google.com/", bigEnough, bigEnough);
  30. EXPECT_EQ(matrix.width(), bigEnough);
  31. EXPECT_EQ(matrix.height(), bigEnough);
  32. // The QR will not fit in this size, so the matrix should come back bigger
  33. int tooSmall = 20;
  34. matrix = writer.encode(L"http://www.google.com/", tooSmall, tooSmall);
  35. EXPECT_GT(matrix.width(), tooSmall);
  36. EXPECT_GT(matrix.height(), tooSmall);
  37. // We should also be able to handle non-square requests by padding them
  38. int strangeWidth = 500;
  39. int strangeHeight = 100;
  40. matrix = writer.encode(L"http://www.google.com/", strangeWidth, strangeHeight);
  41. EXPECT_EQ(matrix.width(), strangeWidth);
  42. EXPECT_EQ(matrix.height(), strangeHeight);
  43. int overflowSize = 0x1000000;
  44. EXPECT_THROW(writer.encode(L"http://www.google.com/", overflowSize, overflowSize), std::invalid_argument);
  45. }
  46. TEST(QRWriterTest, RegressionTest)
  47. {
  48. DoTest(L"http://www.google.com/", ErrorCorrectionLevel::Medium, 99,
  49. " \n"
  50. " \n"
  51. " \n"
  52. " \n"
  53. " \n"
  54. " \n"
  55. " \n"
  56. " \n"
  57. " \n"
  58. " \n"
  59. " \n"
  60. " \n"
  61. " 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 X X \n"
  62. " 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 X X \n"
  63. " 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 X X \n"
  64. " 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"
  65. " 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"
  66. " 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"
  67. " 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"
  68. " 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"
  69. " 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"
  70. " 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"
  71. " 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"
  72. " 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"
  73. " 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"
  74. " 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"
  75. " 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"
  76. " 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"
  77. " 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"
  78. " 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"
  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 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"
  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 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"
  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 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"
  82. " 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 \n"
  84. " 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 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 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 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 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 X X 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 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 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 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 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 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 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 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 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 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 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 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 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 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 \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 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 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 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 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 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 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 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 \n"
  113. " X 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 \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 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 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 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 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 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 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 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"
  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 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 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 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 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"
  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 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 X X X X 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 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 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 \n"
  131. " 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"
  132. " 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"
  133. " 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"
  134. " 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"
  135. " 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"
  136. " \n"
  137. " \n"
  138. " \n"
  139. " \n"
  140. " \n"
  141. " \n"
  142. " \n"
  143. " \n"
  144. " \n"
  145. " \n"
  146. " \n"
  147. " \n"
  148. );
  149. }