You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
206 lines
9.3 KiB
206 lines
9.3 KiB
/* |
|
* 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________________________"); |
|
}
|
|
|