diff options
author | bungeman@google.com <bungeman@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2013-07-19 13:55:41 +0000 |
---|---|---|
committer | bungeman@google.com <bungeman@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2013-07-19 13:55:41 +0000 |
commit | 88682b77d108a7413a166e3158e187f43211c46b (patch) | |
tree | cb94c9fd0429a6eae968bf0a8a1dc334136eb5d1 /tests/StreamTest.cpp | |
parent | a79919883e275e7a5e00afc50be10cc721f6ba1d (diff) |
Add a detachAsStream to SkDynamicMemoryWStream.
R=reed@google.com
Committed: https://code.google.com/p/skia/source/detail?r=10171
Review URL: https://codereview.chromium.org/19677002
git-svn-id: http://skia.googlecode.com/svn/trunk@10178 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'tests/StreamTest.cpp')
-rw-r--r-- | tests/StreamTest.cpp | 39 |
1 files changed, 37 insertions, 2 deletions
diff --git a/tests/StreamTest.cpp b/tests/StreamTest.cpp index cf828430a9..1eb1282ba7 100644 --- a/tests/StreamTest.cpp +++ b/tests/StreamTest.cpp @@ -32,6 +32,8 @@ static void test_loop_stream(skiatest::Reporter* reporter, SkStream* stream, // expect EOF size_t bytes = stream->read(tmp, 1); REPORTER_ASSERT(reporter, 0 == bytes); + // isAtEnd might not return true until after the first failing read. + REPORTER_ASSERT(reporter, stream->isAtEnd()); } static void test_filestreams(skiatest::Reporter* reporter, const char* tmpDir) { @@ -81,6 +83,7 @@ static void TestWStream(skiatest::Reporter* reporter) { REPORTER_ASSERT(reporter, ds.write(s, 26)); } REPORTER_ASSERT(reporter, ds.getOffset() == 100 * 26); + char* dst = new char[100 * 26 + 1]; dst[100*26] = '*'; ds.copyTo(dst); @@ -90,10 +93,42 @@ static void TestWStream(skiatest::Reporter* reporter) { } { - SkData* data = ds.copyToData(); + SkAutoTUnref<SkStreamAsset> stream(ds.detatchAsStream()); + REPORTER_ASSERT(reporter, 100 * 26 == stream->getLength()); + REPORTER_ASSERT(reporter, ds.getOffset() == 0); + test_loop_stream(reporter, stream.get(), s, 26, 100); + + SkAutoTUnref<SkStreamAsset> stream2(stream->duplicate()); + test_loop_stream(reporter, stream2.get(), s, 26, 100); + + SkAutoTUnref<SkStreamAsset> stream3(stream->fork()); + REPORTER_ASSERT(reporter, stream3->isAtEnd()); + char tmp; + size_t bytes = stream->read(&tmp, 1); + REPORTER_ASSERT(reporter, 0 == bytes); + stream3->rewind(); + test_loop_stream(reporter, stream3.get(), s, 26, 100); + } + + for (i = 0; i < 100; i++) { + REPORTER_ASSERT(reporter, ds.write(s, 26)); + } + REPORTER_ASSERT(reporter, ds.getOffset() == 100 * 26); + + { + SkAutoTUnref<SkData> data(ds.copyToData()); REPORTER_ASSERT(reporter, 100 * 26 == data->size()); REPORTER_ASSERT(reporter, memcmp(dst, data->data(), data->size()) == 0); - data->unref(); + } + + { + // Test that this works after a copyToData. + SkAutoTUnref<SkStreamAsset> stream(ds.detatchAsStream()); + REPORTER_ASSERT(reporter, ds.getOffset() == 0); + test_loop_stream(reporter, stream.get(), s, 26, 100); + + SkAutoTUnref<SkStreamAsset> stream2(stream->duplicate()); + test_loop_stream(reporter, stream2.get(), s, 26, 100); } delete[] dst; |