static void test_peeking_front_buffered_stream(skiatest::Reporter* r, const SkStream& original, size_t bufferSize) { SkStream* dupe = original.duplicate(); REPORTER_ASSERT(r, dupe != NULL); SkAutoTDelete<SkStream> bufferedStream(SkFrontBufferedStream::Create(dupe, bufferSize)); REPORTER_ASSERT(r, bufferedStream != NULL); test_peeking_stream(r, bufferedStream, bufferSize); }
DEF_TEST(StreamPeek, reporter) { // Test a memory stream. const char gAbcs[] = "abcdefghijklmnopqrstuvwxyz"; SkMemoryStream memStream(gAbcs, strlen(gAbcs), false); test_peeking_stream(reporter, &memStream, memStream.getLength()); // Test an arbitrary file stream. file streams do not support peeking. SkFILEStream fileStream(GetResourcePath("baby_tux.webp").c_str()); REPORTER_ASSERT(reporter, fileStream.isValid()); SkAutoMalloc storage(fileStream.getLength()); for (size_t i = 1; i < fileStream.getLength(); i++) { REPORTER_ASSERT(reporter, !fileStream.peek(storage.get(), i)); } // Now test some FrontBufferedStreams for (size_t i = 1; i < memStream.getLength(); i++) { test_peeking_front_buffered_stream(reporter, memStream, i); } }