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