blob: ca6ce2a6028b02bed80ec761938c49ceae9de172 [file] [log] [blame]
// Copyright 2018 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.
#import "ui/base/cocoa/weak_ptr_nsobject.h"
#import "base/mac/scoped_nsobject.h"
#include "base/macros.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace ui {
namespace {
class ScopedFoo {
public:
ScopedFoo() : factory_(this) {}
WeakPtrNSObject* GetWeakPtr() { return factory_.handle(); }
private:
WeakPtrNSObjectFactory<ScopedFoo> factory_;
DISALLOW_COPY_AND_ASSIGN(ScopedFoo);
};
} // namespace
// Ensure WeakPtrNSObjectFactory invalidates weak pointers correctly.
TEST(WeakPtrNSObjectTest, EnsureInvalidated) {
base::scoped_nsobject<WeakPtrNSObject> weak_ptr;
{
ScopedFoo foo;
weak_ptr.reset([foo.GetWeakPtr() retain]);
EXPECT_EQ(&foo, WeakPtrNSObjectFactory<ScopedFoo>::Get(weak_ptr));
}
EXPECT_EQ(nullptr, WeakPtrNSObjectFactory<ScopedFoo>::Get(weak_ptr));
}
} // namespace ui