diff options
Diffstat (limited to 'mojo/edk/js/handle_unittest.cc')
-rw-r--r-- | mojo/edk/js/handle_unittest.cc | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/mojo/edk/js/handle_unittest.cc b/mojo/edk/js/handle_unittest.cc new file mode 100644 index 0000000000..dd2562fa63 --- /dev/null +++ b/mojo/edk/js/handle_unittest.cc @@ -0,0 +1,92 @@ +// Copyright 2014 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 "base/macros.h" +#include "mojo/edk/js/handle.h" +#include "mojo/edk/js/handle_close_observer.h" +#include "mojo/public/cpp/system/core.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace mojo { +namespace edk { +namespace js { + +class HandleWrapperTest : public testing::Test, + public HandleCloseObserver { + public: + HandleWrapperTest() : closes_observed_(0) {} + + void OnWillCloseHandle() override { closes_observed_++; } + + protected: + int closes_observed_; + + private: + DISALLOW_COPY_AND_ASSIGN(HandleWrapperTest); +}; + +class TestHandleWrapper : public HandleWrapper { + public: + explicit TestHandleWrapper(MojoHandle handle) : HandleWrapper(handle) {} + + private: + DISALLOW_COPY_AND_ASSIGN(TestHandleWrapper); +}; + +// Test that calling Close() on a HandleWrapper for an invalid handle does not +// notify observers. +TEST_F(HandleWrapperTest, CloseWithInvalidHandle) { + { + TestHandleWrapper wrapper(MOJO_HANDLE_INVALID); + wrapper.AddCloseObserver(this); + ASSERT_EQ(0, closes_observed_); + wrapper.Close(); + EXPECT_EQ(0, closes_observed_); + } + EXPECT_EQ(0, closes_observed_); +} + +// Test that destroying a HandleWrapper for an invalid handle does not notify +// observers. +TEST_F(HandleWrapperTest, DestroyWithInvalidHandle) { + { + TestHandleWrapper wrapper(MOJO_HANDLE_INVALID); + wrapper.AddCloseObserver(this); + ASSERT_EQ(0, closes_observed_); + } + EXPECT_EQ(0, closes_observed_); +} + +// Test that calling Close on a HandleWrapper for a valid handle notifies +// observers once. +TEST_F(HandleWrapperTest, CloseWithValidHandle) { + { + mojo::MessagePipe pipe; + TestHandleWrapper wrapper(pipe.handle0.release().value()); + wrapper.AddCloseObserver(this); + ASSERT_EQ(0, closes_observed_); + wrapper.Close(); + EXPECT_EQ(1, closes_observed_); + // Check that calling close again doesn't notify observers. + wrapper.Close(); + EXPECT_EQ(1, closes_observed_); + } + // Check that destroying a closed HandleWrapper doesn't notify observers. + EXPECT_EQ(1, closes_observed_); +} + +// Test that destroying a HandleWrapper for a valid handle notifies observers. +TEST_F(HandleWrapperTest, DestroyWithValidHandle) { + { + mojo::MessagePipe pipe; + TestHandleWrapper wrapper(pipe.handle0.release().value()); + wrapper.AddCloseObserver(this); + ASSERT_EQ(0, closes_observed_); + } + EXPECT_EQ(1, closes_observed_); +} + +} // namespace js +} // namespace edk +} // namespace mojo |