|  | /* | 
|  | * Copyright 2011 Google Inc. | 
|  | * | 
|  | * Use of this source code is governed by a BSD-style license that can be | 
|  | * found in the LICENSE file. | 
|  | */ | 
|  |  | 
|  | #include "SkRefDict.h" | 
|  | #include "Test.h" | 
|  |  | 
|  | class TestRC : public SkRefCnt { | 
|  | public: | 
|  |  | 
|  | private: | 
|  | typedef SkRefCnt INHERITED; | 
|  | }; | 
|  |  | 
|  | DEF_TEST(RefDict, reporter) { | 
|  | TestRC    data0, data1; | 
|  | SkRefDict dict; | 
|  |  | 
|  | REPORTER_ASSERT(reporter, nullptr == dict.find(nullptr)); | 
|  | REPORTER_ASSERT(reporter, nullptr == dict.find("foo")); | 
|  | REPORTER_ASSERT(reporter, nullptr == dict.find("bar")); | 
|  |  | 
|  | dict.set("foo", &data0); | 
|  | REPORTER_ASSERT(reporter, &data0 == dict.find("foo")); | 
|  | REPORTER_ASSERT(reporter, !data0.unique()); | 
|  |  | 
|  | dict.set("foo", &data0); | 
|  | REPORTER_ASSERT(reporter, &data0 == dict.find("foo")); | 
|  | REPORTER_ASSERT(reporter, !data0.unique()); | 
|  |  | 
|  | dict.set("foo", &data1); | 
|  | REPORTER_ASSERT(reporter, &data1 == dict.find("foo")); | 
|  | REPORTER_ASSERT(reporter, data0.unique()); | 
|  | REPORTER_ASSERT(reporter, !data1.unique()); | 
|  |  | 
|  | dict.set("foo", nullptr); | 
|  | REPORTER_ASSERT(reporter, nullptr == dict.find("foo")); | 
|  | REPORTER_ASSERT(reporter, data0.unique()); | 
|  | REPORTER_ASSERT(reporter, data1.unique()); | 
|  |  | 
|  | dict.set("foo", &data0); | 
|  | dict.set("bar", &data1); | 
|  | REPORTER_ASSERT(reporter, &data0 == dict.find("foo")); | 
|  | REPORTER_ASSERT(reporter, &data1 == dict.find("bar")); | 
|  | REPORTER_ASSERT(reporter, !data0.unique()); | 
|  | REPORTER_ASSERT(reporter, !data1.unique()); | 
|  |  | 
|  | dict.set("foo", &data1); | 
|  | REPORTER_ASSERT(reporter, &data1 == dict.find("foo")); | 
|  | REPORTER_ASSERT(reporter, &data1 == dict.find("bar")); | 
|  | REPORTER_ASSERT(reporter, data0.unique()); | 
|  | REPORTER_ASSERT(reporter, !data1.unique()); | 
|  |  | 
|  | dict.removeAll(); | 
|  | REPORTER_ASSERT(reporter, nullptr == dict.find("foo")); | 
|  | REPORTER_ASSERT(reporter, nullptr == dict.find("bar")); | 
|  | REPORTER_ASSERT(reporter, data0.unique()); | 
|  | REPORTER_ASSERT(reporter, data1.unique()); | 
|  |  | 
|  | { | 
|  | SkRefDict d; | 
|  | REPORTER_ASSERT(reporter, nullptr == d.find("foo")); | 
|  | REPORTER_ASSERT(reporter, data0.unique()); | 
|  | d.set("foo", &data0); | 
|  | REPORTER_ASSERT(reporter, &data0 == d.find("foo")); | 
|  | REPORTER_ASSERT(reporter, !data0.unique()); | 
|  | // let d go out of scope still with a ref on data0 | 
|  | } | 
|  | // be sure d's destructor lowered data0's owner count back to 1 | 
|  | REPORTER_ASSERT(reporter, data0.unique()); | 
|  | } |