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