1 /* 2 * Copyright 2011 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #include "SkRefDict.h" 9 #include "Test.h" 10 11 class TestRC : public SkRefCnt { 12 public: 13 14 private: 15 typedef SkRefCnt INHERITED; 16 }; 17 18 DEF_TEST(RefDict, reporter) { 19 TestRC data0, data1; 20 SkRefDict dict; 21 22 REPORTER_ASSERT(reporter, nullptr == dict.find(nullptr)); 23 REPORTER_ASSERT(reporter, nullptr == dict.find("foo")); 24 REPORTER_ASSERT(reporter, nullptr == dict.find("bar")); 25 26 dict.set("foo", &data0); 27 REPORTER_ASSERT(reporter, &data0 == dict.find("foo")); 28 REPORTER_ASSERT(reporter, !data0.unique()); 29 30 dict.set("foo", &data0); 31 REPORTER_ASSERT(reporter, &data0 == dict.find("foo")); 32 REPORTER_ASSERT(reporter, !data0.unique()); 33 34 dict.set("foo", &data1); 35 REPORTER_ASSERT(reporter, &data1 == dict.find("foo")); 36 REPORTER_ASSERT(reporter, data0.unique()); 37 REPORTER_ASSERT(reporter, !data1.unique()); 38 39 dict.set("foo", nullptr); 40 REPORTER_ASSERT(reporter, nullptr == dict.find("foo")); 41 REPORTER_ASSERT(reporter, data0.unique()); 42 REPORTER_ASSERT(reporter, data1.unique()); 43 44 dict.set("foo", &data0); 45 dict.set("bar", &data1); 46 REPORTER_ASSERT(reporter, &data0 == dict.find("foo")); 47 REPORTER_ASSERT(reporter, &data1 == dict.find("bar")); 48 REPORTER_ASSERT(reporter, !data0.unique()); 49 REPORTER_ASSERT(reporter, !data1.unique()); 50 51 dict.set("foo", &data1); 52 REPORTER_ASSERT(reporter, &data1 == dict.find("foo")); 53 REPORTER_ASSERT(reporter, &data1 == dict.find("bar")); 54 REPORTER_ASSERT(reporter, data0.unique()); 55 REPORTER_ASSERT(reporter, !data1.unique()); 56 57 dict.removeAll(); 58 REPORTER_ASSERT(reporter, nullptr == dict.find("foo")); 59 REPORTER_ASSERT(reporter, nullptr == dict.find("bar")); 60 REPORTER_ASSERT(reporter, data0.unique()); 61 REPORTER_ASSERT(reporter, data1.unique()); 62 63 { 64 SkRefDict d; 65 REPORTER_ASSERT(reporter, nullptr == d.find("foo")); 66 REPORTER_ASSERT(reporter, data0.unique()); 67 d.set("foo", &data0); 68 REPORTER_ASSERT(reporter, &data0 == d.find("foo")); 69 REPORTER_ASSERT(reporter, !data0.unique()); 70 // let d go out of scope still with a ref on data0 71 } 72 // be sure d's destructor lowered data0's owner count back to 1 73 REPORTER_ASSERT(reporter, data0.unique()); 74 } 75