diff options
Diffstat (limited to 'pw_hex_dump/hex_dump_test.cc')
-rw-r--r-- | pw_hex_dump/hex_dump_test.cc | 61 |
1 files changed, 51 insertions, 10 deletions
diff --git a/pw_hex_dump/hex_dump_test.cc b/pw_hex_dump/hex_dump_test.cc index c2b4126bc..a95b292d6 100644 --- a/pw_hex_dump/hex_dump_test.cc +++ b/pw_hex_dump/hex_dump_test.cc @@ -18,11 +18,11 @@ #include <cinttypes> #include <cstdint> #include <cstring> -#include <span> #include <string_view> #include "gtest/gtest.h" #include "pw_log/log.h" +#include "pw_span/span.h" namespace pw::dump { namespace { @@ -308,8 +308,8 @@ TEST_F(HexDump, FormattedHexDump_AsciiHeaderGroupEvery) { } TEST_F(HexDump, FormattedHexDump_OffsetPrefix) { - constexpr const char* expected1 = "0000"; - constexpr const char* expected2 = "0010"; + constexpr const char* expected1 = "0000:"; + constexpr const char* expected2 = "0010:"; default_flags_.bytes_per_line = 16; default_flags_.prefix_mode = FormattedHexDumper::AddressMode::kOffset; @@ -329,14 +329,52 @@ TEST_F(HexDump, FormattedHexDump_OffsetPrefix) { EXPECT_STREQ(expected2, dest_.data()); } +TEST_F(HexDump, FormattedHexDump_OffsetPrefix_ShortLine) { + constexpr const char* expected = "0000:"; + + default_flags_.bytes_per_line = 16; + default_flags_.prefix_mode = FormattedHexDumper::AddressMode::kOffset; + dumper_ = FormattedHexDumper(dest_, default_flags_); + + EXPECT_TRUE(dumper_.BeginDump(pw::span(source_data).first(8)).ok()); + // Dump first and only line. + EXPECT_TRUE(dumper_.DumpLine().ok()); + // Truncate string to only contain the offset. + dest_[strlen(expected)] = '\0'; + EXPECT_STREQ(expected, dest_.data()); +} + +TEST_F(HexDump, FormattedHexDump_OffsetPrefix_LongData) { + constexpr std::array<std::byte, 300> long_data = {std::byte{0xff}}; + + constexpr const char* expected1 = "0000:"; + constexpr const char* expected2 = "0010:"; + + default_flags_.bytes_per_line = 16; + default_flags_.prefix_mode = FormattedHexDumper::AddressMode::kOffset; + dumper_ = FormattedHexDumper(dest_, default_flags_); + + EXPECT_TRUE(dumper_.BeginDump(long_data).ok()); + // Dump first line. + EXPECT_TRUE(dumper_.DumpLine().ok()); + // Truncate string to only contain the offset. + dest_[strlen(expected1)] = '\0'; + EXPECT_STREQ(expected1, dest_.data()); + + // Dump second line. + EXPECT_TRUE(dumper_.DumpLine().ok()); + // Truncate string to only contain the offset. + dest_[strlen(expected2)] = '\0'; + EXPECT_STREQ(expected2, dest_.data()); +} + TEST_F(HexDump, FormattedHexDump_AbsolutePrefix) { constexpr size_t kTestBytesPerLine = 16; std::array<char, kHexAddrStringSize + 1> expected1; std::array<char, kHexAddrStringSize + 1> expected2; - DumpAddr(expected1, source_data.data()) - .IgnoreError(); // TODO(pwbug/387): Handle Status properly - DumpAddr(expected2, source_data.data() + kTestBytesPerLine) - .IgnoreError(); // TODO(pwbug/387): Handle Status properly + ASSERT_EQ(OkStatus(), DumpAddr(expected1, source_data.data())); + ASSERT_EQ(OkStatus(), + DumpAddr(expected2, source_data.data() + kTestBytesPerLine)); default_flags_.bytes_per_line = kTestBytesPerLine; default_flags_.prefix_mode = FormattedHexDumper::AddressMode::kAbsolute; @@ -346,12 +384,14 @@ TEST_F(HexDump, FormattedHexDump_AbsolutePrefix) { // Dump first line. EXPECT_TRUE(dumper_.DumpLine().ok()); // Truncate string to only contain the offset. + EXPECT_EQ(dest_[kHexAddrStringSize], ':'); dest_[kHexAddrStringSize] = '\0'; EXPECT_STREQ(expected1.data(), dest_.data()); // Dump second line. EXPECT_TRUE(dumper_.DumpLine().ok()); // Truncate string to only contain the offset. + EXPECT_EQ(dest_[kHexAddrStringSize], ':'); dest_[kHexAddrStringSize] = '\0'; EXPECT_STREQ(expected2.data(), dest_.data()); } @@ -405,7 +445,7 @@ TEST_F(SmallBuffer, PrefixIncreasesBufferRequirement) { TEST(BadBuffer, ZeroSize) { char buffer[1] = {static_cast<char>(0xaf)}; - FormattedHexDumper dumper(std::span<char>(buffer, 0)); + FormattedHexDumper dumper(span<char>(buffer, 0)); EXPECT_EQ(dumper.BeginDump(source_data), Status::FailedPrecondition()); EXPECT_EQ(dumper.DumpLine(), Status::FailedPrecondition()); EXPECT_EQ(buffer[0], static_cast<char>(0xaf)); @@ -413,7 +453,7 @@ TEST(BadBuffer, ZeroSize) { TEST(BadBuffer, NullPtrDest) { FormattedHexDumper dumper; - EXPECT_EQ(dumper.SetLineBuffer(std::span<char>()), Status::InvalidArgument()); + EXPECT_EQ(dumper.SetLineBuffer(span<char>()), Status::InvalidArgument()); EXPECT_EQ(dumper.BeginDump(source_data), Status::FailedPrecondition()); EXPECT_EQ(dumper.DumpLine(), Status::FailedPrecondition()); } @@ -421,7 +461,8 @@ TEST(BadBuffer, NullPtrDest) { TEST(BadBuffer, NullPtrSrc) { char buffer[24] = {static_cast<char>(0)}; FormattedHexDumper dumper(buffer); - EXPECT_EQ(dumper.BeginDump(ByteSpan(nullptr, 64)), Status::InvalidArgument()); + EXPECT_EQ(dumper.BeginDump(ByteSpan(static_cast<std::byte*>(nullptr), 64)), + Status::InvalidArgument()); // Don't actually dump nullptr in this test as it could cause a crash. } |