123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- /*
- * Copyright 2013 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
- #include "src/core/SkMessageBus.h"
- #include "tests/Test.h"
- namespace {
- struct TestMessage {
- TestMessage(int i, float f) : x(i), y(f) {}
- int x;
- float y;
- };
- static inline bool SkShouldPostMessageToBus(const TestMessage&, uint32_t) {
- return true;
- }
- }
- DECLARE_SKMESSAGEBUS_MESSAGE(TestMessage)
- DEF_TEST(MessageBus, r) {
- // Register two inboxes to receive all TestMessages.
- SkMessageBus<TestMessage>::Inbox inbox1, inbox2;
- // Send two messages.
- const TestMessage m1 = { 5, 4.2f };
- const TestMessage m2 = { 6, 4.3f };
- SkMessageBus<TestMessage>::Post(m1);
- SkMessageBus<TestMessage>::Post(m2);
- // Make sure we got two.
- SkTArray<TestMessage> messages;
- inbox1.poll(&messages);
- REPORTER_ASSERT(r, 2 == messages.count());
- REPORTER_ASSERT(r, 5 == messages[0].x);
- REPORTER_ASSERT(r, 6 == messages[1].x);
- // Send another; check we get just that one.
- const TestMessage m3 = { 1, 0.3f };
- SkMessageBus<TestMessage>::Post(m3);
- inbox1.poll(&messages);
- REPORTER_ASSERT(r, 1 == messages.count());
- REPORTER_ASSERT(r, 1 == messages[0].x);
- // Nothing was sent since the last read.
- inbox1.poll(&messages);
- REPORTER_ASSERT(r, 0 == messages.count());
- // Over all this time, inbox2 should have piled up 3 messages.
- inbox2.poll(&messages);
- REPORTER_ASSERT(r, 3 == messages.count());
- REPORTER_ASSERT(r, 5 == messages[0].x);
- REPORTER_ASSERT(r, 6 == messages[1].x);
- REPORTER_ASSERT(r, 1 == messages[2].x);
- }
- namespace {
- struct AddressedMessage {
- uint32_t fInboxID;
- };
- static inline bool SkShouldPostMessageToBus(const AddressedMessage& msg, uint32_t msgBusUniqueID) {
- SkASSERT(msgBusUniqueID);
- if (!msg.fInboxID) {
- return true;
- }
- return msgBusUniqueID == msg.fInboxID;
- }
- }
- DECLARE_SKMESSAGEBUS_MESSAGE(AddressedMessage)
- DEF_TEST(MessageBus_SkShouldPostMessageToBus, r) {
- SkMessageBus<AddressedMessage>::Inbox inbox1(1), inbox2(2);
- SkMessageBus<AddressedMessage>::Post({0}); // Should go to both
- SkMessageBus<AddressedMessage>::Post({1}); // Should go to inbox1
- SkMessageBus<AddressedMessage>::Post({2}); // Should go to inbox2
- SkMessageBus<AddressedMessage>::Post({3}); // Should go nowhere
- SkTArray<AddressedMessage> messages;
- inbox1.poll(&messages);
- REPORTER_ASSERT(r, messages.count() == 2);
- if (messages.count() == 2) {
- REPORTER_ASSERT(r, messages[0].fInboxID == 0);
- REPORTER_ASSERT(r, messages[1].fInboxID == 1);
- }
- inbox2.poll(&messages);
- REPORTER_ASSERT(r, messages.count() == 2);
- if (messages.count() == 2) {
- REPORTER_ASSERT(r, messages[0].fInboxID == 0);
- REPORTER_ASSERT(r, messages[1].fInboxID == 2);
- }
- }
- // Multithreaded tests tbd.
|