[go: nahoru, domu]

blob: 1497c56313430efe055a82f944643128aa304392 [file] [log] [blame]
// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "services/tracing/public/cpp/perfetto/java_heap_profiler/hprof_buffer_android.h"
#include <stddef.h>
#include <cstdint>
#include "testing/gtest/include/gtest/gtest.h"
namespace tracing {
TEST(HprofBufferTest, VerifyBasicGetBytes) {
const int length = 7;
unsigned char file_data[length]{1, 1, 1, 1, 1, 1, 1};
HprofBuffer hprof(file_data, length);
EXPECT_EQ(hprof.GetOneByte(), 1u);
EXPECT_EQ(hprof.GetTwoBytes(), 257u);
EXPECT_EQ(hprof.GetFourBytes(), 16843009u);
EXPECT_EQ(hprof.HasRemaining(), false);
}
TEST(HprofBufferTest, VerifyBasicGetId) {
const int length = 12;
unsigned char file_data[length]{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
HprofBuffer hprof(file_data, length);
EXPECT_EQ(hprof.GetId(), 16843009u);
hprof.set_id_size(8);
EXPECT_EQ(hprof.GetId(), 72340172838076673u);
EXPECT_EQ(hprof.HasRemaining(), false);
}
TEST(HprofBufferTest, VerifyBasicPositionalMethods) {
const int length = 4;
unsigned char file_data[length]{1, 2, 3, 4};
HprofBuffer hprof(file_data, length);
EXPECT_EQ(hprof.GetOneByte(), 1u);
hprof.Skip(2);
EXPECT_EQ(hprof.GetOneByte(), 4u);
EXPECT_EQ(hprof.HasRemaining(), false);
hprof.set_position(1);
EXPECT_EQ(hprof.GetOneByte(), 2u);
}
TEST(HprofBufferTest, VerifySkipIdAndDataPositionMethods) {
const int length = 12;
unsigned char file_data[length]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
HprofBuffer hprof(file_data, length);
EXPECT_EQ(static_cast<unsigned>(*hprof.DataPosition()), 1u);
hprof.SkipId();
EXPECT_EQ(static_cast<unsigned>(*hprof.DataPosition()), 5u);
hprof.set_id_size(8);
hprof.SkipId();
EXPECT_EQ(hprof.HasRemaining(), false);
}
TEST(HprofBufferTest, VerifySizeOfTypeMethod) {
const int length = 34;
unsigned char file_data[length]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
HprofBuffer hprof(file_data, length);
unsigned correct_sizes[] = {4, 4, 4, 4, 1, 2, 4, 8, 1, 2, 4, 8};
for (uint32_t i = 0; i < 12; i++) {
EXPECT_EQ(hprof.SizeOfType(i), correct_sizes[i]);
}
DataType data_types[9]{DataType::OBJECT, DataType::BOOLEAN, DataType::CHAR,
DataType::FLOAT, DataType::DOUBLE, DataType::BYTE,
DataType::SHORT, DataType::INT, DataType::LONG};
size_t correct_offsets[] = {4, 5, 7, 11, 19, 20, 22, 26, 34};
for (uint32_t i = 0; i < 9; i++) {
hprof.SkipBytesByType(data_types[i]);
EXPECT_EQ(hprof.offset(), correct_offsets[i]);
}
EXPECT_EQ(hprof.HasRemaining(), false);
}
} // namespace tracing