1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/*
2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc.
3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com *
4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be
5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file.
6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */
7e4fafb146e85cdfcf9d5418597b6818aa0754adatfarina@chromium.org
80e190d0e126991cfba4bc7415c1911761d7be87breed@google.com#include "SkRefDict.h"
98f6884aab8aecd7657cf3f9cdbc682f0deca29c5tfarina@chromium.org#include "Test.h"
100e190d0e126991cfba4bc7415c1911761d7be87breed@google.com
110e190d0e126991cfba4bc7415c1911761d7be87breed@google.comclass TestRC : public SkRefCnt {
12a22e2117e44efa4298dd0eb6df304a8166c8e9c3robertphillips@google.compublic:
13a22e2117e44efa4298dd0eb6df304a8166c8e9c3robertphillips@google.com    SK_DECLARE_INST_COUNT(TestRC)
14a22e2117e44efa4298dd0eb6df304a8166c8e9c3robertphillips@google.comprivate:
15a22e2117e44efa4298dd0eb6df304a8166c8e9c3robertphillips@google.com    typedef SkRefCnt INHERITED;
160e190d0e126991cfba4bc7415c1911761d7be87breed@google.com};
170e190d0e126991cfba4bc7415c1911761d7be87breed@google.com
18e4fafb146e85cdfcf9d5418597b6818aa0754adatfarina@chromium.orgDEF_TEST(RefDict, reporter) {
190e190d0e126991cfba4bc7415c1911761d7be87breed@google.com    TestRC    data0, data1;
200e190d0e126991cfba4bc7415c1911761d7be87breed@google.com    SkRefDict dict;
210e190d0e126991cfba4bc7415c1911761d7be87breed@google.com
220e190d0e126991cfba4bc7415c1911761d7be87breed@google.com    REPORTER_ASSERT(reporter, NULL == dict.find(NULL));
230e190d0e126991cfba4bc7415c1911761d7be87breed@google.com    REPORTER_ASSERT(reporter, NULL == dict.find("foo"));
240e190d0e126991cfba4bc7415c1911761d7be87breed@google.com    REPORTER_ASSERT(reporter, NULL == dict.find("bar"));
250e190d0e126991cfba4bc7415c1911761d7be87breed@google.com
260e190d0e126991cfba4bc7415c1911761d7be87breed@google.com    dict.set("foo", &data0);
270e190d0e126991cfba4bc7415c1911761d7be87breed@google.com    REPORTER_ASSERT(reporter, &data0 == dict.find("foo"));
280e190d0e126991cfba4bc7415c1911761d7be87breed@google.com    REPORTER_ASSERT(reporter, 2 == data0.getRefCnt());
290e190d0e126991cfba4bc7415c1911761d7be87breed@google.com
300e190d0e126991cfba4bc7415c1911761d7be87breed@google.com    dict.set("foo", &data0);
310e190d0e126991cfba4bc7415c1911761d7be87breed@google.com    REPORTER_ASSERT(reporter, &data0 == dict.find("foo"));
320e190d0e126991cfba4bc7415c1911761d7be87breed@google.com    REPORTER_ASSERT(reporter, 2 == data0.getRefCnt());
330e190d0e126991cfba4bc7415c1911761d7be87breed@google.com
340e190d0e126991cfba4bc7415c1911761d7be87breed@google.com    dict.set("foo", &data1);
350e190d0e126991cfba4bc7415c1911761d7be87breed@google.com    REPORTER_ASSERT(reporter, &data1 == dict.find("foo"));
360e190d0e126991cfba4bc7415c1911761d7be87breed@google.com    REPORTER_ASSERT(reporter, 1 == data0.getRefCnt());
370e190d0e126991cfba4bc7415c1911761d7be87breed@google.com    REPORTER_ASSERT(reporter, 2 == data1.getRefCnt());
380e190d0e126991cfba4bc7415c1911761d7be87breed@google.com
390e190d0e126991cfba4bc7415c1911761d7be87breed@google.com    dict.set("foo", NULL);
400e190d0e126991cfba4bc7415c1911761d7be87breed@google.com    REPORTER_ASSERT(reporter, NULL == dict.find("foo"));
410e190d0e126991cfba4bc7415c1911761d7be87breed@google.com    REPORTER_ASSERT(reporter, 1 == data0.getRefCnt());
420e190d0e126991cfba4bc7415c1911761d7be87breed@google.com    REPORTER_ASSERT(reporter, 1 == data1.getRefCnt());
430e190d0e126991cfba4bc7415c1911761d7be87breed@google.com
440e190d0e126991cfba4bc7415c1911761d7be87breed@google.com    dict.set("foo", &data0);
450e190d0e126991cfba4bc7415c1911761d7be87breed@google.com    dict.set("bar", &data1);
460e190d0e126991cfba4bc7415c1911761d7be87breed@google.com    REPORTER_ASSERT(reporter, &data0 == dict.find("foo"));
470e190d0e126991cfba4bc7415c1911761d7be87breed@google.com    REPORTER_ASSERT(reporter, &data1 == dict.find("bar"));
480e190d0e126991cfba4bc7415c1911761d7be87breed@google.com    REPORTER_ASSERT(reporter, 2 == data0.getRefCnt());
490e190d0e126991cfba4bc7415c1911761d7be87breed@google.com    REPORTER_ASSERT(reporter, 2 == data1.getRefCnt());
500e190d0e126991cfba4bc7415c1911761d7be87breed@google.com
510e190d0e126991cfba4bc7415c1911761d7be87breed@google.com    dict.set("foo", &data1);
520e190d0e126991cfba4bc7415c1911761d7be87breed@google.com    REPORTER_ASSERT(reporter, &data1 == dict.find("foo"));
530e190d0e126991cfba4bc7415c1911761d7be87breed@google.com    REPORTER_ASSERT(reporter, &data1 == dict.find("bar"));
540e190d0e126991cfba4bc7415c1911761d7be87breed@google.com    REPORTER_ASSERT(reporter, 1 == data0.getRefCnt());
550e190d0e126991cfba4bc7415c1911761d7be87breed@google.com    REPORTER_ASSERT(reporter, 3 == data1.getRefCnt());
560e190d0e126991cfba4bc7415c1911761d7be87breed@google.com
570e190d0e126991cfba4bc7415c1911761d7be87breed@google.com    dict.removeAll();
580e190d0e126991cfba4bc7415c1911761d7be87breed@google.com    REPORTER_ASSERT(reporter, NULL == dict.find("foo"));
590e190d0e126991cfba4bc7415c1911761d7be87breed@google.com    REPORTER_ASSERT(reporter, NULL == dict.find("bar"));
603636ed558fb2af5a48a9634efec55fd8a87c88d7reed@google.com    REPORTER_ASSERT(reporter, 1 == data0.getRefCnt());
613636ed558fb2af5a48a9634efec55fd8a87c88d7reed@google.com    REPORTER_ASSERT(reporter, 1 == data1.getRefCnt());
623636ed558fb2af5a48a9634efec55fd8a87c88d7reed@google.com
633636ed558fb2af5a48a9634efec55fd8a87c88d7reed@google.com    {
643636ed558fb2af5a48a9634efec55fd8a87c88d7reed@google.com        SkRefDict d;
653636ed558fb2af5a48a9634efec55fd8a87c88d7reed@google.com        REPORTER_ASSERT(reporter, NULL == d.find("foo"));
663636ed558fb2af5a48a9634efec55fd8a87c88d7reed@google.com        REPORTER_ASSERT(reporter, 1 == data0.getRefCnt());
673636ed558fb2af5a48a9634efec55fd8a87c88d7reed@google.com        d.set("foo", &data0);
683636ed558fb2af5a48a9634efec55fd8a87c88d7reed@google.com        REPORTER_ASSERT(reporter, &data0 == d.find("foo"));
693636ed558fb2af5a48a9634efec55fd8a87c88d7reed@google.com        REPORTER_ASSERT(reporter, 2 == data0.getRefCnt());
703636ed558fb2af5a48a9634efec55fd8a87c88d7reed@google.com        // let d go out of scope still with a ref on data0
713636ed558fb2af5a48a9634efec55fd8a87c88d7reed@google.com    }
723636ed558fb2af5a48a9634efec55fd8a87c88d7reed@google.com    // be sure d's destructor lowered data0's owner count back to 1
733636ed558fb2af5a48a9634efec55fd8a87c88d7reed@google.com    REPORTER_ASSERT(reporter, 1 == data0.getRefCnt());
740e190d0e126991cfba4bc7415c1911761d7be87breed@google.com}
75