diff options
author | halcanary <halcanary@google.com> | 2015-05-21 08:13:27 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-05-21 08:13:27 -0700 |
commit | e797d0de67a5dd4b7b0b66dbb8b33be46b74240e (patch) | |
tree | c1e8df2fcae14ab3ca2a09725c3c55a4ade798db /tests/StreamTest.cpp | |
parent | fb5df43af87e77beeb7ca0759678f0cc95a8c6da (diff) |
SkBlockMemoryStream implements peek()
Review URL: https://codereview.chromium.org/1146903004
Diffstat (limited to 'tests/StreamTest.cpp')
-rw-r--r-- | tests/StreamTest.cpp | 64 |
1 files changed, 63 insertions, 1 deletions
diff --git a/tests/StreamTest.cpp b/tests/StreamTest.cpp index 3641f3b824..926cfc2579 100644 --- a/tests/StreamTest.cpp +++ b/tests/StreamTest.cpp @@ -272,4 +272,66 @@ DEF_TEST(StreamPeek, reporter) { test_peeking_front_buffered_stream(reporter, memStream, i); } } -#endif +#endif + +// Asserts that asset == expected and is peekable. +static void stream_peek_test(skiatest::Reporter* rep, + SkStreamAsset* asset, + const SkData* expected) { + if (asset->getLength() != expected->size()) { + ERRORF(rep, "Unexpected length."); + return; + } + SkRandom rand; + uint8_t buffer[4096]; + const uint8_t* expect = expected->bytes(); + for (size_t i = 0; i < asset->getLength(); ++i) { + uint32_t maxSize = + SkToU32(SkTMin(sizeof(buffer), asset->getLength() - i)); + size_t size = rand.nextRangeU(1, maxSize); + SkASSERT(size >= 1); + SkASSERT(size <= sizeof(buffer)); + SkASSERT(size + i <= asset->getLength()); + if (!asset->peek(buffer, size)) { + ERRORF(rep, "Peek Failed!"); + return; + } + if (0 != memcmp(buffer, &expect[i], size)) { + ERRORF(rep, "Peek returned wrong bytes!"); + return; + } + uint8_t value; + REPORTER_ASSERT(rep, 1 == asset->read(&value, 1)); + if (value != expect[i]) { + ERRORF(rep, "Read Failed!"); + return; + } + } +} + +DEF_TEST(StreamPeek_BlockMemoryStream, rep) { + const static int kSeed = 1234; + SkRandom valueSource(kSeed); + SkRandom rand(kSeed << 1); + uint8_t buffer[4096]; + SkDynamicMemoryWStream dynamicMemoryWStream; + for (int i = 0; i < 32; ++i) { + // Randomize the length of the blocks. + size_t size = rand.nextRangeU(1, sizeof(buffer)); + for (size_t j = 0; j < size; ++j) { + buffer[j] = valueSource.nextU() & 0xFF; + } + dynamicMemoryWStream.write(buffer, size); + } + SkAutoTDelete<SkStreamAsset> asset(dynamicMemoryWStream.detachAsStream()); + SkAutoTUnref<SkData> expected(SkData::NewUninitialized(asset->getLength())); + uint8_t* expectedPtr = static_cast<uint8_t*>(expected->writable_data()); + valueSource.setSeed(kSeed); // reseed. + // We want the exact same same "random" string of numbers to put + // in expected. i.e.: don't rely on SkDynamicMemoryStream to work + // correctly while we are testing SkDynamicMemoryStream. + for (size_t i = 0; i < asset->getLength(); ++i) { + expectedPtr[i] = valueSource.nextU() & 0xFF; + } + stream_peek_test(rep, asset, expected); +} |