// Copyright 2014 The Chromium 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 "base/test/opaque_ref_counted.h"
#include "base/macros.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace base {
class OpaqueRefCounted : public RefCounted<OpaqueRefCounted> {
public:
OpaqueRefCounted() = default;
int Return42() { return 42; }
private:
friend class RefCounted<OpaqueRefCounted>;
~OpaqueRefCounted() = default;
DISALLOW_COPY_AND_ASSIGN(OpaqueRefCounted);
};
class OpaqueRefCountedThreadSafe
: public RefCounted<OpaqueRefCountedThreadSafe> {
public:
OpaqueRefCountedThreadSafe() = default;
int Return42() { return 42; }
private:
friend class RefCounted<OpaqueRefCountedThreadSafe>;
~OpaqueRefCountedThreadSafe() = default;
DISALLOW_COPY_AND_ASSIGN(OpaqueRefCountedThreadSafe);
};
scoped_refptr<OpaqueRefCounted> MakeOpaqueRefCounted() {
return new OpaqueRefCounted();
}
void TestOpaqueRefCounted(scoped_refptr<OpaqueRefCounted> p) {
EXPECT_EQ(42, p->Return42());
}
scoped_refptr<OpaqueRefCountedThreadSafe> MakeOpaqueRefCountedThreadSafe() {
return new OpaqueRefCountedThreadSafe();
}
void TestOpaqueRefCountedThreadSafe(
scoped_refptr<OpaqueRefCountedThreadSafe> p) {
EXPECT_EQ(42, p->Return42());
}
} // namespace base
template class scoped_refptr<base::OpaqueRefCounted>;
template class scoped_refptr<base::OpaqueRefCountedThreadSafe>;