RMQRDecoderTest.cpp 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. /*
  2. * Copyright 2023 gitlost
  3. */
  4. // SPDX-License-Identifier: Apache-2.0
  5. #include "qrcode/QRDecoder.h"
  6. #include "BitMatrix.h"
  7. #include "BitMatrixIO.h"
  8. #include "DecoderResult.h"
  9. #include "ECI.h"
  10. #include "gtest/gtest.h"
  11. using namespace ZXing;
  12. using namespace ZXing::QRCode;
  13. TEST(RMQRDecoderTest, RMQRCodeR7x43M)
  14. {
  15. const auto bitMatrix = ParseBitMatrix(
  16. "XXXXXXX X X X X X X XXX X X X X X X X X XXX\n"
  17. "X X X XXX XXXXX XXX X X XX X X\n"
  18. "X XXX X X XXX X X X XXXX XXXX X X XXXXXXXX\n"
  19. "X XXX X XX XXXXX XXXXXX X X X X\n"
  20. "X XXX X XX XXX XXXXXXX X X XX X X X\n"
  21. "X X XXXXX XXX XXX XXXXX XXXXXX X X\n"
  22. "XXXXXXX X X X X X X XXX X X X X X X X XXXXX\n",
  23. 'X', false);
  24. const auto result = Decode(bitMatrix);
  25. EXPECT_TRUE(result.isValid());
  26. EXPECT_EQ(result.content().text(TextMode::Plain), "ABCDEFG");
  27. }
  28. TEST(RMQRDecoderTest, RMQRCodeR7x43MError6Bits)
  29. {
  30. const auto bitMatrix = ParseBitMatrix(
  31. "XXXXXXX X X X X X X XXX X X X X X X X X XXX\n"
  32. "X X X XXX XXXXX XXX X X XX X X\n"
  33. "X XXX X X XXX X X XXXX XXXX XX X XXXXXXXX\n" // 2
  34. "X XXX X XX XXXXX X XXXXXX X X X X\n" // 3
  35. "X XXX X XX XXX XXXXXXX X X XXX X X X\n" // 5
  36. "X X XXXXX XXX XXX XXXX X XXXXXX X X\n" // 6
  37. "XXXXXXX X X X X X X XXX X X X X X X X XXXXX\n",
  38. 'X', false);
  39. const auto result = Decode(bitMatrix);
  40. EXPECT_EQ(Error::Checksum, result.error());
  41. EXPECT_EQ(result.text(), L"LSZ2EFJ");
  42. EXPECT_EQ(result.content().text(TextMode::Plain), "LSZ2EFJ");
  43. }
  44. TEST(RMQRDecoderTest, RMQRCodeR7x139H)
  45. {
  46. const auto bitMatrix = ParseBitMatrix(
  47. "XXXXXXX X X X X X X X X X XXX X X X X X X X X X X X X XXX X X X X X X X X X X X X XXX X X X X X X X X X X X X XXX X X X X X X X X X X X XXX\n"
  48. "X X XX XXX X X X X X XX XX X X X XXX XX XXXX XXX XX XX XX X XX X X X XXX X XX XX XX X X XX X XX XXXX X X X\n"
  49. "X XXX X X XXXXX X XXXXX X X XXX XX X XXX X XX XXX XX X XXX X X XXXX X XXXXXXX X XX XXX X X X XXX X XXXXX\n"
  50. "X XXX X XXXX X XX X X XX XX X XX XX X XXX XX X XX X XX X X XX X X XXX X X X X X X X XX X XX XX X X X\n"
  51. "X XXX X XXXX XXXXX X X XXXXXX XX X XXXX X XXXX X XXX XXXX X XXXXXXX XXX XXXXXX X X XX X XXX X XXXXXXXXX X XXXX X X X X X\n"
  52. "X X X XX XX X X XX X X X XXXX X X X XX X XXX X X X X X XXX XX XXX X X XX XXXX XX X X X X XXXXX XXX XX X XX X\n"
  53. "XXXXXXX X X X X X X X X X XXX X X X X X X X X X X X X XXX X X X X X X X X X X X X XXX X X X X X X X X X X X X XXX X X X X X X X X X X XXXXX\n",
  54. 'X', false);
  55. const auto result = Decode(bitMatrix);
  56. EXPECT_TRUE(result.isValid());
  57. EXPECT_EQ(result.content().text(TextMode::Plain), "1234567890,ABCDEFGHIJKLMOPQRSTUVW");
  58. }
  59. TEST(RMQRDecoderTest, RMQRCodeR9x59H)
  60. {
  61. const auto bitMatrix = ParseBitMatrix(
  62. "XXXXXXX X X X X X XXX X X X X X X X X XXX X X X X X X X XXX\n"
  63. "X X X XXXXX XXX X X XXXXXXXX X X X X XXXX X X\n"
  64. "X XXX X XX XXX X XXX XXXX X XXXXXXX X XXXXX X X\n"
  65. "X XXX X XXXX X XX X XX XXXX XX XX X X X XXX X \n"
  66. "X XXX X X X XX XXXXXX X X XX X XX X X XXXX XXXXX\n"
  67. "X X X X X X XXX X X X XX X XXXX XX X X X X\n"
  68. "XXXXXXX XXXXX XXXXXX X XX XXX X XXXX X X X XX X X\n"
  69. " XXX XXXX XX XXX X XXXXXXX X XX XXX XX XX X\n"
  70. "XXX X X X X X X X XXX X X X X X X X X XXX X X X X X X XXXXX\n",
  71. 'X', false);
  72. const auto result = Decode(bitMatrix);
  73. EXPECT_TRUE(result.isValid());
  74. EXPECT_EQ(result.content().text(TextMode::Plain), "ABCDEFGHIJKLMN");
  75. }
  76. TEST(RMQRDecoderTest, RMQRCodeR9x77M)
  77. {
  78. const auto bitMatrix = ParseBitMatrix(
  79. "XXXXXXX X X X X X X X X XXX X X X X X X X X X X X XXX X X X X X X X X X X XXX\n"
  80. "X X XXX XX XXX XXX XXXX XXX XX X XXXXXXXXX X XXX XXXX X XXXX XX XXX X\n"
  81. "X XXX X X X X XXX X XXXX XX XX X XX XX XXX XXXX X X XX X X XX X\n"
  82. "X XXX X X X XXXXXX X XX XXXX X XXX X XX X XX XX XX X XXX X X XXX XX \n"
  83. "X XXX X XXXX X X XXXX XXXX XX XXX X XX XXXXXX X X XXX XX XXXXX\n"
  84. "X X X X XX XXX X X XX X X XX XXX X X X X X XX XXXXX X\n"
  85. "XXXXXXX X XX XX X XXXX X X X X X XX XXX X XX X XXX XX X X\n"
  86. " X XXXXX XX X XXXXXX XX XXXXX X XX XX XXXXX XXX X\n"
  87. "XXX X X X X X X X X X X XXX X X X X X X X X X X X XXX X X X X X X X X X XXXXX\n",
  88. 'X', false);
  89. const auto result = Decode(bitMatrix);
  90. EXPECT_TRUE(result.isValid());
  91. EXPECT_EQ(result.content().text(TextMode::Plain), "__ABCDEFGH__1234567890___ABCDEFGHIJK");
  92. }
  93. TEST(RMQRDecoderTest, RMQRCodeR11x27H)
  94. {
  95. const auto bitMatrix = ParseBitMatrix(
  96. "XXXXXXX X X X X X X X X XXX\n"
  97. "X X XX X X X X\n"
  98. "X XXX X X XX X X XX\n"
  99. "X XXX X XXXX XX X XXXXXX \n"
  100. "X XXX X X X XX XX XXX X\n"
  101. "X X XXX X XX XXXX X \n"
  102. "XXXXXXX X XX X XXXXX\n"
  103. " X X X X X\n"
  104. "XXXX X X X XX XXXXXX X X\n"
  105. "X XX XXXXXX XXX XXXX X X\n"
  106. "XXX X X X X X X X X X XXXXX\n",
  107. 'X', false);
  108. const auto result = Decode(bitMatrix);
  109. EXPECT_TRUE(result.isValid());
  110. EXPECT_EQ(result.content().text(TextMode::Plain), "ABCDEF");
  111. }
  112. TEST(RMQRDecoderTest, RMQRCodeR13x27M_ECI)
  113. {
  114. const auto bitMatrix = ParseBitMatrix(
  115. "XXXXXXX X X X X X X X X XXX\n"
  116. "X X XX XX XXX XX X\n"
  117. "X XXX X XX X XX XX XXX X\n"
  118. "X XXX X XX X XX X X XX \n"
  119. "X XXX X XXXXXXX X X XX\n"
  120. "X X XX X XXX XX XX \n"
  121. "XXXXXXX X X X X XXX\n"
  122. " XXX XX X XX XXX \n"
  123. "XXX XX XX X X XX XX XXXXX\n"
  124. " XXX X X X X X X\n"
  125. "X XX X X XX X XX X X X X\n"
  126. "X X X X X X X X X\n"
  127. "XXX X X X X X X X X X XXXXX\n",
  128. 'X', false);
  129. const auto result = Decode(bitMatrix);
  130. EXPECT_TRUE(result.isValid());
  131. EXPECT_EQ(result.content().text(TextMode::Plain), "AB貫12345AB");
  132. EXPECT_TRUE(result.content().hasECI);
  133. EXPECT_EQ(result.content().encodings[0].eci, ECI::Shift_JIS);
  134. EXPECT_EQ(result.content().symbology.toString(), "]Q1");
  135. }
  136. TEST(RMQRDecoderTest, RMQRCodeR15x59H_GS1)
  137. {
  138. const auto bitMatrix = ParseBitMatrix(
  139. "XXXXXXX X X X X X XXX X X X X X X X X XXX X X X X X X X XXX\n"
  140. "X X XXX XXX X XXXXX XX XXX X X X X X X XXX X\n"
  141. "X XXX X XXX XX X XXX XXX X X XXX XXXXX XX XXX XX\n"
  142. "X XXX X X X XX X X XXX X X X XXXXX XX XXX \n"
  143. "X XXX X XX XXX XX X X X XX XX XX XXX XXXX X XXXX\n"
  144. "X X X X X X X XXX XXX XXXX X XXX XX X X \n"
  145. "XXXXXXX X XXX XXXX X XX XXXX X X XX XXX XXXXX X\n"
  146. " X XXX X XXXXX X XX XXXX XX X \n"
  147. "XX XX X X X XXXXX XX X X XX XX X XX X X XX X\n"
  148. " XX XX X XXXXXX XXX XX X X XX XXX X X XXX \n"
  149. "X X XX XXXXXXXXXX XX X X XX XX XX X XXXX XX XXXXXX\n"
  150. " XX X XX X XXX X X X XXX X XXX X X XXX XXXX X\n"
  151. "XXXX X X XX XXX X X X XX XXXXX XX X XX XXX X X\n"
  152. "X X X XX XXX XXXXXXX XXX X XXX XX X X X XX X\n"
  153. "XXX X X X X X X X XXX X X X X X X X X XXX X X X X X X XXXXX\n",
  154. 'X', false);
  155. const auto result = Decode(bitMatrix);
  156. EXPECT_TRUE(result.isValid());
  157. EXPECT_TRUE(result.content().type() == ContentType::GS1);
  158. EXPECT_EQ(result.content().text(TextMode::HRI), "(01)09524000059109(21)12345678p901(10)1234567p(17)231120");
  159. }
  160. TEST(RMQRDecoderTest, RMQRCodeR17x99H)
  161. {
  162. const auto bitMatrix = ParseBitMatrix(
  163. "XXXXXXX X X X X X X X XXX X X X X X X X X X X X XXX X X X X X X X X X X X XXX X X X X X X X X X XXX\n"
  164. "X X X XXXXX XXX X X X XX X X XX XXXXX X XX X XX XXX X X XX X X XXX X X XX X X X\n"
  165. "X XXX X X X XXX XXX X XXX XXX X X XX XXXX X X X X XXX XXXXX X X XX X XX X X\n"
  166. "X XXX X XX X XX X X XX X XXXX X XXXXX X X XX X XXX XX X X X X XXXXXX X \n"
  167. "X XXX X X XX X X X X X X X X XXX XX XXXXXX X X XXX X XXXXXX X X X X X X X XX X\n"
  168. "X X XX X X XXXXX XX X XXX X XX X X XXX X XXX XXX X XXXX XX X X X XX XXXX \n"
  169. "XXXXXXX X XX X XX X X XXX XX X XXXX X X XXX X X XX X XXXX XX X X X XX X XXXX\n"
  170. " XX XX XX XX X XX X X X XXX XX X X XXX XXXX XX X X X X XX XX XXX \n"
  171. "XX X XXX X X XXXX XXX XXXXX XXX XXX X X X X X XXX X XX XX X X X X XX X XXX\n"
  172. " X XXXXX X X XXXXX X XX X XX XXXX X X XXXXX X XX X XX X XX X XX XX \n"
  173. "X XX XX X XX XXX XX XXXXXX X XXXXX XX XXXX X X X X XXXX XX X X XXXXXX XX X X\n"
  174. " XXX XX XXX XX XX X X X XX X X X X XX XXX XXXX X XX XXX X X X XXXX XXXXX X XXX \n"
  175. "X X XX X XX XX XX X X XX X X X XX XXXXXXXX X XX XX X X X X X XX X X XXXXXXXXXXX\n"
  176. " X X X XX X X X XX XXXX X XXX X XX X X X X X XXX XXXXX XX X X X XXXXX X X X\n"
  177. "XXXX XX XX X XXXX XXXX X XX X XX XX XX XXXX XXX X X XX XX X XXXX X XXX XX X XX X X\n"
  178. "X XXX XX XXX X X X XXX X XXX X XXXX XX X X XXXXX X XX X X X X X X X X XXXX XXXX X\n"
  179. "XXX X X X X X X X X X XXX X X X X X X X X X X X XXX X X X X X X X X X X X XXX X X X X X X X X XXXXX\n",
  180. 'X', false);
  181. const auto result = Decode(bitMatrix);
  182. EXPECT_TRUE(result.isValid());
  183. EXPECT_EQ(result.content().text(TextMode::Plain), "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890________________________");
  184. }