diff options
author | reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2012-07-11 17:24:49 +0000 |
---|---|---|
committer | reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2012-07-11 17:24:49 +0000 |
commit | 91bd45967c6ca1ec408a0fefd3de0dcf3d03294a (patch) | |
tree | af63be29f18d9206eb09f3a773bdee1800ab99c7 /tests/DataRefTest.cpp | |
parent | 22b13f3628ff3560319d32fca0891608dc80bd41 (diff) |
add SkDataSet class, so SkAnnotation can be more immutable-like
Review URL: https://codereview.appspot.com/6354091
git-svn-id: http://skia.googlecode.com/svn/trunk@4542 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'tests/DataRefTest.cpp')
-rw-r--r-- | tests/DataRefTest.cpp | 84 |
1 files changed, 82 insertions, 2 deletions
diff --git a/tests/DataRefTest.cpp b/tests/DataRefTest.cpp index dc7f42407f..8c9d15154d 100644 --- a/tests/DataRefTest.cpp +++ b/tests/DataRefTest.cpp @@ -7,6 +7,85 @@ */ #include "Test.h" #include "SkData.h" +#include "SkDataSet.h" +#include "SkStream.h" + +template <typename T> class SkTUnref { +public: + SkTUnref(T* ref) : fRef(ref) {} + ~SkTUnref() { fRef->unref(); } + + operator T*() { return fRef; } + operator const T*() { return fRef; } + +private: + T* fRef; +}; + +static void unrefAll(const SkDataSet::Pair pairs[], int count) { + for (int i = 0; i < count; ++i) { + pairs[i].fValue->unref(); + } +} + +// asserts that inner is a subset of outer +static void test_dataset_subset(skiatest::Reporter* reporter, + const SkDataSet& outer, const SkDataSet& inner) { + SkDataSet::Iter iter(inner); + for (; !iter.done(); iter.next()) { + SkData* outerData = outer.find(iter.key()); + REPORTER_ASSERT(reporter, outerData); + REPORTER_ASSERT(reporter, outerData->equals(iter.value())); + } +} + +static void test_datasets_equal(skiatest::Reporter* reporter, + const SkDataSet& ds0, const SkDataSet& ds1) { + REPORTER_ASSERT(reporter, ds0.count() == ds1.count()); + + test_dataset_subset(reporter, ds0, ds1); + test_dataset_subset(reporter, ds1, ds0); +} + +static void test_dataset(skiatest::Reporter* reporter, const SkDataSet& ds, + int count) { + REPORTER_ASSERT(reporter, ds.count() == count); + + SkDataSet::Iter iter(ds); + int index = 0; + for (; !iter.done(); iter.next()) { + const char* name = iter.key(); + SkData* data = iter.value(); + SkDebugf("[%d] %s:%s\n", index, name, (const char*)data->bytes()); + index += 1; + } + REPORTER_ASSERT(reporter, index == count); + + SkDynamicMemoryWStream ostream; + ds.writeToStream(&ostream); + SkMemoryStream istream; + istream.setData(ostream.copyToData())->unref(); + SkDataSet copy(&istream); + + test_datasets_equal(reporter, ds, copy); +} + +static void test_dataset(skiatest::Reporter* reporter) { + SkDataSet set0(NULL, 0); + SkDataSet set1("hello", SkTUnref<SkData>(SkData::NewWithCString("world"))); + + const SkDataSet::Pair pairs[] = { + { "one", SkData::NewWithCString("1") }, + { "two", SkData::NewWithCString("2") }, + { "three", SkData::NewWithCString("3") }, + }; + SkDataSet set3(pairs, 3); + unrefAll(pairs, 3); + + test_dataset(reporter, set0, 0); + test_dataset(reporter, set1, 1); + test_dataset(reporter, set3, 3); +} static void* gGlobal; @@ -40,7 +119,7 @@ static void test_cstring(skiatest::Reporter* reporter) { REPORTER_ASSERT(reporter, 0 == *r2->bytes()); } -static void TestDataRef(skiatest::Reporter* reporter) { +static void TestData(skiatest::Reporter* reporter) { const char* str = "We the people, in order to form a more perfect union."; const int N = 10; @@ -66,7 +145,8 @@ static void TestDataRef(skiatest::Reporter* reporter) { tmp->unref(); test_cstring(reporter); + test_dataset(reporter); } #include "TestClassDef.h" -DEFINE_TESTCLASS("DataRef", DataRefTestClass, TestDataRef) +DEFINE_TESTCLASS("Data", DataTestClass, TestData) |