tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

TestEncoding.cpp (1997B)


      1 /* Any copyright is dedicated to the Public Domain.
      2 * http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 #include "gtest/gtest.h"
      5 
      6 #include "mozilla/Encoding.h"
      7 #include <type_traits>
      8 
      9 #define ENCODING_TEST(name) TEST(EncodingTest, name)
     10 
     11 using namespace mozilla;
     12 
     13 static_assert(std::is_standard_layout<NotNull<const Encoding*>>::value,
     14              "NotNull<const Encoding*> must be a standard layout type.");
     15 
     16 // These tests mainly test that the C++ interface seems to
     17 // reach the Rust code. More thorough testing of the back
     18 // end is done in Rust.
     19 
     20 ENCODING_TEST(ForLabel) {
     21  nsAutoCString label("  uTf-8   ");
     22  ASSERT_EQ(Encoding::ForLabel(label), UTF_8_ENCODING);
     23  label.AssignLiteral("   cseucpkdfmTjapanese  ");
     24  ASSERT_EQ(Encoding::ForLabel(label), EUC_JP_ENCODING);
     25 }
     26 
     27 ENCODING_TEST(ForBOM) {
     28  nsAutoCString data("\xEF\xBB\xBF\x61");
     29  const Encoding* encoding;
     30  size_t bomLength;
     31  std::tie(encoding, bomLength) = Encoding::ForBOM(data);
     32  ASSERT_EQ(encoding, UTF_8_ENCODING);
     33  ASSERT_EQ(bomLength, 3U);
     34  data.AssignLiteral("\xFF\xFE");
     35  std::tie(encoding, bomLength) = Encoding::ForBOM(data);
     36  ASSERT_EQ(encoding, UTF_16LE_ENCODING);
     37  ASSERT_EQ(bomLength, 2U);
     38  data.AssignLiteral("\xFE\xFF");
     39  std::tie(encoding, bomLength) = Encoding::ForBOM(data);
     40  ASSERT_EQ(encoding, UTF_16BE_ENCODING);
     41  ASSERT_EQ(bomLength, 2U);
     42  data.AssignLiteral("\xEF\xBB");
     43  std::tie(encoding, bomLength) = Encoding::ForBOM(data);
     44  ASSERT_EQ(encoding, nullptr);
     45  ASSERT_EQ(bomLength, 0U);
     46 }
     47 
     48 ENCODING_TEST(Name) {
     49  nsAutoCString name;
     50  UTF_8_ENCODING->Name(name);
     51  ASSERT_TRUE(name.EqualsLiteral("UTF-8"));
     52  GBK_ENCODING->Name(name);
     53  ASSERT_TRUE(name.EqualsLiteral("GBK"));
     54 }
     55 
     56 ENCODING_TEST(CanEncodeEverything) {
     57  ASSERT_TRUE(UTF_8_ENCODING->CanEncodeEverything());
     58  ASSERT_FALSE(GB18030_ENCODING->CanEncodeEverything());
     59 }
     60 
     61 ENCODING_TEST(IsAsciiCompatible) {
     62  ASSERT_TRUE(UTF_8_ENCODING->IsAsciiCompatible());
     63  ASSERT_FALSE(ISO_2022_JP_ENCODING->IsAsciiCompatible());
     64 }