From 88682b77d108a7413a166e3158e187f43211c46b Mon Sep 17 00:00:00 2001 From: "bungeman@google.com" Date: Fri, 19 Jul 2013 13:55:41 +0000 Subject: 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 --- tests/StreamTest.cpp | 39 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) (limited to 'tests/StreamTest.cpp') 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 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 stream2(stream->duplicate()); + test_loop_stream(reporter, stream2.get(), s, 26, 100); + + SkAutoTUnref 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 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 stream(ds.detatchAsStream()); + REPORTER_ASSERT(reporter, ds.getOffset() == 0); + test_loop_stream(reporter, stream.get(), s, 26, 100); + + SkAutoTUnref stream2(stream->duplicate()); + test_loop_stream(reporter, stream2.get(), s, 26, 100); } delete[] dst; -- cgit v1.2.3