ContentTest.cpp 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. /*
  2. * Copyright 2022 Axel Waggershauser
  3. */
  4. // SPDX-License-Identifier: Apache-2.0
  5. #include "Content.h"
  6. #include "ECI.h"
  7. #include "gtest/gtest.h"
  8. using namespace ZXing;
  9. using namespace testing;
  10. #if __cplusplus > 201703L
  11. namespace std {
  12. bool operator==(const string& lhs, const char8_t* rhs)
  13. {
  14. return lhs == reinterpret_cast<const char*>(rhs);
  15. }
  16. } // namespace std
  17. #endif
  18. TEST(ContentTest, Base)
  19. {
  20. { // Null
  21. Content c;
  22. EXPECT_EQ(c.guessEncoding(), CharacterSet::Unknown);
  23. EXPECT_EQ(c.symbology.toString(), "");
  24. EXPECT_TRUE(c.empty());
  25. }
  26. { // set latin1
  27. Content c;
  28. c.switchEncoding(CharacterSet::ISO8859_1);
  29. c.append(ByteArray{'A', 0xE9, 'Z'});
  30. EXPECT_EQ(c.utf8(), u8"A\u00E9Z");
  31. }
  32. { // set CharacterSet::ISO8859_5
  33. Content c;
  34. c.switchEncoding(CharacterSet::ISO8859_5);
  35. c.append(ByteArray{'A', 0xE9, 'Z'});
  36. EXPECT_EQ(c.utf8(), u8"A\u0449Z");
  37. }
  38. { // switch to CharacterSet::ISO8859_5
  39. Content c;
  40. c.append(ByteArray{'A', 0xE9, 'Z'});
  41. EXPECT_FALSE(c.hasECI);
  42. c.switchEncoding(CharacterSet::ISO8859_5);
  43. EXPECT_FALSE(c.hasECI);
  44. c.append(ByteArray{'A', 0xE9, 'Z'});
  45. EXPECT_EQ(c.utf8(), u8"A\u00E9ZA\u0449Z");
  46. }
  47. }
  48. TEST(ContentTest, GuessEncoding)
  49. {
  50. { // guess latin1
  51. Content c;
  52. c.append(ByteArray{'A', 0xE9, 'Z'});
  53. EXPECT_EQ(c.guessEncoding(), CharacterSet::ISO8859_1);
  54. EXPECT_EQ(c.utf8(), u8"A\u00E9Z");
  55. EXPECT_EQ(c.bytesECI(), c.bytes);
  56. }
  57. { // guess Shift_JIS
  58. Content c;
  59. c.append(ByteArray{'A', 0x83, 0x65, 'Z'});
  60. EXPECT_EQ(c.guessEncoding(), CharacterSet::Shift_JIS);
  61. EXPECT_EQ(c.utf8(), u8"A\u30C6Z");
  62. }
  63. }
  64. TEST(ContentTest, ECI)
  65. {
  66. { // switch to ECI::ISO8859_5
  67. Content c;
  68. c.append(ByteArray{'A', 0xE9, 'Z'});
  69. c.switchEncoding(ECI::ISO8859_5);
  70. c.append(ByteArray{'A', 0xE9, 'Z'});
  71. EXPECT_TRUE(c.hasECI);
  72. EXPECT_EQ(c.utf8(), u8"A\u00E9ZA\u0449Z");
  73. EXPECT_EQ(c.bytesECI().asString(), std::string_view("\\000003A\xE9Z\\000007A\xE9Z"));
  74. }
  75. { // switch ECI -> latin1 for unknown (instead of Shift_JIS)
  76. Content c;
  77. c.append(ByteArray{'A', 0x83, 0x65, 'Z'});
  78. c.switchEncoding(ECI::ISO8859_5);
  79. c.append(ByteArray{'A', 0xE9, 'Z'});
  80. EXPECT_EQ(c.utf8(), u8"A\u0083\u0065ZA\u0449Z");
  81. EXPECT_EQ(c.bytesECI().asString(), std::string_view("\\000003A\x83\x65Z\\000007A\xE9Z"));
  82. }
  83. { // double '\'
  84. Content c;
  85. c.append("C:\\Test");
  86. EXPECT_EQ(c.utf8(), u8"C:\\Test");
  87. EXPECT_EQ(c.bytesECI().asString(), std::string_view("C:\\\\Test"));
  88. }
  89. }