fix firing onStyleImageMissing after sprite has loaded (#14369)

This commit is contained in:
Ansis Brammanis
2019-04-08 16:28:55 -04:00
committed by GitHub
parent 37a8865703
commit 104091cd93
2 changed files with 82 additions and 6 deletions

View File

@@ -157,3 +157,78 @@ TEST(ImageManager, NotifiesRequestorImmediatelyIfDependenciesAreSatisfied) {
ASSERT_TRUE(notified);
}
class StubImageManagerObserver : public ImageManagerObserver {
public:
int count = 0;
virtual void onStyleImageMissing(const std::string&, std::function<void()> done) override {
count++;
done();
}
};
TEST(ImageManager, OnStyleImageMissingBeforeSpriteLoaded) {
ImageManager imageManager;
StubImageRequestor requestor;
StubImageManagerObserver observer;
imageManager.setObserver(&observer);
bool notified = false;
requestor.imagesAvailable = [&] (ImageMap, ImageMap, std::unordered_map<std::string, uint32_t>) {
notified = true;
};
uint64_t imageCorrelationID = 0;
ImageDependencies dependencies;
dependencies.emplace("pre", ImageType::Icon);
imageManager.getImages(requestor, std::make_pair(dependencies, imageCorrelationID));
EXPECT_EQ(observer.count, 0);
ASSERT_FALSE(notified);
imageManager.setLoaded(true);
EXPECT_EQ(observer.count, 1);
ASSERT_FALSE(notified);
imageManager.notifyIfMissingImageAdded();
EXPECT_EQ(observer.count, 1);
ASSERT_TRUE(notified);
}
TEST(ImageManager, OnStyleImageMissingAfterSpriteLoaded) {
ImageManager imageManager;
StubImageRequestor requestor;
StubImageManagerObserver observer;
imageManager.setObserver(&observer);
bool notified = false;
requestor.imagesAvailable = [&] (ImageMap, ImageMap, std::unordered_map<std::string, uint32_t>) {
notified = true;
};
EXPECT_EQ(observer.count, 0);
ASSERT_FALSE(notified);
imageManager.setLoaded(true);
uint64_t imageCorrelationID = 0;
ImageDependencies dependencies;
dependencies.emplace("after", ImageType::Icon);
imageManager.getImages(requestor, std::make_pair(dependencies, imageCorrelationID));
EXPECT_EQ(observer.count, 1);
ASSERT_FALSE(notified);
imageManager.notifyIfMissingImageAdded();
EXPECT_EQ(observer.count, 1);
ASSERT_TRUE(notified);
}