File: RMQRDecoderTest.cpp

package info (click to toggle)
zxing-cpp 2.3.0-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 26,832 kB
  • sloc: cpp: 32,803; ansic: 18,360; php: 1,156; python: 215; makefile: 25; sh: 3
file content (206 lines) | stat: -rw-r--r-- 9,561 bytes parent folder | download
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
/*
 * Copyright 2023 gitlost
*/
// SPDX-License-Identifier: Apache-2.0

#include "qrcode/QRDecoder.h"

#include "BitMatrix.h"
#include "BitMatrixIO.h"
#include "DecoderResult.h"
#include "ECI.h"

#include "gtest/gtest.h"

using namespace ZXing;
using namespace ZXing::QRCode;

TEST(RMQRDecoderTest, RMQRCodeR7x43M)
{
	const auto bitMatrix = ParseBitMatrix(
		"XXXXXXX X X X X X X XXX X X X X X X X X XXX\n"
		"X     X  X XXX  XXXXX XXX      X X XX   X X\n"
		"X XXX X X XXX X X X XXXX XXXX X  X XXXXXXXX\n"
		"X XXX X  XX    XXXXX   XXXXXX   X X   X   X\n"
		"X XXX X   XX  XXX   XXXXXXX  X X  XX  X X X\n"
		"X     X XXXXX XXX XXX XXXXX    XXXXXX X   X\n"
		"XXXXXXX X X X X X X XXX X X X X X X X XXXXX\n",
		'X', false);

	const auto result = Decode(bitMatrix);
	EXPECT_TRUE(result.isValid());
	EXPECT_EQ(result.content().text(TextMode::Plain), "ABCDEFG");
}

TEST(RMQRDecoderTest, RMQRCodeR7x43MError6Bits)
{
	const auto bitMatrix = ParseBitMatrix(
		"XXXXXXX X X X X X X XXX X X X X X X X X XXX\n"
		"X     X  X XXX  XXXXX XXX      X X XX   X X\n"
		"X XXX X X XXX   X X XXXX XXXX XX X XXXXXXXX\n" // 2
		"X XXX X  XX    XXXXX X XXXXXX   X X   X   X\n" // 3
		"X XXX X   XX  XXX   XXXXXXX  X X XXX  X X X\n" // 5
		"X     X XXXXX XXX XXX XXXX X   XXXXXX X   X\n" // 6
		"XXXXXXX X X X X X X XXX X X X X X X X XXXXX\n",
		'X', false);

	const auto result = Decode(bitMatrix);
	EXPECT_EQ(Error::Checksum, result.error());
	EXPECT_EQ(result.text(), L"LSZ2EFJ");
	EXPECT_EQ(result.content().text(TextMode::Plain), "LSZ2EFJ");
}

TEST(RMQRDecoderTest, RMQRCodeR7x139H)
{
	const auto bitMatrix = ParseBitMatrix(
		"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"
		"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"
		"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"
		"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"
		"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"
		"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"
		"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",
		'X', false);

	const auto result = Decode(bitMatrix);
	EXPECT_TRUE(result.isValid());
	EXPECT_EQ(result.content().text(TextMode::Plain), "1234567890,ABCDEFGHIJKLMOPQRSTUVW");
}

TEST(RMQRDecoderTest, RMQRCodeR9x59H)
{
	const auto bitMatrix = ParseBitMatrix(
		"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"
		"X     X    X  XXXXX XXX X  X XXXXXXXX X X  X    X XXXX  X X\n"
		"X XXX X XX XXX  X XXX XXXX  X         XXXXXXX  X XXXXX X  X\n"
		"X XXX X XXXX X XX X   XX   XXXX XX  XX   X  X  X XXX     X \n"
		"X XXX X    X    X XX XXXXXX X X XX   X XX   X X XXXX  XXXXX\n"
		"X     X X  X  X  X  XXX X X   X   XX  X XXXX XX  X X  X   X\n"
		"XXXXXXX  XXXXX  XXXXXX X XX XXX X    XXXX  X    X  X XX X X\n"
		"          XXX  XXXX XX XXX    X XXXXXXX X XX XXX  XX XX   X\n"
		"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",
		'X', false);

	const auto result = Decode(bitMatrix);
	EXPECT_TRUE(result.isValid());
	EXPECT_EQ(result.content().text(TextMode::Plain), "ABCDEFGHIJKLMN");
}

TEST(RMQRDecoderTest, RMQRCodeR9x77M)
{
	const auto bitMatrix = ParseBitMatrix(
		"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"
		"X     X  XXX XX XXX   XXX XXXX XXX XX X XXXXXXXXX X XXX  XXXX X XXXX XX XXX X\n"
		"X XXX X X  X X  XXX  X XXXX  XX  XX  X XX XX      XXX XXXX X X XX   X  X XX X\n"
		"X XXX X X   X XXXXXX  X   XX XXXX X  XXX X XX X  XX  XX XX X XXX X X XXX  XX \n"
		"X XXX X     XXXX  X X   XXXX XXXX XX     XXX X XX XXXXXX X X     XXX XX XXXXX\n"
		"X     X  X X XX XXX    X  X  XX   X X    XX XXX X X   X  X  X    XX XXXXX   X\n"
		"XXXXXXX    X XX   XX X  XXXX X  X X     X  X  XX  XXX  X XX     X  XXX XX X X\n"
		"         X XXXXX       XX X XXXXXX XX   XXXXX     X XX     XX   XXXXX XXX   X\n"
		"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",
		'X', false);

	const auto result = Decode(bitMatrix);
	EXPECT_TRUE(result.isValid());
	EXPECT_EQ(result.content().text(TextMode::Plain), "__ABCDEFGH__1234567890___ABCDEFGHIJK");
}

TEST(RMQRDecoderTest, RMQRCodeR11x27H)
{
	const auto bitMatrix = ParseBitMatrix(
		"XXXXXXX X X X X X X X X XXX\n"
		"X     X  XX        X  X X X\n"
		"X XXX X    X  XX X   X   XX\n"
		"X XXX X XXXX XX X  XXXXXX  \n"
		"X XXX X  X X XX  XX   XXX X\n"
		"X     X XXX  X XX  XXXX  X \n"
		"XXXXXXX     X   XX  X XXXXX\n"
		"           X   X   X  X   X\n"
		"XXXX  X   X X XX XXXXXX X X\n"
		"X XX XXXXXX XXX  XXXX X   X\n"
		"XXX X X X X X X X X X XXXXX\n",
		'X', false);

	const auto result = Decode(bitMatrix);
	EXPECT_TRUE(result.isValid());
	EXPECT_EQ(result.content().text(TextMode::Plain), "ABCDEF");
}

TEST(RMQRDecoderTest, RMQRCodeR13x27M_ECI)
{
	const auto bitMatrix = ParseBitMatrix(
		"XXXXXXX X X X X X X X X XXX\n"
		"X     X    XX XX XXX   XX X\n"
		"X XXX X XX  X  XX XX XXX  X\n"
		"X XXX X  XX X XX X X   XX  \n"
		"X XXX X XXXXXXX X X      XX\n"
		"X     X   XX X  XXX  XX XX \n"
		"XXXXXXX   X   X X    X  XXX\n"
		"        XXX XX X  XX   XXX \n"
		"XXX XX XX X  X XX XX  XXXXX\n"
		" XXX  X    X X    X   X   X\n"
		"X XX X  X   XX X XX X X X X\n"
		"X   X   X  X X X X    X   X\n"
		"XXX X X X X X X X X X XXXXX\n",
		'X', false);

	const auto result = Decode(bitMatrix);
	EXPECT_TRUE(result.isValid());
	EXPECT_EQ(result.content().text(TextMode::Plain), "AB貫12345AB");
	EXPECT_TRUE(result.content().hasECI);
	EXPECT_EQ(result.content().encodings[0].eci, ECI::Shift_JIS);
	EXPECT_EQ(result.content().symbology.toString(), "]Q1");
}

TEST(RMQRDecoderTest, RMQRCodeR15x59H_GS1)
{
	const auto bitMatrix = ParseBitMatrix(
		"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"
		"X     X   XXX XXX X XXXXX      XX XXX X X   X X X X   XXX X\n"
		"X XXX X XXX XX X  XXX XXX X  X   XXX XXXXX  XX      XXX  XX\n"
		"X XXX X X     X XX  X X     XXX X  X    X  XXXXX XX XXX    \n"
		"X XXX X XX   XXX  XX   X X X    XX  XX XX XXX XXXX X   XXXX\n"
		"X     X X  X X X     X  XXX XXX  XXXX X XXX XX    X  X     \n"
		"XXXXXXX  X  XXX  XXXX X    XX XXXX X   X XX   XXX XXXXX   X\n"
		"        X XXX     X    XXXXX     X   XX        XXXX   XX X \n"
		"XX  XX X X   X XXXXX   XX X X XX    XX X   XX X X     XX  X\n"
		" XX XX X   XXXXXX    XXX       XX  X X   XX  XXX   X X XXX \n"
		"X X    XX   XXXXXXXXXX XX X  X   XX XX XX X  XXXX XX XXXXXX\n"
		"  XX X XX X XXX   X  X X    XXX X XXX   X X  XXX   XXXX   X\n"
		"XXXX   X  X XX    XXX X  X X    XX  XXXXX XX  X  XX XXX X X\n"
		"X  X   X  XX    XXX XXXXXXX XXX  X  XXX XX  X   X  X XX   X\n"
		"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",
		'X', false);

	const auto result = Decode(bitMatrix);
	EXPECT_TRUE(result.isValid());
	EXPECT_TRUE(result.content().type() == ContentType::GS1);
	EXPECT_EQ(result.content().text(TextMode::HRI), "(01)09524000059109(21)12345678p901(10)1234567p(17)231120");
}

TEST(RMQRDecoderTest, RMQRCodeR17x99H)
{
	const auto bitMatrix = ParseBitMatrix(
		"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"
		"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"
		"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"
		"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"
		"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"
		"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"
		"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"
		"        XX XX XX XX  X  XX  X    X  X XXX XX    X     X  XXX     XXXX  XX X X  X      X XX XX  XXX \n"
		"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"
		" X   XXXXX X  X   XXXXX X  XX       X XX XXXX   X     X XXXXX X XX X  XX  X XX   X XX           XX \n"
		"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"
		" 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"
		"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"
		"    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"
		"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"
		"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"
		"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",
		'X', false);

	const auto result = Decode(bitMatrix);
	EXPECT_TRUE(result.isValid());
	EXPECT_EQ(result.content().text(TextMode::Plain), "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890________________________");
}