diff options
author | Xin Li <delphij@google.com> | 2023-08-14 15:38:30 -0700 |
---|---|---|
committer | Xin Li <delphij@google.com> | 2023-08-14 15:38:30 -0700 |
commit | bddf63953e111d742b591c1c0c7c34bcda8a51c7 (patch) | |
tree | 3a93128bff4b737b24b0c9581922c0b20410f0f4 /pw_hex_dump/hex_dump_test.cc | |
parent | ee890da55c82b95deca3518d5f3777e3d8ca9f0e (diff) | |
parent | fbb9890f8922aa55fde183655a0017e69127ea4b (diff) | |
download | pigweed-tmp_amf_298295554.tar.gz |
Merge Android U (ab/10368041)tmp_amf_298295554
Bug: 291102124
Merged-In: I10c41adb8fe3e126cfa4ff2f49b15863fff379de
Change-Id: I66f7a6cccaafc173d3924dae62a736c6c53520c7
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. } |