// Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "flutter/fml/mapping.h" #include "flutter/testing/testing.h" namespace fml { TEST(MallocMapping, EmptyContructor) { MallocMapping mapping; ASSERT_EQ(nullptr, mapping.GetMapping()); ASSERT_EQ(0u, mapping.GetSize()); } TEST(MallocMapping, NotEmptyContructor) { size_t length = 10; MallocMapping mapping(reinterpret_cast(malloc(length)), length); ASSERT_NE(nullptr, mapping.GetMapping()); ASSERT_EQ(length, mapping.GetSize()); } TEST(MallocMapping, MoveConstructor) { size_t length = 10; MallocMapping mapping(reinterpret_cast(malloc(length)), length); MallocMapping moved = std::move(mapping); ASSERT_EQ(nullptr, mapping.GetMapping()); // NOLINT(clang-analyzer-cplusplus.Move, // bugprone-use-after-move) ASSERT_EQ(0u, mapping.GetSize()); ASSERT_NE(nullptr, moved.GetMapping()); ASSERT_EQ(length, moved.GetSize()); } TEST(MallocMapping, Copy) { size_t length = 10; MallocMapping mapping(reinterpret_cast(malloc(length)), length); memset(const_cast(mapping.GetMapping()), 0xac, mapping.GetSize()); MallocMapping copied = MallocMapping::Copy(mapping.GetMapping(), mapping.GetSize()); ASSERT_NE(mapping.GetMapping(), copied.GetMapping()); ASSERT_EQ(mapping.GetSize(), copied.GetSize()); ASSERT_EQ( 0, memcmp(mapping.GetMapping(), copied.GetMapping(), mapping.GetSize())); } TEST(MallocMapping, Release) { size_t length = 10; MallocMapping mapping(reinterpret_cast(malloc(length)), length); free(const_cast(mapping.Release())); ASSERT_EQ(nullptr, mapping.GetMapping()); ASSERT_EQ(0u, mapping.GetSize()); } TEST(MallocMapping, IsDontNeedSafe) { size_t length = 10; MallocMapping mapping(reinterpret_cast(malloc(length)), length); ASSERT_NE(nullptr, mapping.GetMapping()); ASSERT_FALSE(mapping.IsDontNeedSafe()); } TEST(MallocMapping, CopySizeZero) { char ch = 'a'; MallocMapping mapping = MallocMapping::Copy(&ch, &ch); ASSERT_EQ(0u, mapping.GetSize()); } } // namespace fml