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

/*
* 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________________________");
}