blob: 1e18a6815d0b1ac6047205c61f4b9af75ca97075 [file] [log] [blame]
epoger@google.comec3ed6a2011-07-28 14:26:00 +00001/*
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 */
tfarina@chromium.orge4fafb12013-12-12 21:11:12 +00007
reed@google.com0e190d02011-01-25 23:36:05 +00008#include "SkRefDict.h"
tfarina@chromium.org8f6884a2014-01-24 20:56:26 +00009#include "Test.h"
reed@google.com0e190d02011-01-25 23:36:05 +000010
11class TestRC : public SkRefCnt {
robertphillips@google.coma22e2112012-08-16 14:58:06 +000012public:
13 SK_DECLARE_INST_COUNT(TestRC)
14private:
15 typedef SkRefCnt INHERITED;
reed@google.com0e190d02011-01-25 23:36:05 +000016};
17
tfarina@chromium.orge4fafb12013-12-12 21:11:12 +000018DEF_TEST(RefDict, reporter) {
reed@google.com0e190d02011-01-25 23:36:05 +000019 TestRC data0, data1;
20 SkRefDict dict;
21
22 REPORTER_ASSERT(reporter, NULL == dict.find(NULL));
23 REPORTER_ASSERT(reporter, NULL == dict.find("foo"));
24 REPORTER_ASSERT(reporter, NULL == dict.find("bar"));
25
26 dict.set("foo", &data0);
27 REPORTER_ASSERT(reporter, &data0 == dict.find("foo"));
Mike Klein874a62a2014-07-09 09:04:07 -040028 REPORTER_ASSERT(reporter, 2 == data0.getRefCnt());
reed@google.com0e190d02011-01-25 23:36:05 +000029
30 dict.set("foo", &data0);
31 REPORTER_ASSERT(reporter, &data0 == dict.find("foo"));
Mike Klein874a62a2014-07-09 09:04:07 -040032 REPORTER_ASSERT(reporter, 2 == data0.getRefCnt());
reed@google.com0e190d02011-01-25 23:36:05 +000033
34 dict.set("foo", &data1);
35 REPORTER_ASSERT(reporter, &data1 == dict.find("foo"));
Mike Klein874a62a2014-07-09 09:04:07 -040036 REPORTER_ASSERT(reporter, 1 == data0.getRefCnt());
37 REPORTER_ASSERT(reporter, 2 == data1.getRefCnt());
reed@google.com0e190d02011-01-25 23:36:05 +000038
39 dict.set("foo", NULL);
40 REPORTER_ASSERT(reporter, NULL == dict.find("foo"));
Mike Klein874a62a2014-07-09 09:04:07 -040041 REPORTER_ASSERT(reporter, 1 == data0.getRefCnt());
42 REPORTER_ASSERT(reporter, 1 == data1.getRefCnt());
reed@google.com0e190d02011-01-25 23:36:05 +000043
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"));
Mike Klein874a62a2014-07-09 09:04:07 -040048 REPORTER_ASSERT(reporter, 2 == data0.getRefCnt());
49 REPORTER_ASSERT(reporter, 2 == data1.getRefCnt());
reed@google.com0e190d02011-01-25 23:36:05 +000050
51 dict.set("foo", &data1);
52 REPORTER_ASSERT(reporter, &data1 == dict.find("foo"));
53 REPORTER_ASSERT(reporter, &data1 == dict.find("bar"));
Mike Klein874a62a2014-07-09 09:04:07 -040054 REPORTER_ASSERT(reporter, 1 == data0.getRefCnt());
55 REPORTER_ASSERT(reporter, 3 == data1.getRefCnt());
reed@google.com0e190d02011-01-25 23:36:05 +000056
57 dict.removeAll();
58 REPORTER_ASSERT(reporter, NULL == dict.find("foo"));
59 REPORTER_ASSERT(reporter, NULL == dict.find("bar"));
Mike Klein874a62a2014-07-09 09:04:07 -040060 REPORTER_ASSERT(reporter, 1 == data0.getRefCnt());
61 REPORTER_ASSERT(reporter, 1 == data1.getRefCnt());
reed@google.com3636ed52011-01-25 23:50:57 +000062
63 {
64 SkRefDict d;
65 REPORTER_ASSERT(reporter, NULL == d.find("foo"));
Mike Klein874a62a2014-07-09 09:04:07 -040066 REPORTER_ASSERT(reporter, 1 == data0.getRefCnt());
reed@google.com3636ed52011-01-25 23:50:57 +000067 d.set("foo", &data0);
68 REPORTER_ASSERT(reporter, &data0 == d.find("foo"));
Mike Klein874a62a2014-07-09 09:04:07 -040069 REPORTER_ASSERT(reporter, 2 == data0.getRefCnt());
reed@google.com3636ed52011-01-25 23:50:57 +000070 // 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
Mike Klein874a62a2014-07-09 09:04:07 -040073 REPORTER_ASSERT(reporter, 1 == data0.getRefCnt());
reed@google.com0e190d02011-01-25 23:36:05 +000074}