150a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org/*
250a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org * Copyright 2013 Google Inc.
350a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org *
450a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org * Use of this source code is governed by a BSD-style license that can be
550a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org * found in the LICENSE file.
650a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org */
750a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org
850a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org#include "SkMessageBus.h"
950a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org#include "Test.h"
1050a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org
1150a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.orgstruct TestMessage {
1250a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org    int x;
1350a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org    float y;
1450a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org};
15c665804300096c2e7617379835bb83d715538788commit-bot@chromium.orgDECLARE_SKMESSAGEBUS_MESSAGE(TestMessage)
1650a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org
1750a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.orgDEF_TEST(MessageBus, r) {
1850a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org    // Register two inboxes to receive all TestMessages.
1950a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org    SkMessageBus<TestMessage>::Inbox inbox1, inbox2;
2050a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org
2150a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org    // Send two messages.
2250a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org    const TestMessage m1 = { 5, 4.2f };
2350a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org    const TestMessage m2 = { 6, 4.3f };
2450a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org    SkMessageBus<TestMessage>::Post(m1);
2550a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org    SkMessageBus<TestMessage>::Post(m2);
2650a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org
2750a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org    // Make sure we got two.
2850a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org    SkTDArray<TestMessage> messages;
2950a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org    inbox1.poll(&messages);
3050a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org    REPORTER_ASSERT(r, 2 == messages.count());
3150a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org    REPORTER_ASSERT(r, 5 == messages[0].x);
3250a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org    REPORTER_ASSERT(r, 6 == messages[1].x);
3350a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org
3450a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org    // Send another; check we get just that one.
3550a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org    const TestMessage m3 = { 1, 0.3f };
3650a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org    SkMessageBus<TestMessage>::Post(m3);
3750a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org    inbox1.poll(&messages);
3850a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org    REPORTER_ASSERT(r, 1 == messages.count());
3950a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org    REPORTER_ASSERT(r, 1 == messages[0].x);
4050a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org
4150a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org    // Nothing was sent since the last read.
4250a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org    inbox1.poll(&messages);
4350a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org    REPORTER_ASSERT(r, 0 == messages.count());
4450a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org
4550a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org    // Over all this time, inbox2 should have piled up 3 messages.
4650a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org    inbox2.poll(&messages);
4750a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org    REPORTER_ASSERT(r, 3 == messages.count());
4850a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org    REPORTER_ASSERT(r, 5 == messages[0].x);
4950a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org    REPORTER_ASSERT(r, 6 == messages[1].x);
5050a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org    REPORTER_ASSERT(r, 1 == messages[2].x);
5150a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org}
5250a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org
5350a3043194cf278a74ff51c33c6cdb52cbe1f8f9commit-bot@chromium.org// Multithreaded tests tbd.
54