DMEncodeDecodeTest.cpp 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. /*
  2. * Copyright 2017 Axel Waggershauser
  3. * Copyright 2013 ZXing authors
  4. */
  5. // SPDX-License-Identifier: Apache-2.0
  6. #include "BitMatrixIO.h"
  7. #include "DecoderResult.h"
  8. #include "datamatrix/DMDecoder.h"
  9. #include "datamatrix/DMWriter.h"
  10. #include "gtest/gtest.h"
  11. using namespace ZXing;
  12. namespace {
  13. void TestEncodeDecode(const std::wstring& data, DataMatrix::SymbolShape shape = DataMatrix::SymbolShape::NONE)
  14. {
  15. BitMatrix matrix = DataMatrix::Writer().setMargin(0).setShapeHint(shape).encode(data, 0, 0);
  16. ASSERT_EQ(matrix.empty(), false);
  17. DecoderResult res = DataMatrix::Decode(matrix);
  18. #ifdef PRINT_DEBUG
  19. if (!res.isValid() || data != res.text())
  20. SaveAsPBM(matrix, "failed-datamatrix.pbm", 4);
  21. #endif
  22. ASSERT_EQ(res.isValid(), true) << "text size: " << data.size() << ", code size: " << matrix.height() << "x"
  23. << matrix.width() << ", shape: " << static_cast<int>(shape) << "\n"
  24. << (matrix.width() < 80 ? ToString(matrix) : std::string());
  25. EXPECT_EQ(data, res.text()) << "text size: " << data.size() << ", code size: " << matrix.height() << "x"
  26. << matrix.width() << ", shape: " << static_cast<int>(shape) << "\n"
  27. << (matrix.width() < 80 ? ToString(matrix) : std::string());
  28. }
  29. }
  30. TEST(DMEncodeDecodeTest, EncodeDecodeSquare)
  31. {
  32. std::wstring text[] = {
  33. L"Abc123!",
  34. L"Lorem ipsum. http://test/",
  35. L"AAAANAAAANAAAANAAAANAAAANAAAANAAAANAAAANAAAANAAAAN",
  36. L"http://test/~!@#*^%&)__ ;:'\"[]{}\\|-+-=`1029384",
  37. L"http://test/~!@#*^%&)__ ;:'\"[]{}\\|-+-=`1029384756<>/?abc"
  38. "Four score and seven our forefathers brought forth",
  39. L"In ut magna vel mauris malesuada dictum. Nulla ullamcorper metus quis diam"
  40. " cursus facilisis. Sed mollis quam id justo rutrum sagittis. Donec laoreet rutrum"
  41. " est, nec convallis mauris condimentum sit amet. Phasellus gravida, justo et congue"
  42. " auctor, nisi ipsum viverra erat, eget hendrerit felis turpis nec lorem. Nulla"
  43. " ultrices, elit pellentesque aliquet laoreet, justo erat pulvinar nisi, id"
  44. " elementum sapien dolor et diam.",
  45. L"In ut magna vel mauris malesuada dictum. Nulla ullamcorper metus quis diam"
  46. " cursus facilisis. Sed mollis quam id justo rutrum sagittis. Donec laoreet rutrum"
  47. " est, nec convallis mauris condimentum sit amet. Phasellus gravida, justo et congue"
  48. " auctor, nisi ipsum viverra erat, eget hendrerit felis turpis nec lorem. Nulla"
  49. " ultrices, elit pellentesque aliquet laoreet, justo erat pulvinar nisi, id"
  50. " elementum sapien dolor et diam. Donec ac nunc sodales elit placerat eleifend."
  51. " Sed ornare luctus ornare. Vestibulum vehicula, massa at pharetra fringilla, risus"
  52. " justo faucibus erat, nec porttitor nibh tellus sed est. Ut justo diam, lobortis eu"
  53. " tristique ac, p.In ut magna vel mauris malesuada dictum. Nulla ullamcorper metus"
  54. " quis diam cursus facilisis. Sed mollis quam id justo rutrum sagittis. Donec"
  55. " laoreet rutrum est, nec convallis mauris condimentum sit amet. Phasellus gravida,"
  56. " justo et congue auctor, nisi ipsum viverra erat, eget hendrerit felis turpis nec"
  57. " lorem. Nulla ultrices, elit pellentesque aliquet laoreet, justo erat pulvinar"
  58. " nisi, id elementum sapien dolor et diam. Donec ac nunc sodales elit placerat"
  59. " eleifend. Sed ornare luctus ornare. Vestibulum vehicula, massa at pharetra"
  60. " fringilla, risus justo faucibus erat, nec porttitor nibh tellus sed est. Ut justo"
  61. " diam, lobortis eu tristique ac, p. In ut magna vel mauris malesuada dictum. Nulla"
  62. " ullamcorper metus quis diam cursus facilisis. Sed mollis quam id justo rutrum"
  63. " sagittis. Donec laoreet rutrum est, nec convallis mauris condimentum sit amet."
  64. " Phasellus gravida, justo et congue auctor, nisi ipsum viverra erat, eget hendrerit"
  65. " felis turpis nec lorem. Nulla ultrices, elit pellentesque aliquet laoreet, justo"
  66. " erat pulvinar nisi, id elementum sapien dolor et diam.",
  67. };
  68. for (auto& data : text)
  69. TestEncodeDecode(data, DataMatrix::SymbolShape::SQUARE);
  70. }
  71. TEST(DMEncodeDecodeTest, EncodeDecodeRectangle)
  72. {
  73. std::wstring text[] = {
  74. L"Abc123!",
  75. L"Lorem ipsum. http://test/",
  76. L"3i0QnD^RcZO[\\#!]1,9zIJ{1z3qrvsq",
  77. L"AAAANAAAANAAAANAAAANAAAANAAAANAAAANAAAANAAAANAAAAN",
  78. L"http://test/~!@#*^%&)__ ;:'\"[]{}\\|-+-=`1029384",
  79. L"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",
  80. };
  81. for (auto& data : text)
  82. for (size_t len = 1; len <= data.size(); ++len)
  83. TestEncodeDecode(data.substr(0, len), DataMatrix::SymbolShape::RECTANGLE);
  84. }
  85. TEST(DMEncodeDecodeTest, EDIFACTWithEOD)
  86. {
  87. using namespace DataMatrix;
  88. std::wstring text[] = {
  89. L"https://test~[******]_",
  90. L"abc<->ABCDE",
  91. L"<ABCDEFG><ABCDEFGK>",
  92. L"*CH/GN1/022/00",
  93. };
  94. for (auto& data : text)
  95. for (auto shape : {SymbolShape::NONE, SymbolShape::SQUARE, SymbolShape::RECTANGLE})
  96. TestEncodeDecode(data, shape);
  97. }