Home | History | Annotate | Download | only in tests
      1 /*
      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  */
      7 
      8 #include "SkRefDict.h"
      9 #include "Test.h"
     10 
     11 class TestRC : public SkRefCnt {
     12 public:
     13 
     14 private:
     15     typedef SkRefCnt INHERITED;
     16 };
     17 
     18 DEF_TEST(RefDict, reporter) {
     19     TestRC    data0, data1;
     20     SkRefDict dict;
     21 
     22     REPORTER_ASSERT(reporter, nullptr == dict.find(nullptr));
     23     REPORTER_ASSERT(reporter, nullptr == dict.find("foo"));
     24     REPORTER_ASSERT(reporter, nullptr == dict.find("bar"));
     25 
     26     dict.set("foo", &data0);
     27     REPORTER_ASSERT(reporter, &data0 == dict.find("foo"));
     28     REPORTER_ASSERT(reporter, !data0.unique());
     29 
     30     dict.set("foo", &data0);
     31     REPORTER_ASSERT(reporter, &data0 == dict.find("foo"));
     32     REPORTER_ASSERT(reporter, !data0.unique());
     33 
     34     dict.set("foo", &data1);
     35     REPORTER_ASSERT(reporter, &data1 == dict.find("foo"));
     36     REPORTER_ASSERT(reporter, data0.unique());
     37     REPORTER_ASSERT(reporter, !data1.unique());
     38 
     39     dict.set("foo", nullptr);
     40     REPORTER_ASSERT(reporter, nullptr == dict.find("foo"));
     41     REPORTER_ASSERT(reporter, data0.unique());
     42     REPORTER_ASSERT(reporter, data1.unique());
     43 
     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"));
     48     REPORTER_ASSERT(reporter, !data0.unique());
     49     REPORTER_ASSERT(reporter, !data1.unique());
     50 
     51     dict.set("foo", &data1);
     52     REPORTER_ASSERT(reporter, &data1 == dict.find("foo"));
     53     REPORTER_ASSERT(reporter, &data1 == dict.find("bar"));
     54     REPORTER_ASSERT(reporter, data0.unique());
     55     REPORTER_ASSERT(reporter, !data1.unique());
     56 
     57     dict.removeAll();
     58     REPORTER_ASSERT(reporter, nullptr == dict.find("foo"));
     59     REPORTER_ASSERT(reporter, nullptr == dict.find("bar"));
     60     REPORTER_ASSERT(reporter, data0.unique());
     61     REPORTER_ASSERT(reporter, data1.unique());
     62 
     63     {
     64         SkRefDict d;
     65         REPORTER_ASSERT(reporter, nullptr == d.find("foo"));
     66         REPORTER_ASSERT(reporter, data0.unique());
     67         d.set("foo", &data0);
     68         REPORTER_ASSERT(reporter, &data0 == d.find("foo"));
     69         REPORTER_ASSERT(reporter, !data0.unique());
     70         // 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
     73     REPORTER_ASSERT(reporter, data0.unique());
     74 }
     75