TestFileSystemHelpers.cpp (4046B)
1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */ 3 /* This Source Code Form is subject to the terms of the Mozilla Public 4 * License, v. 2.0. If a copy of the MPL was not distributed with this file, 5 * You can obtain one at http://mozilla.org/MPL/2.0/. */ 6 7 #include "gtest/gtest.h" 8 #include "mozilla/RefPtr.h" 9 #include "mozilla/dom/FileSystemHelpers.h" 10 11 namespace mozilla::dom::fs { 12 13 namespace { 14 15 class TestObject { 16 public: 17 explicit TestObject(uint32_t aExpectedAddRefCnt = 0, 18 uint32_t aExpectedAddRegCnt = 0) 19 : mExpectedAddRefCnt(aExpectedAddRefCnt), 20 mExpectedAddRegCnt(aExpectedAddRegCnt), 21 mAddRefCnt(0), 22 mAddRegCnt(0), 23 mRefCnt(0), 24 mRegCnt(0), 25 mClosed(false) {} 26 27 uint32_t AddRef() { 28 mRefCnt++; 29 mAddRefCnt++; 30 return mRefCnt; 31 } 32 33 uint32_t Release() { 34 EXPECT_TRUE(mRefCnt > 0); 35 mRefCnt--; 36 if (mRefCnt == 0) { 37 delete this; 38 return 0; 39 } 40 return mRefCnt; 41 } 42 43 void Register() { 44 EXPECT_FALSE(mClosed); 45 mRegCnt++; 46 mAddRegCnt++; 47 } 48 49 void Unregister() { 50 EXPECT_FALSE(mClosed); 51 EXPECT_TRUE(mRegCnt > 0); 52 mRegCnt--; 53 if (mRegCnt == 0) { 54 mClosed = true; 55 } 56 } 57 58 void Foo() const {} 59 60 private: 61 ~TestObject() { 62 if (mExpectedAddRefCnt > 0) { 63 EXPECT_EQ(mAddRefCnt, mExpectedAddRefCnt); 64 } 65 if (mExpectedAddRegCnt > 0) { 66 EXPECT_EQ(mAddRegCnt, mExpectedAddRegCnt); 67 } 68 } 69 70 uint32_t mExpectedAddRefCnt; 71 uint32_t mExpectedAddRegCnt; 72 uint32_t mAddRefCnt; 73 uint32_t mAddRegCnt; 74 uint32_t mRefCnt; 75 uint32_t mRegCnt; 76 bool mClosed; 77 }; 78 79 } // namespace 80 81 TEST(TestFileSystemHelpers_Registered, Construct_Default) 82 { 83 { 84 Registered<TestObject> testObject; 85 } 86 } 87 88 TEST(TestFileSystemHelpers_Registered, Construct_Copy) 89 { 90 { 91 Registered<TestObject> testObject1(MakeRefPtr<TestObject>(2, 2)); 92 Registered<TestObject> testObject2(testObject1); 93 testObject2 = nullptr; 94 } 95 } 96 97 TEST(TestFileSystemHelpers_Registered, Construct_Move) 98 { 99 { 100 Registered<TestObject> testObject1(MakeRefPtr<TestObject>(1, 1)); 101 Registered<TestObject> testObject2(std::move(testObject1)); 102 } 103 } 104 105 TEST(TestFileSystemHelpers_Registered, Construct_FromRefPtr) 106 { 107 { 108 Registered<TestObject> testObject(MakeRefPtr<TestObject>(1, 1)); 109 } 110 } 111 112 TEST(TestFileSystemHelpers_Registered, Operator_Assign_FromNullPtr) 113 { 114 { 115 Registered<TestObject> testObject; 116 testObject = nullptr; 117 } 118 } 119 120 TEST(TestFileSystemHelpers_Registered, Operator_Assign_Copy) 121 { 122 { 123 Registered<TestObject> testObject1(MakeRefPtr<TestObject>(2, 2)); 124 Registered<TestObject> testObject2; 125 testObject2 = testObject1; 126 } 127 } 128 129 TEST(TestFileSystemHelpers_Registered, Operator_Assign_Move) 130 { 131 { 132 Registered<TestObject> testObject1(MakeRefPtr<TestObject>(1, 1)); 133 Registered<TestObject> testObject2; 134 testObject2 = std::move(testObject1); 135 } 136 } 137 138 TEST(TestFileSystemHelpers_Registered, Method_Inspect) 139 { 140 { 141 Registered<TestObject> testObject1(MakeRefPtr<TestObject>(1, 1)); 142 const RefPtr<TestObject>& testObject2 = testObject1.inspect(); 143 (void)testObject2; 144 } 145 } 146 147 TEST(TestFileSystemHelpers_Registered, Method_Unwrap) 148 { 149 { 150 Registered<TestObject> testObject1(MakeRefPtr<TestObject>(1, 1)); 151 RefPtr<TestObject> testObject2 = testObject1.unwrap(); 152 (void)testObject2; 153 } 154 } 155 156 TEST(TestFileSystemHelpers_Registered, Method_Get) 157 { 158 { 159 Registered<TestObject> testObject1(MakeRefPtr<TestObject>(1, 1)); 160 TestObject* testObject2 = testObject1.get(); 161 (void)testObject2; 162 } 163 } 164 165 TEST(TestFileSystemHelpers_Registered, Operator_Conversion_ToRawPtr) 166 { 167 { 168 Registered<TestObject> testObject1(MakeRefPtr<TestObject>(1, 1)); 169 TestObject* testObject2 = testObject1; 170 (void)testObject2; 171 } 172 } 173 174 TEST(TestFileSystemHelpers_Registered, Operator_Dereference_ToRawPtr) 175 { 176 { 177 Registered<TestObject> testObject(MakeRefPtr<TestObject>(1, 1)); 178 testObject->Foo(); 179 } 180 } 181 182 } // namespace mozilla::dom::fs