blob: af30f86148c49af5e17c9d313ad37e1a31637ab4 [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:
mtklein2766c002015-06-26 11:45:03 -070013
robertphillips@google.coma22e2112012-08-16 14:58:06 +000014private:
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
halcanary96fcdcc2015-08-27 07:41:13 -070022 REPORTER_ASSERT(reporter, nullptr == dict.find(nullptr));
23 REPORTER_ASSERT(reporter, nullptr == dict.find("foo"));
24 REPORTER_ASSERT(reporter, nullptr == dict.find("bar"));
reed@google.com0e190d02011-01-25 23:36:05 +000025
26 dict.set("foo", &data0);
27 REPORTER_ASSERT(reporter, &data0 == dict.find("foo"));
mtkleinbbb61d72014-11-24 13:09:39 -080028 REPORTER_ASSERT(reporter, !data0.unique());
reed@google.com0e190d02011-01-25 23:36:05 +000029
30 dict.set("foo", &data0);
31 REPORTER_ASSERT(reporter, &data0 == dict.find("foo"));
mtkleinbbb61d72014-11-24 13:09:39 -080032 REPORTER_ASSERT(reporter, !data0.unique());
reed@google.com0e190d02011-01-25 23:36:05 +000033
34 dict.set("foo", &data1);
35 REPORTER_ASSERT(reporter, &data1 == dict.find("foo"));
mtkleinbbb61d72014-11-24 13:09:39 -080036 REPORTER_ASSERT(reporter, data0.unique());
37 REPORTER_ASSERT(reporter, !data1.unique());
reed@google.com0e190d02011-01-25 23:36:05 +000038
halcanary96fcdcc2015-08-27 07:41:13 -070039 dict.set("foo", nullptr);
40 REPORTER_ASSERT(reporter, nullptr == dict.find("foo"));
mtkleinbbb61d72014-11-24 13:09:39 -080041 REPORTER_ASSERT(reporter, data0.unique());
42 REPORTER_ASSERT(reporter, data1.unique());
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"));
mtkleinbbb61d72014-11-24 13:09:39 -080048 REPORTER_ASSERT(reporter, !data0.unique());
49 REPORTER_ASSERT(reporter, !data1.unique());
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"));
mtkleinbbb61d72014-11-24 13:09:39 -080054 REPORTER_ASSERT(reporter, data0.unique());
55 REPORTER_ASSERT(reporter, !data1.unique());
reed@google.com0e190d02011-01-25 23:36:05 +000056
57 dict.removeAll();
halcanary96fcdcc2015-08-27 07:41:13 -070058 REPORTER_ASSERT(reporter, nullptr == dict.find("foo"));
59 REPORTER_ASSERT(reporter, nullptr == dict.find("bar"));
mtkleinbbb61d72014-11-24 13:09:39 -080060 REPORTER_ASSERT(reporter, data0.unique());
61 REPORTER_ASSERT(reporter, data1.unique());
reed@google.com3636ed52011-01-25 23:50:57 +000062
63 {
64 SkRefDict d;
halcanary96fcdcc2015-08-27 07:41:13 -070065 REPORTER_ASSERT(reporter, nullptr == d.find("foo"));
mtkleinbbb61d72014-11-24 13:09:39 -080066 REPORTER_ASSERT(reporter, data0.unique());
reed@google.com3636ed52011-01-25 23:50:57 +000067 d.set("foo", &data0);
68 REPORTER_ASSERT(reporter, &data0 == d.find("foo"));
mtkleinbbb61d72014-11-24 13:09:39 -080069 REPORTER_ASSERT(reporter, !data0.unique());
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
mtkleinbbb61d72014-11-24 13:09:39 -080073 REPORTER_ASSERT(reporter, data0.unique());
reed@google.com0e190d02011-01-25 23:36:05 +000074}