#include "utf32.hh" #include "utf_error.hh" #include #include TEST(utf32be, sanity) { size_t offset = 0; auto ret = utf::read32be( std::array({0x00, 0x00, 0x00, 0x24}), offset); EXPECT_EQ('$', ret); EXPECT_EQ(4, offset); offset = 0; ret = utf::read32be( std::array({0x00, 0x00, 0x20, 0xAC}), offset); EXPECT_EQ(0x20AC, ret); EXPECT_EQ(4, offset); offset = 0; ret = utf::read32be( std::array({0x00, 0x01, 0x04, 0x37}), offset); EXPECT_EQ(0x10437, ret); EXPECT_EQ(4, offset); } TEST(utf32le, sanity) { size_t offset = 0; auto ret = utf::read32le( std::array({0x24, 0x00, 0x00, 0x00}), offset); EXPECT_EQ('$', ret); EXPECT_EQ(4, offset); offset = 0; ret = utf::read32le( std::array({0xAC, 0x20, 0x00, 0x00}), offset); EXPECT_EQ(0x20AC, ret); EXPECT_EQ(4, offset); offset = 0; ret = utf::read32le( std::array({0x37, 0x04, 0x01, 0x00}), offset); EXPECT_EQ(0x10437, ret); EXPECT_EQ(4, offset); } TEST(utf32be, invalid) { size_t offset = 0; auto ret = utf::read32be( std::array({0xFF, 0xFF, 0xFF, 0xFF}), offset); EXPECT_EQ(utf::INVALID, ret); EXPECT_EQ(0, offset); offset = 0; ret = utf::read32be( std::array({0x00, 0x00, 0xD8, 0x00}), offset); EXPECT_EQ(utf::INVALID, ret); EXPECT_EQ(0, offset); offset = 0; ret = utf::read32be(std::array({}), offset); EXPECT_EQ(utf::NEED_MORE, ret); EXPECT_EQ(0, offset); offset = 0; ret = utf::read32be(std::array({0x00}), offset); EXPECT_EQ(utf::NEED_MORE, ret); EXPECT_EQ(0, offset); offset = 0; ret = utf::read32be(std::array({0x00, 0x00}), offset); EXPECT_EQ(utf::NEED_MORE, ret); EXPECT_EQ(0, offset); offset = 0; ret = utf::read32be(std::array({0x00, 0x00, 0x00}), offset); EXPECT_EQ(utf::NEED_MORE, ret); EXPECT_EQ(0, offset); } TEST(utf32le, invalid) { size_t offset = 0; auto ret = utf::read32le( std::array({0xFF, 0xFF, 0xFF, 0xFF}), offset); EXPECT_EQ(utf::INVALID, ret); EXPECT_EQ(0, offset); offset = 0; ret = utf::read32le( std::array({0x00, 0xD8, 0x00, 0x00}), offset); EXPECT_EQ(utf::INVALID, ret); EXPECT_EQ(0, offset); offset = 0; ret = utf::read32le(std::array(), offset); EXPECT_EQ(utf::NEED_MORE, ret); EXPECT_EQ(0, offset); offset = 0; ret = utf::read32le(std::array({0x00}), offset); EXPECT_EQ(utf::NEED_MORE, ret); EXPECT_EQ(0, offset); offset = 0; ret = utf::read32le(std::array({0x00, 0x00}), offset); EXPECT_EQ(utf::NEED_MORE, ret); EXPECT_EQ(0, offset); offset = 0; ret = utf::read32le(std::array({0x00, 0x00, 0x00}), offset); EXPECT_EQ(utf::NEED_MORE, ret); EXPECT_EQ(0, offset); } TEST(utf32be, bom) { std::array data({0x00, 0x00, 0xFF, 0xFE, 0x00, 0x00, 0x20, 0xAC}); size_t offset = 0; auto ret = utf::read32be(data, offset); EXPECT_EQ(0xFFFE, ret); ret = utf::read32be(data, offset); EXPECT_EQ(0x20AC, ret); ret = utf::read32be(data, offset); EXPECT_EQ(utf::NEED_MORE, ret); EXPECT_EQ(data.size(), offset); } TEST(utf32le, bom) { std::array data({0xFE, 0xFF, 0x00, 0x00, 0xAC, 0x20, 0x00, 0x00}); size_t offset = 0; auto ret = utf::read32le(data, offset); EXPECT_EQ(0xFFFE, ret); ret = utf::read32le(data, offset); EXPECT_EQ(0x20AC, ret); ret = utf::read32le(data, offset); EXPECT_EQ(utf::NEED_MORE, ret); EXPECT_EQ(data.size(), offset); }