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

Side by Side Diff: mojo/public/bindings/tests/remote_ptr_unittest.cc

Issue 150713002: Mojo: Add ErrorHandler to RemotePtr (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: update per review feedback Created 6 years, 10 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « mojo/public/bindings/tests/connector_unittest.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "mojo/public/bindings/error_handler.h"
5 #include "mojo/public/bindings/remote_ptr.h" 6 #include "mojo/public/bindings/remote_ptr.h"
6 #include "mojo/public/environment/environment.h" 7 #include "mojo/public/environment/environment.h"
7 #include "mojo/public/utility/run_loop.h" 8 #include "mojo/public/utility/run_loop.h"
8 #include "mojom/math_calculator.h" 9 #include "mojom/math_calculator.h"
9 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
10 11
11 namespace mojo { 12 namespace mojo {
12 namespace test { 13 namespace test {
14 namespace {
15
16 class ErrorObserver : public ErrorHandler {
17 public:
18 ErrorObserver() : encountered_error_(false) {
19 }
20
21 bool encountered_error() const { return encountered_error_; }
22
23 virtual void OnError() MOJO_OVERRIDE {
24 encountered_error_ = true;
25 }
26
27 private:
28 bool encountered_error_;
29 };
13 30
14 class MathCalculatorImpl : public math::Calculator { 31 class MathCalculatorImpl : public math::Calculator {
15 public: 32 public:
16 virtual ~MathCalculatorImpl() {} 33 virtual ~MathCalculatorImpl() {}
17 34
18 explicit MathCalculatorImpl(ScopedMessagePipeHandle pipe) 35 explicit MathCalculatorImpl(ScopedMessagePipeHandle pipe)
19 : ui_(pipe.Pass(), this), 36 : ui_(pipe.Pass(), this),
20 total_(0.0) { 37 total_(0.0) {
21 } 38 }
22 39
(...skipping 11 matching lines...) Expand all
34 ui_->Output(total_); 51 ui_->Output(total_);
35 } 52 }
36 53
37 private: 54 private:
38 RemotePtr<math::CalculatorUI> ui_; 55 RemotePtr<math::CalculatorUI> ui_;
39 double total_; 56 double total_;
40 }; 57 };
41 58
42 class MathCalculatorUIImpl : public math::CalculatorUI { 59 class MathCalculatorUIImpl : public math::CalculatorUI {
43 public: 60 public:
44 explicit MathCalculatorUIImpl(ScopedMessagePipeHandle pipe) 61 explicit MathCalculatorUIImpl(ScopedMessagePipeHandle pipe,
45 : calculator_(pipe.Pass(), this), 62 ErrorHandler* error_handler = NULL)
63 : calculator_(pipe.Pass(), this, error_handler),
46 output_(0.0) { 64 output_(0.0) {
47 } 65 }
48 66
49 bool encountered_error() const { 67 bool encountered_error() const {
50 return calculator_.encountered_error(); 68 return calculator_.encountered_error();
51 } 69 }
52 70
53 void Add(double value) { 71 void Add(double value) {
54 calculator_->Add(value); 72 calculator_->Add(value);
55 } 73 }
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 113
96 protected: 114 protected:
97 ScopedMessagePipeHandle pipe0_; 115 ScopedMessagePipeHandle pipe0_;
98 ScopedMessagePipeHandle pipe1_; 116 ScopedMessagePipeHandle pipe1_;
99 117
100 private: 118 private:
101 Environment env_; 119 Environment env_;
102 RunLoop loop_; 120 RunLoop loop_;
103 }; 121 };
104 122
123 } // namespace
124
105 TEST_F(RemotePtrTest, EndToEnd) { 125 TEST_F(RemotePtrTest, EndToEnd) {
106 // Suppose this is instantiated in a process that has pipe0_. 126 // Suppose this is instantiated in a process that has pipe0_.
107 MathCalculatorImpl calculator(pipe0_.Pass()); 127 MathCalculatorImpl calculator(pipe0_.Pass());
108 128
109 // Suppose this is instantiated in a process that has pipe1_. 129 // Suppose this is instantiated in a process that has pipe1_.
110 MathCalculatorUIImpl calculator_ui(pipe1_.Pass()); 130 MathCalculatorUIImpl calculator_ui(pipe1_.Pass());
111 131
112 calculator_ui.Add(2.0); 132 calculator_ui.Add(2.0);
113 calculator_ui.Multiply(5.0); 133 calculator_ui.Multiply(5.0);
114 134
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 187
168 // The state change isn't picked up locally yet. 188 // The state change isn't picked up locally yet.
169 EXPECT_FALSE(calculator_ui.encountered_error()); 189 EXPECT_FALSE(calculator_ui.encountered_error());
170 190
171 PumpMessages(); 191 PumpMessages();
172 192
173 // OK, now we see the error. 193 // OK, now we see the error.
174 EXPECT_TRUE(calculator_ui.encountered_error()); 194 EXPECT_TRUE(calculator_ui.encountered_error());
175 } 195 }
176 196
197 TEST_F(RemotePtrTest, EncounteredErrorCallback) {
198 MathCalculatorImpl* calculator = new MathCalculatorImpl(pipe0_.Pass());
199
200 ErrorObserver error_observer;
201 MathCalculatorUIImpl calculator_ui(pipe1_.Pass(), &error_observer);
202
203 calculator_ui.Add(2.0);
204 PumpMessages();
205 EXPECT_EQ(2.0, calculator_ui.GetOutput());
206 EXPECT_FALSE(calculator_ui.encountered_error());
207
208 calculator_ui.Multiply(5.0);
209 EXPECT_FALSE(calculator_ui.encountered_error());
210
211 // Close the other side of the pipe.
212 delete calculator;
213
214 // The state change isn't picked up locally yet.
215 EXPECT_FALSE(calculator_ui.encountered_error());
216
217 PumpMessages();
218
219 // OK, now we see the error.
220 EXPECT_TRUE(calculator_ui.encountered_error());
221
222 // We should have also been able to observe the error through the
223 // ErrorHandler interface.
224 EXPECT_TRUE(error_observer.encountered_error());
225 }
226
177 } // namespace test 227 } // namespace test
178 } // namespace mojo 228 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/public/bindings/tests/connector_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698