| Index: base/ios/weak_nsobject_unittest.mm
|
| diff --git a/base/ios/weak_nsobject_unittest.mm b/base/ios/weak_nsobject_unittest.mm
|
| index 9758aedfc26ac258856f3d5ab973b602eee8bdfa..325dcd21aad84f7a2cb7c6608ccb0fb3d0935358 100644
|
| --- a/base/ios/weak_nsobject_unittest.mm
|
| +++ b/base/ios/weak_nsobject_unittest.mm
|
| @@ -3,16 +3,19 @@
|
| // found in the LICENSE file.
|
|
|
| #include "base/basictypes.h"
|
| +#include "base/bind.h"
|
| #include "base/ios/weak_nsobject.h"
|
| #include "base/mac/scoped_nsobject.h"
|
| +#include "base/message_loop/message_loop.h"
|
| +#include "base/single_thread_task_runner.h"
|
| +#include "base/threading/thread.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| -using base::WeakNSObject;
|
| -
|
| +namespace base {
|
| namespace {
|
|
|
| TEST(WeakNSObjectTest, WeakNSObject) {
|
| - base::scoped_nsobject<NSObject> p1([[NSObject alloc] init]);
|
| + scoped_nsobject<NSObject> p1([[NSObject alloc] init]);
|
| WeakNSObject<NSObject> w1(p1);
|
| EXPECT_TRUE(w1);
|
| p1.reset();
|
| @@ -20,7 +23,7 @@ TEST(WeakNSObjectTest, WeakNSObject) {
|
| }
|
|
|
| TEST(WeakNSObjectTest, MultipleWeakNSObject) {
|
| - base::scoped_nsobject<NSObject> p1([[NSObject alloc] init]);
|
| + scoped_nsobject<NSObject> p1([[NSObject alloc] init]);
|
| WeakNSObject<NSObject> w1(p1);
|
| WeakNSObject<NSObject> w2(w1);
|
| EXPECT_TRUE(w1);
|
| @@ -32,7 +35,7 @@ TEST(WeakNSObjectTest, MultipleWeakNSObject) {
|
| }
|
|
|
| TEST(WeakNSObjectTest, WeakNSObjectDies) {
|
| - base::scoped_nsobject<NSObject> p1([[NSObject alloc] init]);
|
| + scoped_nsobject<NSObject> p1([[NSObject alloc] init]);
|
| {
|
| WeakNSObject<NSObject> w1(p1);
|
| EXPECT_TRUE(w1);
|
| @@ -40,7 +43,7 @@ TEST(WeakNSObjectTest, WeakNSObjectDies) {
|
| }
|
|
|
| TEST(WeakNSObjectTest, WeakNSObjectReset) {
|
| - base::scoped_nsobject<NSObject> p1([[NSObject alloc] init]);
|
| + scoped_nsobject<NSObject> p1([[NSObject alloc] init]);
|
| WeakNSObject<NSObject> w1(p1);
|
| EXPECT_TRUE(w1);
|
| w1.reset();
|
| @@ -50,8 +53,8 @@ TEST(WeakNSObjectTest, WeakNSObjectReset) {
|
| }
|
|
|
| TEST(WeakNSObjectTest, WeakNSObjectResetWithObject) {
|
| - base::scoped_nsobject<NSObject> p1([[NSObject alloc] init]);
|
| - base::scoped_nsobject<NSObject> p2([[NSObject alloc] init]);
|
| + scoped_nsobject<NSObject> p1([[NSObject alloc] init]);
|
| + scoped_nsobject<NSObject> p2([[NSObject alloc] init]);
|
| WeakNSObject<NSObject> w1(p1);
|
| EXPECT_TRUE(w1);
|
| w1.reset(p2);
|
| @@ -61,7 +64,7 @@ TEST(WeakNSObjectTest, WeakNSObjectResetWithObject) {
|
| }
|
|
|
| TEST(WeakNSObjectTest, WeakNSObjectEmpty) {
|
| - base::scoped_nsobject<NSObject> p1([[NSObject alloc] init]);
|
| + scoped_nsobject<NSObject> p1([[NSObject alloc] init]);
|
| WeakNSObject<NSObject> w1;
|
| EXPECT_FALSE(w1);
|
| w1.reset(p1);
|
| @@ -71,7 +74,7 @@ TEST(WeakNSObjectTest, WeakNSObjectEmpty) {
|
| }
|
|
|
| TEST(WeakNSObjectTest, WeakNSObjectCopy) {
|
| - base::scoped_nsobject<NSObject> p1([[NSObject alloc] init]);
|
| + scoped_nsobject<NSObject> p1([[NSObject alloc] init]);
|
| WeakNSObject<NSObject> w1(p1);
|
| WeakNSObject<NSObject> w2(w1);
|
| EXPECT_TRUE(w1);
|
| @@ -82,7 +85,7 @@ TEST(WeakNSObjectTest, WeakNSObjectCopy) {
|
| }
|
|
|
| TEST(WeakNSObjectTest, WeakNSObjectAssignment) {
|
| - base::scoped_nsobject<NSObject> p1([[NSObject alloc] init]);
|
| + scoped_nsobject<NSObject> p1([[NSObject alloc] init]);
|
| WeakNSObject<NSObject> w1(p1);
|
| WeakNSObject<NSObject> w2;
|
| EXPECT_FALSE(w2);
|
| @@ -94,4 +97,40 @@ TEST(WeakNSObjectTest, WeakNSObjectAssignment) {
|
| EXPECT_FALSE(w2);
|
| }
|
|
|
| +// Touches |weak_data| by increasing its length by 1. Used to check that the
|
| +// weak object can be dereferenced.
|
| +void TouchWeakData(const WeakNSObject<NSMutableData>& weak_data) {
|
| + if (!weak_data)
|
| + return;
|
| + [weak_data increaseLengthBy:1];
|
| +}
|
| +
|
| +// Makes a copy of |weak_object| on the current thread and posts a task to touch
|
| +// the weak object on its original thread.
|
| +void CopyWeakNSObjectAndPost(const WeakNSObject<NSMutableData>& weak_object,
|
| + scoped_refptr<SingleThreadTaskRunner> runner) {
|
| + WeakNSObject<NSMutableData> weak_copy(weak_object);
|
| + runner->PostTask(FROM_HERE, Bind(&TouchWeakData, weak_copy));
|
| +}
|
| +
|
| +// Tests that the weak object can be copied on a different thread.
|
| +TEST(WeakNSObjectTest, WeakNSObjectCopyOnOtherThread) {
|
| + MessageLoop loop;
|
| + Thread other_thread("WeakNSObjectCopyOnOtherThread");
|
| + other_thread.Start();
|
| +
|
| + scoped_nsobject<NSMutableData> data([[NSMutableData alloc] init]);
|
| + WeakNSObject<NSMutableData> weak(data);
|
| +
|
| + scoped_refptr<SingleThreadTaskRunner> runner = loop.task_runner();
|
| + other_thread.task_runner()->PostTask(
|
| + FROM_HERE, Bind(&CopyWeakNSObjectAndPost, weak, runner));
|
| + other_thread.Stop();
|
| + loop.RunUntilIdle();
|
| +
|
| + // Check that TouchWeakData was called.
|
| + EXPECT_EQ(1u, [data length]);
|
| +}
|
| +
|
| } // namespace
|
| +} // namespace base
|
|
|