Chromium+Blink automerger | 9764d30 | 2015-09-23 06:38:42 | [diff] [blame] | 1 | // Copyright 2014 The Chromium 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 | |
Chromium+Blink automerger | 9764d30 | 2015-09-23 06:38:42 | [diff] [blame] | 5 | #include "wtf/RefPtr.h" |
| 6 | |
tkent | 19e281f | 2015-11-18 02:07:43 | [diff] [blame] | 7 | #include "testing/gtest/include/gtest/gtest.h" |
leviw | 8ac0472 | 2016-03-26 01:19:53 | [diff] [blame] | 8 | #include "wtf/RefCounted.h" |
Chromium+Blink automerger | 9764d30 | 2015-09-23 06:38:42 | [diff] [blame] | 9 | #include "wtf/text/StringImpl.h" |
Chromium+Blink automerger | 9764d30 | 2015-09-23 06:38:42 | [diff] [blame] | 10 | |
| 11 | namespace WTF { |
| 12 | |
Blink Reformat | bfdda21 | 2016-10-01 00:25:32 | [diff] [blame] | 13 | TEST(RefPtrTest, Basic) { |
| 14 | RefPtr<StringImpl> string; |
| 15 | EXPECT_TRUE(!string); |
| 16 | string = StringImpl::create("test"); |
| 17 | EXPECT_TRUE(!!string); |
| 18 | string.clear(); |
| 19 | EXPECT_TRUE(!string); |
Chromium+Blink automerger | 9764d30 | 2015-09-23 06:38:42 | [diff] [blame] | 20 | } |
| 21 | |
bugsnash | accbc9b | 2017-02-20 20:38:24 | [diff] [blame] | 22 | TEST(RefPtrTest, LeakRef) { |
| 23 | RefPtr<StringImpl> string = StringImpl::create("test"); |
| 24 | EXPECT_TRUE(string); |
| 25 | EXPECT_TRUE(string->hasOneRef()); |
| 26 | StringImpl* raw = string.get(); |
| 27 | StringImpl* leaked = string.leakRef(); |
| 28 | EXPECT_TRUE(!string); |
| 29 | EXPECT_TRUE(leaked); |
| 30 | EXPECT_TRUE(leaked->hasOneRef()); |
| 31 | EXPECT_EQ(raw, leaked); |
| 32 | leaked->deref(); |
| 33 | } |
| 34 | |
Blink Reformat | bfdda21 | 2016-10-01 00:25:32 | [diff] [blame] | 35 | TEST(RefPtrTest, MoveAssignmentOperator) { |
| 36 | RefPtr<StringImpl> a = StringImpl::create("a"); |
| 37 | RefPtr<StringImpl> b = StringImpl::create("b"); |
| 38 | b = std::move(a); |
| 39 | EXPECT_TRUE(!!b); |
| 40 | EXPECT_TRUE(!a); |
Chromium+Blink automerger | 9764d30 | 2015-09-23 06:38:42 | [diff] [blame] | 41 | } |
| 42 | |
Blink Reformat | bfdda21 | 2016-10-01 00:25:32 | [diff] [blame] | 43 | class RefCountedClass : public RefCounted<RefCountedClass> {}; |
leviw | 8ac0472 | 2016-03-26 01:19:53 | [diff] [blame] | 44 | |
Blink Reformat | bfdda21 | 2016-10-01 00:25:32 | [diff] [blame] | 45 | TEST(RefPtrTest, ConstObject) { |
| 46 | // This test is only to ensure we force the compilation of a const RefCounted |
| 47 | // object to ensure the generated code compiles. |
| 48 | RefPtr<const RefCountedClass> ptrToConst = adoptRef(new RefCountedClass()); |
leviw | 8ac0472 | 2016-03-26 01:19:53 | [diff] [blame] | 49 | } |
| 50 | |
Blink Reformat | bfdda21 | 2016-10-01 00:25:32 | [diff] [blame] | 51 | } // namespace WTF |