
/*
 * Copyright 2011 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */
#include "Test.h"
#include "SkRefDict.h"

class TestRC : public SkRefCnt {
public:
    SK_DECLARE_INST_COUNT(TestRC)
private:
    typedef SkRefCnt INHERITED;
};

SK_DEFINE_INST_COUNT(TestRC)

static void TestRefDict(skiatest::Reporter* reporter) {
    TestRC    data0, data1;
    SkRefDict dict;

    REPORTER_ASSERT(reporter, NULL == dict.find(NULL));
    REPORTER_ASSERT(reporter, NULL == dict.find("foo"));
    REPORTER_ASSERT(reporter, NULL == dict.find("bar"));

    dict.set("foo", &data0);
    REPORTER_ASSERT(reporter, &data0 == dict.find("foo"));
    REPORTER_ASSERT(reporter, 2 == data0.getRefCnt());

    dict.set("foo", &data0);
    REPORTER_ASSERT(reporter, &data0 == dict.find("foo"));
    REPORTER_ASSERT(reporter, 2 == data0.getRefCnt());

    dict.set("foo", &data1);
    REPORTER_ASSERT(reporter, &data1 == dict.find("foo"));
    REPORTER_ASSERT(reporter, 1 == data0.getRefCnt());
    REPORTER_ASSERT(reporter, 2 == data1.getRefCnt());

    dict.set("foo", NULL);
    REPORTER_ASSERT(reporter, NULL == dict.find("foo"));
    REPORTER_ASSERT(reporter, 1 == data0.getRefCnt());
    REPORTER_ASSERT(reporter, 1 == data1.getRefCnt());

    dict.set("foo", &data0);
    dict.set("bar", &data1);
    REPORTER_ASSERT(reporter, &data0 == dict.find("foo"));
    REPORTER_ASSERT(reporter, &data1 == dict.find("bar"));
    REPORTER_ASSERT(reporter, 2 == data0.getRefCnt());
    REPORTER_ASSERT(reporter, 2 == data1.getRefCnt());

    dict.set("foo", &data1);
    REPORTER_ASSERT(reporter, &data1 == dict.find("foo"));
    REPORTER_ASSERT(reporter, &data1 == dict.find("bar"));
    REPORTER_ASSERT(reporter, 1 == data0.getRefCnt());
    REPORTER_ASSERT(reporter, 3 == data1.getRefCnt());

    dict.removeAll();
    REPORTER_ASSERT(reporter, NULL == dict.find("foo"));
    REPORTER_ASSERT(reporter, NULL == dict.find("bar"));
    REPORTER_ASSERT(reporter, 1 == data0.getRefCnt());
    REPORTER_ASSERT(reporter, 1 == data1.getRefCnt());

    {
        SkRefDict d;
        REPORTER_ASSERT(reporter, NULL == d.find("foo"));
        REPORTER_ASSERT(reporter, 1 == data0.getRefCnt());
        d.set("foo", &data0);
        REPORTER_ASSERT(reporter, &data0 == d.find("foo"));
        REPORTER_ASSERT(reporter, 2 == data0.getRefCnt());
        // let d go out of scope still with a ref on data0
    }
    // be sure d's destructor lowered data0's owner count back to 1
    REPORTER_ASSERT(reporter, 1 == data0.getRefCnt());
}

#include "TestClassDef.h"
DEFINE_TESTCLASS("RefDict", RefDictTestClass, TestRefDict)
