11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 21cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger/* 31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2011 Google Inc. 41cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * 51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be 61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file. 71cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger */ 805b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger#include "Test.h" 905b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger#include "SkRefDict.h" 1005b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger 1105b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenbergerclass TestRC : public SkRefCnt { 1205b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger}; 1305b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger 1405b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenbergerstatic void TestRefDict(skiatest::Reporter* reporter) { 1505b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger TestRC data0, data1; 1605b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger SkRefDict dict; 1705b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger 1805b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger REPORTER_ASSERT(reporter, NULL == dict.find(NULL)); 1905b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger REPORTER_ASSERT(reporter, NULL == dict.find("foo")); 2005b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger REPORTER_ASSERT(reporter, NULL == dict.find("bar")); 2105b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger 2205b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger dict.set("foo", &data0); 2305b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger REPORTER_ASSERT(reporter, &data0 == dict.find("foo")); 2405b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger REPORTER_ASSERT(reporter, 2 == data0.getRefCnt()); 2505b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger 2605b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger dict.set("foo", &data0); 2705b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger REPORTER_ASSERT(reporter, &data0 == dict.find("foo")); 2805b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger REPORTER_ASSERT(reporter, 2 == data0.getRefCnt()); 2905b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger 3005b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger dict.set("foo", &data1); 3105b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger REPORTER_ASSERT(reporter, &data1 == dict.find("foo")); 3205b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger REPORTER_ASSERT(reporter, 1 == data0.getRefCnt()); 3305b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger REPORTER_ASSERT(reporter, 2 == data1.getRefCnt()); 3405b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger 3505b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger dict.set("foo", NULL); 3605b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger REPORTER_ASSERT(reporter, NULL == dict.find("foo")); 3705b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger REPORTER_ASSERT(reporter, 1 == data0.getRefCnt()); 3805b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger REPORTER_ASSERT(reporter, 1 == data1.getRefCnt()); 3905b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger 4005b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger dict.set("foo", &data0); 4105b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger dict.set("bar", &data1); 4205b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger REPORTER_ASSERT(reporter, &data0 == dict.find("foo")); 4305b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger REPORTER_ASSERT(reporter, &data1 == dict.find("bar")); 4405b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger REPORTER_ASSERT(reporter, 2 == data0.getRefCnt()); 4505b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger REPORTER_ASSERT(reporter, 2 == data1.getRefCnt()); 4605b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger 4705b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger dict.set("foo", &data1); 4805b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger REPORTER_ASSERT(reporter, &data1 == dict.find("foo")); 4905b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger REPORTER_ASSERT(reporter, &data1 == dict.find("bar")); 5005b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger REPORTER_ASSERT(reporter, 1 == data0.getRefCnt()); 5105b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger REPORTER_ASSERT(reporter, 3 == data1.getRefCnt()); 5205b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger 5305b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger dict.removeAll(); 5405b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger REPORTER_ASSERT(reporter, NULL == dict.find("foo")); 5505b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger REPORTER_ASSERT(reporter, NULL == dict.find("bar")); 5605b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger REPORTER_ASSERT(reporter, 1 == data0.getRefCnt()); 5705b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger REPORTER_ASSERT(reporter, 1 == data1.getRefCnt()); 5805b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger 5905b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger { 6005b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger SkRefDict d; 6105b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger REPORTER_ASSERT(reporter, NULL == d.find("foo")); 6205b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger REPORTER_ASSERT(reporter, 1 == data0.getRefCnt()); 6305b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger d.set("foo", &data0); 6405b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger REPORTER_ASSERT(reporter, &data0 == d.find("foo")); 6505b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger REPORTER_ASSERT(reporter, 2 == data0.getRefCnt()); 6605b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger // let d go out of scope still with a ref on data0 6705b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger } 6805b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger // be sure d's destructor lowered data0's owner count back to 1 6905b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger REPORTER_ASSERT(reporter, 1 == data0.getRefCnt()); 7005b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger} 7105b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger 7205b6b4d746867a9fb02e14edfe1bf3685abeb813Derek Sollenberger#include "TestClassDef.h" 7305b6b4d746867a9fb02e14edfe1bf3685abeb813Derek SollenbergerDEFINE_TESTCLASS("RefDict", RefDictTestClass, TestRefDict) 74