// Test that image encoding failures do not break picture serialization/deserialization. DEF_TEST(Image_Serialize_Encoding_Failure, reporter) { SkAutoTUnref<SkSurface> surface(SkSurface::NewRasterN32Premul(100, 100)); surface->getCanvas()->clear(SK_ColorGREEN); SkAutoTUnref<SkImage> image(surface->newImageSnapshot()); REPORTER_ASSERT(reporter, image); SkPictureRecorder recorder; SkCanvas* canvas = recorder.beginRecording(100, 100); canvas->drawImage(image, 0, 0); SkAutoTUnref<SkPicture> picture(recorder.endRecording()); REPORTER_ASSERT(reporter, picture); REPORTER_ASSERT(reporter, picture->approximateOpCount() > 0); MockSerializer emptySerializer([]() -> SkData* { return SkData::NewEmpty(); }); MockSerializer nullSerializer([]() -> SkData* { return nullptr; }); MockSerializer* serializers[] = { &emptySerializer, &nullSerializer }; for (size_t i = 0; i < SK_ARRAY_COUNT(serializers); ++i) { SkDynamicMemoryWStream wstream; REPORTER_ASSERT(reporter, !serializers[i]->didEncode()); picture->serialize(&wstream, serializers[i]); REPORTER_ASSERT(reporter, serializers[i]->didEncode()); SkAutoTDelete<SkStream> rstream(wstream.detachAsStream()); SkAutoTUnref<SkPicture> deserialized(SkPicture::CreateFromStream(rstream)); REPORTER_ASSERT(reporter, deserialized); REPORTER_ASSERT(reporter, deserialized->approximateOpCount() > 0); } }
bool DesignNetDocument::open( QString *errorString, const QString &fileName, const QString &realFileName ) { d->space->setObjectName(realFileName); Utils::XmlDeserializer deserializer(realFileName); deserializer.deserialize("DesignNetSpace", *(d->space)); emit deserialized(deserializer); return IDocument::open(errorString, fileName, realFileName); }