aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/StreamTest.cpp
diff options
context:
space:
mode:
authorGravatar bungeman@google.com <bungeman@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-07-19 13:55:41 +0000
committerGravatar bungeman@google.com <bungeman@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-07-19 13:55:41 +0000
commit88682b77d108a7413a166e3158e187f43211c46b (patch)
treecb94c9fd0429a6eae968bf0a8a1dc334136eb5d1 /tests/StreamTest.cpp
parenta79919883e275e7a5e00afc50be10cc721f6ba1d (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.cpp39
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;