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