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
5#include "config.h"
6#include "wtf/RefPtr.h"
7
8#include "wtf/text/StringImpl.h"
9#include <gtest/gtest.h>
10
11namespace {
12
13TEST(RefPtrTest, Basic)
14{
15    RefPtr<StringImpl> string;
16    EXPECT_TRUE(!string);
17    string = StringImpl::create("test");
18    EXPECT_TRUE(!!string);
19    string.clear();
20    EXPECT_TRUE(!string);
21}
22
23#if COMPILER_SUPPORTS(CXX_RVALUE_REFERENCES)
24TEST(RefPtrTest, MoveAssignmentOperator)
25{
26    RefPtr<StringImpl> a = StringImpl::create("a");
27    RefPtr<StringImpl> b = StringImpl::create("b");
28    // FIXME: Instead of explicitly casting to RefPtr<StringImpl>&& here, we should use std::move, but that
29    // requires us to have a standard library that supports move semantics.
30    b = static_cast<RefPtr<StringImpl>&&>(a);
31    EXPECT_TRUE(!!b);
32    EXPECT_TRUE(!a);
33}
34#endif
35
36}
37