| Index: mojo/public/cpp/bindings/tests/synchronous_interface_ptr_unittest.cc
|
| diff --git a/mojo/public/cpp/bindings/tests/synchronous_interface_ptr_unittest.cc b/mojo/public/cpp/bindings/tests/synchronous_interface_ptr_unittest.cc
|
| deleted file mode 100644
|
| index 9fd364e6c8d096f39ea4b9f198b797ecee106cb1..0000000000000000000000000000000000000000
|
| --- a/mojo/public/cpp/bindings/tests/synchronous_interface_ptr_unittest.cc
|
| +++ /dev/null
|
| @@ -1,224 +0,0 @@
|
| -// 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.
|
| -
|
| -#include "mojo/public/cpp/bindings/synchronous_interface_ptr.h"
|
| -
|
| -#include <thread>
|
| -#include <utility>
|
| -
|
| -#include "gtest/gtest.h"
|
| -#include "mojo/public/cpp/bindings/binding.h"
|
| -#include "mojo/public/cpp/bindings/interface_request.h"
|
| -#include "mojo/public/cpp/bindings/strong_binding.h"
|
| -#include "mojo/public/cpp/utility/run_loop.h"
|
| -#include "mojo/public/interfaces/bindings/tests/math_calculator.mojom-sync.h"
|
| -#include "mojo/public/interfaces/bindings/tests/math_calculator.mojom.h"
|
| -#include "mojo/public/interfaces/bindings/tests/scoping.mojom-sync.h"
|
| -#include "mojo/public/interfaces/bindings/tests/scoping.mojom.h"
|
| -
|
| -namespace mojo {
|
| -namespace test {
|
| -namespace {
|
| -
|
| -using CalcCallback = mojo::Callback<void(double)>;
|
| -
|
| -// This runs in a separate thread.
|
| -class MathCalculatorImpl : public math::Calculator {
|
| - public:
|
| - explicit MathCalculatorImpl(InterfaceRequest<math::Calculator> request)
|
| - : total_(0.0), binding_(this, request.Pass()) {}
|
| - ~MathCalculatorImpl() override {}
|
| -
|
| - void Clear(const CalcCallback& callback) override {
|
| - total_ = 0.0;
|
| - callback.Run(total_);
|
| - }
|
| -
|
| - void Add(double value, const CalcCallback& callback) override {
|
| - total_ += value;
|
| - callback.Run(total_);
|
| - }
|
| -
|
| - void Multiply(double value, const CalcCallback& callback) override {
|
| - total_ *= value;
|
| - callback.Run(total_);
|
| - }
|
| -
|
| - private:
|
| - double total_;
|
| - Binding<math::Calculator> binding_;
|
| -};
|
| -
|
| -class SynchronousInterfacePtrTest : public testing::Test {
|
| - public:
|
| - ~SynchronousInterfacePtrTest() override { loop_.RunUntilIdle(); }
|
| -
|
| - void PumpMessages() { loop_.RunUntilIdle(); }
|
| -
|
| - // This is meant to be passed in to an std::thread -- the thread will have its
|
| - // own RunLoop!
|
| - static void StartMathCalculator(InterfaceRequest<math::Calculator> server) {
|
| - // Runloop is thread-local, and this is what the MathCalculatorImpl will end
|
| - // up using.
|
| - RunLoop loop;
|
| - MathCalculatorImpl calc_impl(std::move(server));
|
| - loop.Run();
|
| - }
|
| -
|
| - private:
|
| - RunLoop loop_;
|
| -};
|
| -
|
| -TEST_F(SynchronousInterfacePtrTest, IsBound) {
|
| - SynchronousInterfacePtr<math::Calculator> calc;
|
| - EXPECT_FALSE(calc.is_bound());
|
| - EXPECT_FALSE(calc);
|
| -
|
| - MathCalculatorImpl calc_impl(GetSynchronousProxy(&calc));
|
| - EXPECT_TRUE(calc.is_bound());
|
| - EXPECT_TRUE(calc);
|
| -}
|
| -
|
| -// Do an end to end
|
| -TEST_F(SynchronousInterfacePtrTest, EndToEnd) {
|
| - SynchronousInterfacePtr<math::Calculator> calc;
|
| - std::thread server(StartMathCalculator, GetSynchronousProxy(&calc));
|
| -
|
| - double out;
|
| - calc->Add(2.0, &out);
|
| - calc->Multiply(5.0, &out);
|
| - EXPECT_EQ(10.0, out);
|
| -
|
| - calc.PassInterfaceHandle();
|
| - server.join();
|
| -}
|
| -
|
| -// Move them around.
|
| -TEST_F(SynchronousInterfacePtrTest, Movable) {
|
| - SynchronousInterfacePtr<math::Calculator> a;
|
| - SynchronousInterfacePtr<math::Calculator> b;
|
| - MathCalculatorImpl calc_impl(GetSynchronousProxy(&b));
|
| -
|
| - EXPECT_TRUE(!a);
|
| - EXPECT_FALSE(!b);
|
| -
|
| - a = std::move(b);
|
| -
|
| - EXPECT_FALSE(!a);
|
| - EXPECT_TRUE(!b);
|
| -}
|
| -
|
| -// Test ::reset() and the explicit bool operator.
|
| -TEST_F(SynchronousInterfacePtrTest, Resettable) {
|
| - MessagePipe pipe;
|
| - // Save this so we can test it later.
|
| - Handle handle = pipe.handle0.get();
|
| -
|
| - SynchronousInterfacePtr<math::Calculator> a;
|
| - EXPECT_TRUE(!a);
|
| - a = SynchronousInterfacePtr<math::Calculator>::Create(
|
| - InterfaceHandle<math::Calculator>(std::move(pipe.handle0), 0u));
|
| - EXPECT_FALSE(!a);
|
| -
|
| - a.reset();
|
| - EXPECT_TRUE(!a);
|
| -
|
| - // Test that handle was closed.
|
| - EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, CloseRaw(handle));
|
| -}
|
| -
|
| -TEST_F(SynchronousInterfacePtrTest, SetNull) {
|
| - MessagePipe pipe;
|
| - auto a = SynchronousInterfacePtr<math::Calculator>::Create(
|
| - InterfaceHandle<math::Calculator>(std::move(pipe.handle0), 0u));
|
| -
|
| - EXPECT_TRUE(a);
|
| - a = nullptr;
|
| - EXPECT_FALSE(a);
|
| -}
|
| -
|
| -// SynchronousInterfacePtr<> will return false on method invocations if its
|
| -// underlying end of the pipe is dead.
|
| -TEST_F(SynchronousInterfacePtrTest, EncounteredError) {
|
| - SynchronousInterfacePtr<math::Calculator> calc;
|
| - {
|
| - MathCalculatorImpl calc_impl(GetSynchronousProxy(&calc));
|
| - EXPECT_TRUE(calc.is_bound());
|
| - }
|
| -
|
| - EXPECT_TRUE(calc.is_bound());
|
| -
|
| - double out = 0.0;
|
| - EXPECT_FALSE(calc->Add(2.0, &out));
|
| - EXPECT_EQ(0.0, out);
|
| -}
|
| -
|
| -class CImpl : public C {
|
| - public:
|
| - CImpl(bool* d_called, InterfaceRequest<C> request)
|
| - : d_called_(d_called), binding_(this, request.Pass()) {}
|
| - ~CImpl() override {}
|
| -
|
| - private:
|
| - void D() override { *d_called_ = true; }
|
| -
|
| - bool* d_called_;
|
| - StrongBinding<C> binding_;
|
| -};
|
| -
|
| -class BImpl : public B {
|
| - public:
|
| - BImpl(bool* d_called, InterfaceRequest<B> request)
|
| - : d_called_(d_called), binding_(this, request.Pass()) {}
|
| - ~BImpl() override {}
|
| -
|
| - private:
|
| - void GetC(InterfaceRequest<C> c) override { new CImpl(d_called_, c.Pass()); }
|
| -
|
| - bool* d_called_;
|
| - StrongBinding<B> binding_;
|
| -};
|
| -
|
| -class AImpl : public A {
|
| - public:
|
| - explicit AImpl(InterfaceRequest<A> request)
|
| - : d_called_(false), binding_(this, request.Pass()) {}
|
| - ~AImpl() override {}
|
| -
|
| - bool d_called() const { return d_called_; }
|
| -
|
| - private:
|
| - void GetB(InterfaceRequest<B> b) override { new BImpl(&d_called_, b.Pass()); }
|
| -
|
| - bool d_called_;
|
| - Binding<A> binding_;
|
| -};
|
| -
|
| -// Test that, for synchronous method calls that don't have return args, the
|
| -// bindings return right away, leaving the messages in the message pipe while
|
| -// closing their end.
|
| -TEST_F(SynchronousInterfacePtrTest, Scoping) {
|
| - SynchronousInterfacePtr<A> a;
|
| - AImpl a_impl(GetSynchronousProxy(&a));
|
| -
|
| - EXPECT_FALSE(a_impl.d_called());
|
| -
|
| - {
|
| - SynchronousInterfacePtr<B> b;
|
| - a->GetB(GetSynchronousProxy(&b));
|
| - SynchronousInterfacePtr<C> c;
|
| - b->GetC(GetSynchronousProxy(&c));
|
| - c->D();
|
| - }
|
| -
|
| - // While B & C have fallen out of scope, the service-side endpoints of the
|
| - // pipes will remain until they are flushed.
|
| - EXPECT_FALSE(a_impl.d_called());
|
| - PumpMessages();
|
| - EXPECT_TRUE(a_impl.d_called());
|
| -}
|
| -
|
| -} // namespace
|
| -} // namespace test
|
| -} // namespace mojo
|
|
|