Flutter Impeller
object_unittests.cc
Go to the documentation of this file.
1 // Copyright 2013 The Flutter Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "flutter/testing/testing.h"
8 
10 
11 IMPELLER_DEFINE_HANDLE(FlagHandle);
12 
13 class FlagObject final
14  : public Object<FlagObject, IMPELLER_INTERNAL_HANDLE_NAME(FlagHandle)> {
15  public:
16  explicit FlagObject(bool& destruction_flag)
17  : destruction_flag_(destruction_flag) {
18  FML_CHECK(!destruction_flag_) << "Destruction flag must be cleared.";
19  }
20 
22  FML_CHECK(!destruction_flag_) << "Already destructed.";
23  destruction_flag_ = true;
24  }
25 
26  private:
27  bool& destruction_flag_;
28 };
29 
30 IMPELLER_DEFINE_HANDLE(TestHandle);
31 
32 class TestObject final
33  : public Object<TestObject, IMPELLER_INTERNAL_HANDLE_NAME(TestHandle)> {
34  public:
35  TestObject(int arg1, double arg2, char arg3)
36  : arg1_(arg1), arg2_(arg2), arg3_(arg3) {}
37 
38  ~TestObject() = default;
39 
40  auto GetArg1() const { return arg1_; }
41 
42  auto GetArg2() const { return arg2_; }
43 
44  auto GetArg3() const { return arg3_; }
45 
46  private:
47  int arg1_ = {};
48  double arg2_ = {};
49  char arg3_ = {};
50 };
51 
52 TEST(InteropObjectTest, CanCreateScoped) {
53  bool destructed = false;
54  {
55  auto object = Adopt(new FlagObject(destructed)); //
56  }
57  ASSERT_TRUE(destructed);
58 
59  destructed = false;
60  {
61  auto object = Ref(new FlagObject(destructed));
62  // New objects start with retain count of 1.
63  object->Release();
64  }
65  ASSERT_TRUE(destructed);
66 }
67 
68 TEST(InteropObjectTest, CanCreate) {
69  auto object = Create<TestObject>(1, 1.3, 'c');
70  ASSERT_EQ(object->GetArg1(), 1);
71  ASSERT_EQ(object->GetArg2(), 1.3);
72  ASSERT_EQ(object->GetArg3(), 'c');
73 }
74 
75 TEST(InteropObjectTest, CanCopyAssignMove) {
76  auto o = Create<TestObject>(1, 2.3, 'd');
77  ASSERT_EQ(o->GetRefCountForTests(), 1u);
78  {
79  auto o1 = o; // NOLINT(performance-unnecessary-copy-initialization)
80  ASSERT_EQ(o->GetRefCountForTests(), 2u);
81  auto o2 = o; // NOLINT(performance-unnecessary-copy-initialization)
82  ASSERT_EQ(o->GetRefCountForTests(), 3u);
83  auto o3 = o1; // NOLINT(performance-unnecessary-copy-initialization)
84  ASSERT_EQ(o->GetRefCountForTests(), 4u);
85  }
86  ASSERT_EQ(o->GetRefCountForTests(), 1u);
87 
88  {
89  auto o1(o); // NOLINT(performance-unnecessary-copy-initialization)
90  ASSERT_EQ(o->GetRefCountForTests(), 2u);
91  ASSERT_EQ(o1->GetRefCountForTests(), 2u);
92  }
93 
94  auto move_o = std::move(o);
95  ASSERT_EQ(move_o->GetRefCountForTests(), 1u);
96 }
97 
98 } // namespace impeller::interop::testing
impeller.h
impeller::interop::Object
Definition: object.h:56
impeller::interop::testing::FlagObject::FlagObject
FlagObject(bool &destruction_flag)
Definition: object_unittests.cc:16
impeller::interop::testing::TestObject::GetArg1
auto GetArg1() const
Definition: object_unittests.cc:40
impeller::interop::testing
Definition: impeller_unittests.cc:22
impeller::interop::testing::TEST
TEST(InteropObjectTest, CanCreateScoped)
Definition: object_unittests.cc:52
impeller::interop::testing::TestObject::TestObject
TestObject(int arg1, double arg2, char arg3)
Definition: object_unittests.cc:35
impeller::interop::testing::IMPELLER_DEFINE_HANDLE
IMPELLER_DEFINE_HANDLE(FlagHandle)
impeller::interop::testing::TestObject
Definition: object_unittests.cc:32
impeller::interop::testing::TestObject::GetArg3
auto GetArg3() const
Definition: object_unittests.cc:44
impeller::interop::Ref
ScopedObject< Object > Ref(Object *object)
Definition: object.h:145
impeller::interop::testing::TestObject::GetArg2
auto GetArg2() const
Definition: object_unittests.cc:42
impeller::interop::testing::FlagObject::~FlagObject
~FlagObject()
Definition: object_unittests.cc:21
impeller::interop::testing::FlagObject
Definition: object_unittests.cc:13
impeller::interop::testing::TestObject::~TestObject
~TestObject()=default
impeller::interop::Adopt
ScopedObject< Object > Adopt(Object *object)
Definition: object.h:150
object.h