void NotificationQueueTest::testQueueDequeueUrgent() { NotificationQueue queue; queue.enqueueNotification(new QTestNotification("first")); queue.enqueueNotification(new QTestNotification("second")); queue.enqueueUrgentNotification(new QTestNotification("third")); assert (!queue.empty()); assert (queue.size() == 3); QTestNotification* pTNf = dynamic_cast<QTestNotification*>(queue.dequeueNotification()); assertNotNullPtr(pTNf); assert (pTNf->data() == "third"); pTNf->release(); assert (!queue.empty()); assert (queue.size() == 2); pTNf = dynamic_cast<QTestNotification*>(queue.dequeueNotification()); assert (pTNf->data() == "first"); pTNf->release(); assert (!queue.empty()); assert (queue.size() == 1); pTNf = dynamic_cast<QTestNotification*>(queue.dequeueNotification()); assertNotNullPtr(pTNf); assert (pTNf->data() == "second"); pTNf->release(); assert (queue.empty()); assert (queue.size() == 0); Notification* pNf = queue.dequeueNotification(); assertNullPtr(pNf); }
void NotificationQueueTest::testQueueRemove() { NotificationQueue queue; Notification::Ptr frontNotification = new QTestNotification("front"); Notification::Ptr middleNotification = new QTestNotification("middle"); Notification::Ptr backNotification = new QTestNotification("back"); queue.enqueueNotification(frontNotification); queue.enqueueNotification(new QTestNotification("dummy")); queue.enqueueNotification(middleNotification); queue.enqueueNotification(new QTestNotification("dummy")); queue.enqueueNotification(backNotification); assert (queue.size() == 5); assert (queue.remove(frontNotification)); assert (queue.size() == 4); assert (queue.remove(middleNotification)); assert (queue.size() == 3); assert (queue.remove(backNotification)); assert (queue.size() == 2); assert (!queue.remove(backNotification)); assert (queue.size() == 2); }
void NotificationQueueTest::testWaitDequeue() { NotificationQueue queue; queue.enqueueNotification(new QTestNotification("third")); queue.enqueueNotification(new QTestNotification("fourth")); assert (!queue.empty()); assert (queue.size() == 2); QTestNotification* pTNf = dynamic_cast<QTestNotification*>(queue.waitDequeueNotification(10)); assertNotNullPtr(pTNf); assert (pTNf->data() == "third"); pTNf->release(); assert (!queue.empty()); assert (queue.size() == 1); pTNf = dynamic_cast<QTestNotification*>(queue.waitDequeueNotification(10)); assertNotNullPtr(pTNf); assert (pTNf->data() == "fourth"); pTNf->release(); assert (queue.empty()); assert (queue.size() == 0); Notification* pNf = queue.waitDequeueNotification(10); assertNullPtr(pNf); }
void DatabaseTracker::notifyDatabasesChanged() { // Note that if DatabaseTracker ever becomes non-singleton, we'll have to amend this notification // mechanism to include which tracker the notification goes out on as well. DatabaseTracker& theTracker(tracker()); NotificationQueue notifications; { LockHolder locker(notificationMutex()); notifications.swap(notificationQueue()); notificationScheduled = false; } if (!theTracker.m_client) return; for (unsigned i = 0; i < notifications.size(); ++i) theTracker.m_client->dispatchDidModifyDatabase(notifications[i].first.get(), notifications[i].second); }