ref_counted_unittest.cc revision ddb351dbec246cf1fab5ec20d2d5520909041de1
1// Copyright (c) 2011 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
5#include "base/memory/ref_counted.h"
6#include "testing/gtest/include/gtest/gtest.h"
7
8namespace {
9
10class SelfAssign : public base::RefCounted<SelfAssign> {
11  friend class base::RefCounted<SelfAssign>;
12
13  ~SelfAssign() {}
14};
15
16class CheckDerivedMemberAccess : public scoped_refptr<SelfAssign> {
17 public:
18  CheckDerivedMemberAccess() {
19    // This shouldn't compile if we don't have access to the member variable.
20    SelfAssign** pptr = &ptr_;
21    EXPECT_EQ(*pptr, ptr_);
22  }
23};
24
25}  // end namespace
26
27TEST(RefCountedUnitTest, TestSelfAssignment) {
28  SelfAssign* p = new SelfAssign;
29  scoped_refptr<SelfAssign> var(p);
30  var = var;
31  EXPECT_EQ(var.get(), p);
32}
33
34TEST(RefCountedUnitTest, ScopedRefPtrMemberAccess) {
35  CheckDerivedMemberAccess check;
36}
37