Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1499)

Unified Diff: mojo/public/cpp/bindings/tests/interface_ptr_unittest.cc

Issue 864123002: Declient calculator test mojom. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « mojo/public/cpp/bindings/tests/DEPS ('k') | mojo/public/interfaces/bindings/tests/math_calculator.mojom » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/public/cpp/bindings/tests/interface_ptr_unittest.cc
diff --git a/mojo/public/cpp/bindings/tests/interface_ptr_unittest.cc b/mojo/public/cpp/bindings/tests/interface_ptr_unittest.cc
index f90dc3de1ea13e82398f0df4283aecab9834efff..2a0f66406f04f564292e80195e76c192bb6f26e7 100644
--- a/mojo/public/cpp/bindings/tests/interface_ptr_unittest.cc
+++ b/mojo/public/cpp/bindings/tests/interface_ptr_unittest.cc
@@ -2,6 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include "base/bind.h"
+#include "base/callback.h"
#include "mojo/public/cpp/bindings/binding.h"
#include "mojo/public/cpp/bindings/error_handler.h"
#include "mojo/public/cpp/bindings/strong_binding.h"
@@ -27,34 +29,40 @@ class ErrorObserver : public ErrorHandler {
bool encountered_error_;
};
+typedef mojo::Callback<void(double)> CalcCallback;
+
class MathCalculatorImpl : public InterfaceImpl<math::Calculator> {
jamesr 2015/01/22 00:30:04 if you're rewriting these anyway might as well swi
Aaron Boodman 2015/01/22 22:27:29 It seems to work fine as InterfaceImpl. I'd rather
public:
~MathCalculatorImpl() override {}
MathCalculatorImpl() : total_(0.0) {}
- void Clear() override { client()->Output(total_); }
+ void Clear(const CalcCallback& callback) override {
+ // TODO(aa): Shouldn't it actually reset total_?
jamesr 2015/01/22 00:30:04 instead of a TODO can you just do it? do the tests
Aaron Boodman 2015/01/22 22:27:29 Done.
+ callback.Run(total_);
+ }
- void Add(double value) override {
+ void Add(double value, const CalcCallback& callback) override {
total_ += value;
- client()->Output(total_);
+ callback.Run(total_);
}
- void Multiply(double value) override {
+ void Multiply(double value, const CalcCallback& callback) override {
total_ *= value;
- client()->Output(total_);
+ callback.Run(total_);
}
private:
double total_;
};
-class MathCalculatorUIImpl : public math::CalculatorUI {
+class MathCalculatorUI {
public:
- explicit MathCalculatorUIImpl(math::CalculatorPtr calculator)
- : calculator_(calculator.Pass()), output_(0.0) {
- calculator_.set_client(this);
- }
+ explicit MathCalculatorUI(math::CalculatorPtr calculator)
+ : calculator_(calculator.Pass()),
+ callback_(
+ base::Bind(&MathCalculatorUI::Output, base::Unretained(this))),
jamesr 2015/01/22 00:30:04 since there's only one type of Output it should be
Aaron Boodman 2015/01/22 22:27:29 You keep using that word 'functor'. I don't think
+ output_(0.0) {}
bool WaitForIncomingMethodCall() {
return calculator_.WaitForIncomingMethodCall();
@@ -62,46 +70,48 @@ class MathCalculatorUIImpl : public math::CalculatorUI {
bool encountered_error() const { return calculator_.encountered_error(); }
- void Add(double value) { calculator_->Add(value); }
+ void Add(double value) { calculator_->Add(value, callback_); }
- void Subtract(double value) { calculator_->Add(-value); }
+ void Subtract(double value) { calculator_->Add(-value, callback_); }
- void Multiply(double value) { calculator_->Multiply(value); }
+ void Multiply(double value) { calculator_->Multiply(value, callback_); }
- void Divide(double value) { calculator_->Multiply(1.0 / value); }
+ void Divide(double value) { calculator_->Multiply(1.0 / value, callback_); }
double GetOutput() const { return output_; }
private:
- // math::CalculatorUI implementation:
- void Output(double value) override { output_ = value; }
+ void Output(double value) { output_ = value; }
math::CalculatorPtr calculator_;
+ mojo::Callback<void(double)> callback_;
double output_;
};
-class SelfDestructingMathCalculatorUIImpl : public math::CalculatorUI {
+class SelfDestructingMathCalculatorUI {
public:
- explicit SelfDestructingMathCalculatorUIImpl(math::CalculatorPtr calculator)
- : calculator_(calculator.Pass()), nesting_level_(0) {
+ explicit SelfDestructingMathCalculatorUI(math::CalculatorPtr calculator)
+ : calculator_(calculator.Pass()),
+ callback_(base::Bind(&SelfDestructingMathCalculatorUI::Output,
+ base::Unretained(this))),
+ nesting_level_(0) {
++num_instances_;
- calculator_.set_client(this);
}
void BeginTest(bool nested) {
nesting_level_ = nested ? 2 : 1;
- calculator_->Add(1.0);
+ calculator_->Add(1.0, callback_);
}
static int num_instances() { return num_instances_; }
private:
- ~SelfDestructingMathCalculatorUIImpl() override { --num_instances_; }
+ ~SelfDestructingMathCalculatorUI() { --num_instances_; }
- void Output(double value) override {
+ void Output(double value) {
if (--nesting_level_ > 0) {
// Add some more and wait for re-entrant call to Output!
- calculator_->Add(1.0);
+ calculator_->Add(1.0, callback_);
RunLoop::current()->RunUntilIdle();
} else {
delete this;
@@ -109,12 +119,13 @@ class SelfDestructingMathCalculatorUIImpl : public math::CalculatorUI {
}
math::CalculatorPtr calculator_;
+ mojo::Callback<void(double)> callback_;
int nesting_level_;
static int num_instances_;
};
// static
-int SelfDestructingMathCalculatorUIImpl::num_instances_ = 0;
+int SelfDestructingMathCalculatorUI::num_instances_ = 0;
class ReentrantServiceImpl : public InterfaceImpl<sample::Service> {
public:
@@ -157,7 +168,7 @@ TEST_F(InterfacePtrTest, EndToEnd) {
BindToProxy(new MathCalculatorImpl(), &calc);
// Suppose this is instantiated in a process that has pipe1_.
- MathCalculatorUIImpl calculator_ui(calc.Pass());
+ MathCalculatorUI calculator_ui(calc.Pass());
calculator_ui.Add(2.0);
calculator_ui.Multiply(5.0);
@@ -172,7 +183,7 @@ TEST_F(InterfacePtrTest, EndToEnd_Synchronous) {
MathCalculatorImpl* impl = BindToProxy(new MathCalculatorImpl(), &calc);
// Suppose this is instantiated in a process that has pipe1_.
- MathCalculatorUIImpl calculator_ui(calc.Pass());
+ MathCalculatorUI calculator_ui(calc.Pass());
EXPECT_EQ(0.0, calculator_ui.GetOutput());
@@ -230,7 +241,7 @@ TEST_F(InterfacePtrTest, EncounteredError) {
math::CalculatorPtr proxy;
MathCalculatorImpl* server = BindToProxy(new MathCalculatorImpl(), &proxy);
- MathCalculatorUIImpl calculator_ui(proxy.Pass());
+ MathCalculatorUI calculator_ui(proxy.Pass());
calculator_ui.Add(2.0);
PumpMessages();
@@ -259,7 +270,7 @@ TEST_F(InterfacePtrTest, EncounteredErrorCallback) {
ErrorObserver error_observer;
proxy.set_error_handler(&error_observer);
- MathCalculatorUIImpl calculator_ui(proxy.Pass());
+ MathCalculatorUI calculator_ui(proxy.Pass());
calculator_ui.Add(2.0);
PumpMessages();
@@ -297,30 +308,30 @@ TEST_F(InterfacePtrTest, DestroyInterfacePtrOnClientMethod) {
math::CalculatorPtr proxy;
BindToProxy(new MathCalculatorImpl(), &proxy);
- EXPECT_EQ(0, SelfDestructingMathCalculatorUIImpl::num_instances());
+ EXPECT_EQ(0, SelfDestructingMathCalculatorUI::num_instances());
- SelfDestructingMathCalculatorUIImpl* impl =
- new SelfDestructingMathCalculatorUIImpl(proxy.Pass());
+ SelfDestructingMathCalculatorUI* impl =
+ new SelfDestructingMathCalculatorUI(proxy.Pass());
impl->BeginTest(false);
PumpMessages();
- EXPECT_EQ(0, SelfDestructingMathCalculatorUIImpl::num_instances());
+ EXPECT_EQ(0, SelfDestructingMathCalculatorUI::num_instances());
}
TEST_F(InterfacePtrTest, NestedDestroyInterfacePtrOnClientMethod) {
math::CalculatorPtr proxy;
BindToProxy(new MathCalculatorImpl(), &proxy);
- EXPECT_EQ(0, SelfDestructingMathCalculatorUIImpl::num_instances());
+ EXPECT_EQ(0, SelfDestructingMathCalculatorUI::num_instances());
- SelfDestructingMathCalculatorUIImpl* impl =
- new SelfDestructingMathCalculatorUIImpl(proxy.Pass());
+ SelfDestructingMathCalculatorUI* impl =
+ new SelfDestructingMathCalculatorUI(proxy.Pass());
impl->BeginTest(true);
PumpMessages();
- EXPECT_EQ(0, SelfDestructingMathCalculatorUIImpl::num_instances());
+ EXPECT_EQ(0, SelfDestructingMathCalculatorUI::num_instances());
}
TEST_F(InterfacePtrTest, ReentrantWaitForIncomingMethodCall) {
@@ -337,6 +348,8 @@ TEST_F(InterfacePtrTest, ReentrantWaitForIncomingMethodCall) {
class StrongMathCalculatorImpl : public math::Calculator, public ErrorHandler {
public:
+ typedef mojo::Callback<void(double)> Callback;
jamesr 2015/01/22 00:30:04 I think we already have this typedef
Aaron Boodman 2015/01/22 22:27:29 Done.
+
StrongMathCalculatorImpl(ScopedMessagePipeHandle handle,
bool* error_received,
bool* destroyed)
@@ -348,16 +361,16 @@ class StrongMathCalculatorImpl : public math::Calculator, public ErrorHandler {
~StrongMathCalculatorImpl() override { *destroyed_ = true; }
// math::Calculator implementation.
- void Clear() override { binding_.client()->Output(total_); }
+ void Clear(const CalcCallback& callback) override { callback.Run(total_); }
- void Add(double value) override {
+ void Add(double value, const CalcCallback& callback) override {
total_ += value;
- binding_.client()->Output(total_);
+ callback.Run(total_);
}
- void Multiply(double value) override {
+ void Multiply(double value, const CalcCallback& callback) override {
total_ *= value;
- binding_.client()->Output(total_);
+ callback.Run(total_);
}
// ErrorHandler implementation.
@@ -387,7 +400,7 @@ TEST(StrongConnectorTest, Math) {
{
// Suppose this is instantiated in a process that has the other end of the
// message pipe.
- MathCalculatorUIImpl calculator_ui(calc.Pass());
+ MathCalculatorUI calculator_ui(calc.Pass());
calculator_ui.Add(2.0);
calculator_ui.Multiply(5.0);
@@ -419,16 +432,16 @@ class WeakMathCalculatorImpl : public math::Calculator, public ErrorHandler {
}
~WeakMathCalculatorImpl() override { *destroyed_ = true; }
- void Clear() override { binding_.client()->Output(total_); }
+ void Clear(const CalcCallback& callback) override { callback.Run(total_); }
- void Add(double value) override {
+ void Add(double value, const CalcCallback& callback) override {
total_ += value;
- binding_.client()->Output(total_);
+ callback.Run(total_);
}
- void Multiply(double value) override {
+ void Multiply(double value, const CalcCallback& callback) override {
total_ *= value;
- binding_.client()->Output(total_);
+ callback.Run(total_);
}
// ErrorHandler implementation.
@@ -457,7 +470,7 @@ TEST(WeakConnectorTest, Math) {
{
// Suppose this is instantiated in a process that has the other end of the
// message pipe.
- MathCalculatorUIImpl calculator_ui(calc.Pass());
+ MathCalculatorUI calculator_ui(calc.Pass());
calculator_ui.Add(2.0);
calculator_ui.Multiply(5.0);
« no previous file with comments | « mojo/public/cpp/bindings/tests/DEPS ('k') | mojo/public/interfaces/bindings/tests/math_calculator.mojom » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698