/* * 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()); }