diff --git a/src/plugins/qmldesigner/designercore/imagecache/imagecachegenerator.cpp b/src/plugins/qmldesigner/designercore/imagecache/imagecachegenerator.cpp index d69b3470a9d..45ce5ff66bb 100644 --- a/src/plugins/qmldesigner/designercore/imagecache/imagecachegenerator.cpp +++ b/src/plugins/qmldesigner/designercore/imagecache/imagecachegenerator.cpp @@ -86,8 +86,10 @@ Utils::PathString createId(Utils::SmallStringView name, Utils::SmallStringView e template void callCallbacks(const Callbacks &callbacks, Argument &&...arguments) { - for (auto &&callback : callbacks) - callback(std::forward(arguments)...); + for (auto &&callback : callbacks) { + if (callback) + callback(std::forward(arguments)...); + } } } // namespace diff --git a/tests/unit/unittest/imagecachegenerator-test.cpp b/tests/unit/unittest/imagecachegenerator-test.cpp index 2bd1fdf06a7..7bdef1b0b96 100644 --- a/tests/unit/unittest/imagecachegenerator-test.cpp +++ b/tests/unit/unittest/imagecachegenerator-test.cpp @@ -485,4 +485,40 @@ TEST_F(ImageCacheGenerator, MergeAbortCallbackIfTasksAreMerged) notification.wait(); } +TEST_F(ImageCacheGenerator, DontCallNullImageCallback) +{ + EXPECT_CALL(collectorMock, start(_, _, _, _, _)) + .WillOnce([&](auto, auto, auto, auto captureCallback, auto) { + captureCallback(image1, smallImage1); + notification.notify(); + }); + + generator.generateImage("name", {}, {}, {}, {}, {}); + notification.wait(); +} + +TEST_F(ImageCacheGenerator, DontCallNullAbortCallbackForNullImage) +{ + EXPECT_CALL(collectorMock, start(_, _, _, _, _)) + .WillOnce([&](auto, auto, auto, auto captureCallback, auto) { + captureCallback(QImage{}, QImage{}); + notification.notify(); + }); + + generator.generateImage("name", {}, {}, {}, {}, {}); + notification.wait(); +} + +TEST_F(ImageCacheGenerator, DontCallNullAbortCallback) +{ + EXPECT_CALL(collectorMock, start(_, _, _, _, _)) + .WillOnce([&](auto, auto, auto, auto, auto abortCallback) { + abortCallback(QmlDesigner::ImageCache::AbortReason::Failed); + notification.notify(); + }); + + generator.generateImage("name", {}, {}, {}, {}, {}); + notification.wait(); +} + } // namespace