| Index: mojo/public/cpp/system/tests/wait_unittest.cc
|
| diff --git a/mojo/public/cpp/system/tests/wait_unittest.cc b/mojo/public/cpp/system/tests/wait_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..6573b169b5aa4262e4e68cc9c8d0e58366ffd8c1
|
| --- /dev/null
|
| +++ b/mojo/public/cpp/system/tests/wait_unittest.cc
|
| @@ -0,0 +1,101 @@
|
| +// Copyright 2016 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.
|
| +
|
| +// This file tests the C++ wrappers in mojo/public/cpp/system/wait.h.
|
| +
|
| +#include "mojo/public/cpp/system/wait.h"
|
| +
|
| +#include <vector>
|
| +
|
| +#include "mojo/public/cpp/system/handle.h"
|
| +#include "mojo/public/cpp/system/message_pipe.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +namespace mojo {
|
| +namespace {
|
| +
|
| +TEST(WaitTest, InvalidArgs) {
|
| + ScopedHandle h;
|
| +
|
| + EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
|
| + Wait(h.get(), ~MOJO_HANDLE_SIGNAL_NONE, 1000000, nullptr));
|
| +
|
| + std::vector<Handle> wh;
|
| + wh.push_back(h.get());
|
| + std::vector<MojoHandleSignals> sigs;
|
| + sigs.push_back(~MOJO_HANDLE_SIGNAL_NONE);
|
| + WaitManyResult wait_many_result =
|
| + WaitMany(wh, sigs, MOJO_DEADLINE_INDEFINITE, nullptr);
|
| + EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, wait_many_result.result);
|
| + EXPECT_TRUE(wait_many_result.IsIndexValid());
|
| + EXPECT_FALSE(wait_many_result.AreSignalsStatesValid());
|
| +}
|
| +
|
| +TEST(WaitTest, TimeOut) {
|
| + // |Wait()|:
|
| + {
|
| + // Need a valid handle to wait on for |Wait()|.
|
| + MessagePipe mp;
|
| + EXPECT_EQ(
|
| + MOJO_RESULT_DEADLINE_EXCEEDED,
|
| + Wait(mp.handle0.get(), MOJO_HANDLE_SIGNAL_READABLE, 100u, nullptr));
|
| + }
|
| +
|
| + // |WaitMany()|:
|
| + {
|
| + std::vector<Handle> wh;
|
| + std::vector<MojoHandleSignals> sigs;
|
| + WaitManyResult wait_many_result = WaitMany(wh, sigs, 100u, nullptr);
|
| + EXPECT_EQ(MOJO_RESULT_DEADLINE_EXCEEDED, wait_many_result.result);
|
| + EXPECT_FALSE(wait_many_result.IsIndexValid());
|
| + EXPECT_TRUE(wait_many_result.AreSignalsStatesValid());
|
| + }
|
| +}
|
| +
|
| +TEST(WaitTest, WaitManyResult) {
|
| + {
|
| + WaitManyResult wmr(MOJO_RESULT_OK);
|
| + EXPECT_FALSE(wmr.IsIndexValid());
|
| + EXPECT_TRUE(wmr.AreSignalsStatesValid());
|
| + EXPECT_EQ(MOJO_RESULT_OK, wmr.result);
|
| + }
|
| +
|
| + {
|
| + WaitManyResult wmr(MOJO_RESULT_FAILED_PRECONDITION);
|
| + EXPECT_FALSE(wmr.IsIndexValid());
|
| + EXPECT_TRUE(wmr.AreSignalsStatesValid());
|
| + EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, wmr.result);
|
| + }
|
| +
|
| + {
|
| + WaitManyResult wmr(MOJO_RESULT_INVALID_ARGUMENT);
|
| + EXPECT_FALSE(wmr.IsIndexValid());
|
| + EXPECT_FALSE(wmr.AreSignalsStatesValid());
|
| + EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, wmr.result);
|
| + }
|
| +
|
| + // These should be like "invalid argument".
|
| + EXPECT_FALSE(
|
| + WaitManyResult(MOJO_RESULT_RESOURCE_EXHAUSTED).AreSignalsStatesValid());
|
| + EXPECT_FALSE(WaitManyResult(MOJO_RESULT_BUSY).AreSignalsStatesValid());
|
| +
|
| + {
|
| + WaitManyResult wmr(MOJO_RESULT_OK, 5u);
|
| + EXPECT_TRUE(wmr.IsIndexValid());
|
| + EXPECT_TRUE(wmr.AreSignalsStatesValid());
|
| + EXPECT_EQ(MOJO_RESULT_OK, wmr.result);
|
| + EXPECT_EQ(5u, wmr.index);
|
| + }
|
| +
|
| + {
|
| + WaitManyResult wmr(MOJO_RESULT_FAILED_PRECONDITION, 5u);
|
| + EXPECT_TRUE(wmr.IsIndexValid());
|
| + EXPECT_TRUE(wmr.AreSignalsStatesValid());
|
| + EXPECT_EQ(MOJO_RESULT_FAILED_PRECONDITION, wmr.result);
|
| + EXPECT_EQ(5u, wmr.index);
|
| + }
|
| +}
|
| +
|
| +} // namespace
|
| +} // namespace mojo
|
|
|