| // 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<uint8_t*>(malloc(length)), length); | 
 |   ASSERT_NE(nullptr, mapping.GetMapping()); | 
 |   ASSERT_EQ(length, mapping.GetSize()); | 
 | } | 
 |  | 
 | TEST(MallocMapping, MoveConstructor) { | 
 |   size_t length = 10; | 
 |   MallocMapping mapping(reinterpret_cast<uint8_t*>(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<uint8_t*>(malloc(length)), length); | 
 |   memset(const_cast<uint8_t*>(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<uint8_t*>(malloc(length)), length); | 
 |   free(const_cast<uint8_t*>(mapping.Release())); | 
 |   ASSERT_EQ(nullptr, mapping.GetMapping()); | 
 |   ASSERT_EQ(0u, mapping.GetSize()); | 
 | } | 
 |  | 
 | TEST(MallocMapping, IsDontNeedSafe) { | 
 |   size_t length = 10; | 
 |   MallocMapping mapping(reinterpret_cast<uint8_t*>(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 |