| Index: mojo/common/message_pump_mojo_unittest.cc
|
| diff --git a/mojo/common/message_pump_mojo_unittest.cc b/mojo/common/message_pump_mojo_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..5d695f6a56406b106bbbd1c50a18a0a25d368040
|
| --- /dev/null
|
| +++ b/mojo/common/message_pump_mojo_unittest.cc
|
| @@ -0,0 +1,124 @@
|
| +// Copyright 2013 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "mojo/common/message_pump_mojo.h"
|
| +
|
| +#include "base/message_loop/message_loop_test.h"
|
| +#include "base/run_loop.h"
|
| +#include "mojo/common/message_pump_mojo_handler.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +#include "third_party/mojo/src/mojo/public/cpp/system/core.h"
|
| +
|
| +namespace mojo {
|
| +namespace common {
|
| +namespace test {
|
| +
|
| +scoped_ptr<base::MessagePump> CreateMojoMessagePump() {
|
| + return scoped_ptr<base::MessagePump>(new MessagePumpMojo());
|
| +}
|
| +
|
| +RUN_MESSAGE_LOOP_TESTS(Mojo, &CreateMojoMessagePump);
|
| +
|
| +class CountingMojoHandler : public MessagePumpMojoHandler {
|
| + public:
|
| + CountingMojoHandler() : success_count_(0), error_count_(0) {}
|
| +
|
| + void OnHandleReady(const Handle& handle) override {
|
| + ReadMessageRaw(static_cast<const MessagePipeHandle&>(handle),
|
| + NULL,
|
| + NULL,
|
| + NULL,
|
| + NULL,
|
| + MOJO_READ_MESSAGE_FLAG_NONE);
|
| + ++success_count_;
|
| + }
|
| + void OnHandleError(const Handle& handle, MojoResult result) override {
|
| + ++error_count_;
|
| + }
|
| +
|
| + int success_count() { return success_count_; }
|
| + int error_count() { return error_count_; }
|
| +
|
| + private:
|
| + int success_count_;
|
| + int error_count_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(CountingMojoHandler);
|
| +};
|
| +
|
| +class CountingObserver : public MessagePumpMojo::Observer {
|
| + public:
|
| + void WillSignalHandler() override { will_signal_handler_count++; }
|
| + void DidSignalHandler() override { did_signal_handler_count++; }
|
| +
|
| + int will_signal_handler_count = 0;
|
| + int did_signal_handler_count = 0;
|
| +};
|
| +
|
| +TEST(MessagePumpMojo, RunUntilIdle) {
|
| + base::MessageLoop message_loop(MessagePumpMojo::Create());
|
| + CountingMojoHandler handler;
|
| + MessagePipe handles;
|
| + MessagePumpMojo::current()->AddHandler(&handler,
|
| + handles.handle0.get(),
|
| + MOJO_HANDLE_SIGNAL_READABLE,
|
| + base::TimeTicks());
|
| + WriteMessageRaw(
|
| + handles.handle1.get(), NULL, 0, NULL, 0, MOJO_WRITE_MESSAGE_FLAG_NONE);
|
| + WriteMessageRaw(
|
| + handles.handle1.get(), NULL, 0, NULL, 0, MOJO_WRITE_MESSAGE_FLAG_NONE);
|
| + base::RunLoop run_loop;
|
| + run_loop.RunUntilIdle();
|
| + EXPECT_EQ(2, handler.success_count());
|
| +}
|
| +
|
| +TEST(MessagePumpMojo, Observer) {
|
| + base::MessageLoop message_loop(MessagePumpMojo::Create());
|
| +
|
| + CountingObserver observer;
|
| + MessagePumpMojo::current()->AddObserver(&observer);
|
| +
|
| + CountingMojoHandler handler;
|
| + MessagePipe handles;
|
| + MessagePumpMojo::current()->AddHandler(&handler,
|
| + handles.handle0.get(),
|
| + MOJO_HANDLE_SIGNAL_READABLE,
|
| + base::TimeTicks());
|
| + WriteMessageRaw(
|
| + handles.handle1.get(), NULL, 0, NULL, 0, MOJO_WRITE_MESSAGE_FLAG_NONE);
|
| + base::RunLoop run_loop;
|
| + run_loop.RunUntilIdle();
|
| + EXPECT_EQ(1, handler.success_count());
|
| + EXPECT_EQ(1, observer.will_signal_handler_count);
|
| + EXPECT_EQ(1, observer.did_signal_handler_count);
|
| + MessagePumpMojo::current()->RemoveObserver(&observer);
|
| +
|
| + WriteMessageRaw(
|
| + handles.handle1.get(), NULL, 0, NULL, 0, MOJO_WRITE_MESSAGE_FLAG_NONE);
|
| + base::RunLoop run_loop2;
|
| + run_loop2.RunUntilIdle();
|
| + EXPECT_EQ(2, handler.success_count());
|
| + EXPECT_EQ(1, observer.will_signal_handler_count);
|
| + EXPECT_EQ(1, observer.did_signal_handler_count);
|
| +}
|
| +
|
| +TEST(MessagePumpMojo, UnregisterAfterDeadline) {
|
| + base::MessageLoop message_loop(MessagePumpMojo::Create());
|
| + CountingMojoHandler handler;
|
| + MessagePipe handles;
|
| + MessagePumpMojo::current()->AddHandler(
|
| + &handler,
|
| + handles.handle0.get(),
|
| + MOJO_HANDLE_SIGNAL_READABLE,
|
| + base::TimeTicks::Now() - base::TimeDelta::FromSeconds(1));
|
| + for (int i = 0; i < 2; ++i) {
|
| + base::RunLoop run_loop;
|
| + run_loop.RunUntilIdle();
|
| + }
|
| + EXPECT_EQ(1, handler.error_count());
|
| +}
|
| +
|
| +} // namespace test
|
| +} // namespace common
|
| +} // namespace mojo
|
|
|