187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger#include "Test.h" 287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger#include "SkMetaData.h" 387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerstatic void test_ptrs(skiatest::Reporter* reporter) { 587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger SkRefCnt ref; 687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger REPORTER_ASSERT(reporter, 1 == ref.getRefCnt()); 787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger { 987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger SkMetaData md0, md1; 1087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger const char name[] = "refcnt"; 1187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 1287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger md0.setRefCnt(name, &ref); 1387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger REPORTER_ASSERT(reporter, md0.findRefCnt(name)); 1487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger REPORTER_ASSERT(reporter, md0.hasRefCnt(name, &ref)); 1587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger REPORTER_ASSERT(reporter, 2 == ref.getRefCnt()); 1687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 1787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger md1 = md0; 1887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger REPORTER_ASSERT(reporter, md1.findRefCnt(name)); 1987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger REPORTER_ASSERT(reporter, md1.hasRefCnt(name, &ref)); 2087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger REPORTER_ASSERT(reporter, 3 == ref.getRefCnt()); 2187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 2287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger REPORTER_ASSERT(reporter, md0.removeRefCnt(name)); 2387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger REPORTER_ASSERT(reporter, !md0.findRefCnt(name)); 2487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger REPORTER_ASSERT(reporter, !md0.hasRefCnt(name, &ref)); 2587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger REPORTER_ASSERT(reporter, 2 == ref.getRefCnt()); 2687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger } 2787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger REPORTER_ASSERT(reporter, 1 == ref.getRefCnt()); 2887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger} 2987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 3087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerstatic void TestMetaData(skiatest::Reporter* reporter) { 3187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger SkMetaData m1; 3287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 3387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger REPORTER_ASSERT(reporter, !m1.findS32("int")); 3487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger REPORTER_ASSERT(reporter, !m1.findScalar("scalar")); 3587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger REPORTER_ASSERT(reporter, !m1.findString("hello")); 3687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger REPORTER_ASSERT(reporter, !m1.removeS32("int")); 3787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger REPORTER_ASSERT(reporter, !m1.removeScalar("scalar")); 3887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger REPORTER_ASSERT(reporter, !m1.removeString("hello")); 3987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger REPORTER_ASSERT(reporter, !m1.removeString("true")); 4087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger REPORTER_ASSERT(reporter, !m1.removeString("false")); 4187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 4287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger m1.setS32("int", 12345); 4387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger m1.setScalar("scalar", SK_Scalar1 * 42); 4487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger m1.setString("hello", "world"); 4587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger m1.setPtr("ptr", &m1); 4687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger m1.setBool("true", true); 4787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger m1.setBool("false", false); 4887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 4987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger int32_t n; 5087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger SkScalar s; 5187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 5287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger m1.setScalar("scalar", SK_Scalar1/2); 5387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 5487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger REPORTER_ASSERT(reporter, m1.findS32("int", &n) && n == 12345); 5587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger REPORTER_ASSERT(reporter, m1.findScalar("scalar", &s) && s == SK_Scalar1/2); 5687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger REPORTER_ASSERT(reporter, !strcmp(m1.findString("hello"), "world")); 5787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger REPORTER_ASSERT(reporter, m1.hasBool("true", true)); 5887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger REPORTER_ASSERT(reporter, m1.hasBool("false", false)); 5987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 6087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger SkMetaData::Iter iter(m1); 6187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger const char* name; 6287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 6387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger static const struct { 6487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger const char* fName; 6587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger SkMetaData::Type fType; 6687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger int fCount; 6787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger } gElems[] = { 6887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger { "int", SkMetaData::kS32_Type, 1 }, 6987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger { "scalar", SkMetaData::kScalar_Type, 1 }, 7087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger { "ptr", SkMetaData::kPtr_Type, 1 }, 7187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger { "hello", SkMetaData::kString_Type, sizeof("world") }, 7287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger { "true", SkMetaData::kBool_Type, 1 }, 7387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger { "false", SkMetaData::kBool_Type, 1 } 7487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger }; 7587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 7687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger int loop = 0; 7787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger int count; 7887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger SkMetaData::Type t; 7987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger while ((name = iter.next(&t, &count)) != NULL) 8087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger { 8187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger int match = 0; 8287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger for (unsigned i = 0; i < SK_ARRAY_COUNT(gElems); i++) 8387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger { 8487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger if (!strcmp(name, gElems[i].fName)) 8587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger { 8687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger match += 1; 8787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger REPORTER_ASSERT(reporter, gElems[i].fType == t); 8887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger REPORTER_ASSERT(reporter, gElems[i].fCount == count); 8987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger } 9087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger } 9187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger REPORTER_ASSERT(reporter, match == 1); 9287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger loop += 1; 9387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger } 9487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger REPORTER_ASSERT(reporter, loop == SK_ARRAY_COUNT(gElems)); 9587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 9687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger REPORTER_ASSERT(reporter, m1.removeS32("int")); 9787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger REPORTER_ASSERT(reporter, m1.removeScalar("scalar")); 9887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger REPORTER_ASSERT(reporter, m1.removeString("hello")); 9987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger REPORTER_ASSERT(reporter, m1.removeBool("true")); 10087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger REPORTER_ASSERT(reporter, m1.removeBool("false")); 10187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 10287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger REPORTER_ASSERT(reporter, !m1.findS32("int")); 10387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger REPORTER_ASSERT(reporter, !m1.findScalar("scalar")); 10487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger REPORTER_ASSERT(reporter, !m1.findString("hello")); 10587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger REPORTER_ASSERT(reporter, !m1.findBool("true")); 10687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger REPORTER_ASSERT(reporter, !m1.findBool("false")); 10787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 10887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger test_ptrs(reporter); 10987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger} 11087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 11187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger#include "TestClassDef.h" 11287b8e645865f9633f410c02252a0fd3feb18f09bDerek SollenbergerDEFINE_TESTCLASS("MetaData", TestMetaDataClass, TestMetaData) 113