aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/MetaDataTest.cpp
diff options
context:
space:
mode:
authorGravatar reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2011-03-30 18:23:21 +0000
committerGravatar reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2011-03-30 18:23:21 +0000
commite733071abeb9cce9f524f5a85851bc7fbb8d867b (patch)
tree7e174ca1f6250df09960b26e7a3c19c38ec4cdd2 /tests/MetaDataTest.cpp
parent5e3496e555904b65834f72343a7e4d048c2167a7 (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.cpp112
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)