diff options
author | 2011-03-30 18:23:21 +0000 | |
---|---|---|
committer | 2011-03-30 18:23:21 +0000 | |
commit | e733071abeb9cce9f524f5a85851bc7fbb8d867b (patch) | |
tree | 7e174ca1f6250df09960b26e7a3c19c38ec4cdd2 /tests/MetaDataTest.cpp | |
parent | 5e3496e555904b65834f72343a7e4d048c2167a7 (diff) |
add refcnt helper to metadata
add unittests for metadata
git-svn-id: http://skia.googlecode.com/svn/trunk@1019 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'tests/MetaDataTest.cpp')
-rw-r--r-- | tests/MetaDataTest.cpp | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/tests/MetaDataTest.cpp b/tests/MetaDataTest.cpp new file mode 100644 index 0000000000..70829d49d7 --- /dev/null +++ b/tests/MetaDataTest.cpp @@ -0,0 +1,112 @@ +#include "Test.h" +#include "SkMetaData.h" + +static void test_ptrs(skiatest::Reporter* reporter) { + SkRefCnt ref; + REPORTER_ASSERT(reporter, 1 == ref.getRefCnt()); + + { + SkMetaData md0, md1; + const char name[] = "refcnt"; + + md0.setRefCnt(name, &ref); + REPORTER_ASSERT(reporter, md0.findRefCnt(name)); + REPORTER_ASSERT(reporter, md0.hasRefCnt(name, &ref)); + REPORTER_ASSERT(reporter, 2 == ref.getRefCnt()); + + md1 = md0; + REPORTER_ASSERT(reporter, md1.findRefCnt(name)); + REPORTER_ASSERT(reporter, md1.hasRefCnt(name, &ref)); + REPORTER_ASSERT(reporter, 3 == ref.getRefCnt()); + + REPORTER_ASSERT(reporter, md0.removeRefCnt(name)); + REPORTER_ASSERT(reporter, !md0.findRefCnt(name)); + REPORTER_ASSERT(reporter, !md0.hasRefCnt(name, &ref)); + REPORTER_ASSERT(reporter, 2 == ref.getRefCnt()); + } + REPORTER_ASSERT(reporter, 1 == ref.getRefCnt()); +} + +static void TestMetaData(skiatest::Reporter* reporter) { + SkMetaData m1; + + REPORTER_ASSERT(reporter, !m1.findS32("int")); + REPORTER_ASSERT(reporter, !m1.findScalar("scalar")); + REPORTER_ASSERT(reporter, !m1.findString("hello")); + REPORTER_ASSERT(reporter, !m1.removeS32("int")); + REPORTER_ASSERT(reporter, !m1.removeScalar("scalar")); + REPORTER_ASSERT(reporter, !m1.removeString("hello")); + REPORTER_ASSERT(reporter, !m1.removeString("true")); + REPORTER_ASSERT(reporter, !m1.removeString("false")); + + m1.setS32("int", 12345); + m1.setScalar("scalar", SK_Scalar1 * 42); + m1.setString("hello", "world"); + m1.setPtr("ptr", &m1); + m1.setBool("true", true); + m1.setBool("false", false); + + int32_t n; + SkScalar s; + + m1.setScalar("scalar", SK_Scalar1/2); + + REPORTER_ASSERT(reporter, m1.findS32("int", &n) && n == 12345); + REPORTER_ASSERT(reporter, m1.findScalar("scalar", &s) && s == SK_Scalar1/2); + REPORTER_ASSERT(reporter, !strcmp(m1.findString("hello"), "world")); + REPORTER_ASSERT(reporter, m1.hasBool("true", true)); + REPORTER_ASSERT(reporter, m1.hasBool("false", false)); + + SkMetaData::Iter iter(m1); + const char* name; + + static const struct { + const char* fName; + SkMetaData::Type fType; + int fCount; + } gElems[] = { + { "int", SkMetaData::kS32_Type, 1 }, + { "scalar", SkMetaData::kScalar_Type, 1 }, + { "ptr", SkMetaData::kPtr_Type, 1 }, + { "hello", SkMetaData::kString_Type, sizeof("world") }, + { "true", SkMetaData::kBool_Type, 1 }, + { "false", SkMetaData::kBool_Type, 1 } + }; + + int loop = 0; + int count; + SkMetaData::Type t; + while ((name = iter.next(&t, &count)) != NULL) + { + int match = 0; + for (unsigned i = 0; i < SK_ARRAY_COUNT(gElems); i++) + { + if (!strcmp(name, gElems[i].fName)) + { + match += 1; + REPORTER_ASSERT(reporter, gElems[i].fType == t); + REPORTER_ASSERT(reporter, gElems[i].fCount == count); + } + } + REPORTER_ASSERT(reporter, match == 1); + loop += 1; + } + REPORTER_ASSERT(reporter, loop == SK_ARRAY_COUNT(gElems)); + + REPORTER_ASSERT(reporter, m1.removeS32("int")); + REPORTER_ASSERT(reporter, m1.removeScalar("scalar")); + REPORTER_ASSERT(reporter, m1.removeString("hello")); + REPORTER_ASSERT(reporter, m1.removeBool("true")); + REPORTER_ASSERT(reporter, m1.removeBool("false")); + + REPORTER_ASSERT(reporter, !m1.findS32("int")); + REPORTER_ASSERT(reporter, !m1.findScalar("scalar")); + REPORTER_ASSERT(reporter, !m1.findString("hello")); + REPORTER_ASSERT(reporter, !m1.findBool("true")); + REPORTER_ASSERT(reporter, !m1.findBool("false")); + + test_ptrs(reporter); +} + +#include "TestClassDef.h" +DEFINE_TESTCLASS("MetaData", TestMetaDataClass, TestMetaData) |