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); } }
// This test uses file system operations that don't work out of the // box on iOS. It's likely that we don't need them on iOS. Ignoring for now. // TODO(stephana): Re-evaluate if we need this in the future. DEF_TEST(StreamPeek, reporter) { // Test a memory stream. const char gAbcs[] = "abcdefghijklmnopqrstuvwxyz"; SkMemoryStream memStream(gAbcs, strlen(gAbcs), false); test_fully_peekable_stream(reporter, &memStream, memStream.getLength()); // Test an arbitrary file stream. file streams do not support peeking. auto tmpdir = skiatest::GetTmpDir(); if (tmpdir.isEmpty()) { ERRORF(reporter, "no tmp dir!"); return; } auto path = SkOSPath::Join(tmpdir.c_str(), "file"); { SkFILEWStream wStream(path.c_str()); constexpr char filename[] = "images/baby_tux.webp"; auto data = GetResourceAsData(filename); if (!data || data->size() == 0) { ERRORF(reporter, "resource missing: %s\n", filename); return; } if (!wStream.isValid() || !wStream.write(data->data(), data->size())) { ERRORF(reporter, "error wrtiting to file %s", path.c_str()); return; } } SkFILEStream fileStream(path.c_str()); REPORTER_ASSERT(reporter, fileStream.isValid()); if (!fileStream.isValid()) { return; } SkAutoMalloc storage(fileStream.getLength()); for (size_t i = 1; i < fileStream.getLength(); i++) { REPORTER_ASSERT(reporter, fileStream.peek(storage.get(), i) == 0); } // Now test some FrontBufferedStreams for (size_t i = 1; i < memStream.getLength(); i++) { test_peeking_front_buffered_stream(reporter, memStream, i); } }