Fix StandardMessageCodec test leaks (flutter/engine#27959)

This commit is contained in:
Brandon DeRosier 2021-08-09 15:19:07 -07:00 committed by GitHub
parent 29a2647b2a
commit 941f0a93cd
3 changed files with 20 additions and 4 deletions

View File

@ -295,8 +295,8 @@ const StandardMessageCodec& StandardMessageCodec::GetInstance(
if (!serializer) {
serializer = &StandardCodecSerializer::GetInstance();
}
auto* sInstances = new std::map<const StandardCodecSerializer*,
std::unique_ptr<StandardMessageCodec>>;
static auto* sInstances = new std::map<const StandardCodecSerializer*,
std::unique_ptr<StandardMessageCodec>>;
auto it = sInstances->find(serializer);
if (it == sInstances->end()) {
// Uses new due to private constructor (to prevent API clients from
@ -342,8 +342,8 @@ const StandardMethodCodec& StandardMethodCodec::GetInstance(
if (!serializer) {
serializer = &StandardCodecSerializer::GetInstance();
}
auto* sInstances = new std::map<const StandardCodecSerializer*,
std::unique_ptr<StandardMethodCodec>>;
static auto* sInstances = new std::map<const StandardCodecSerializer*,
std::unique_ptr<StandardMethodCodec>>;
auto it = sInstances->find(serializer);
if (it == sInstances->end()) {
// Uses new due to private constructor (to prevent API clients from

View File

@ -76,6 +76,14 @@ static void CheckEncodeDecodeWithEncodePrefix(
EXPECT_EQ(value, *decoded);
}
TEST(StandardMessageCodec, GetInstanceCachesInstance) {
const StandardMessageCodec& codec_a =
StandardMessageCodec::GetInstance(nullptr);
const StandardMessageCodec& codec_b =
StandardMessageCodec::GetInstance(nullptr);
EXPECT_EQ(&codec_a, &codec_b);
}
TEST(StandardMessageCodec, CanEncodeAndDecodeNull) {
std::vector<uint8_t> bytes = {0x00};
CheckEncodeDecode(EncodableValue(), bytes);

View File

@ -32,6 +32,14 @@ bool MethodCallsAreEqual(const MethodCall<>& a, const MethodCall<>& b) {
} // namespace
TEST(StandardMethodCodec, GetInstanceCachesInstance) {
const StandardMethodCodec& codec_a =
StandardMethodCodec::GetInstance(nullptr);
const StandardMethodCodec& codec_b =
StandardMethodCodec::GetInstance(nullptr);
EXPECT_EQ(&codec_a, &codec_b);
}
TEST(StandardMethodCodec, HandlesMethodCallsWithNullArguments) {
const StandardMethodCodec& codec = StandardMethodCodec::GetInstance();
MethodCall<> call("hello", nullptr);