OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 #ifndef REMOTING_PROTOCOL_PROTOCOL_MOCK_OBJECTS_H_ | 5 #ifndef REMOTING_PROTOCOL_PROTOCOL_MOCK_OBJECTS_H_ |
6 #define REMOTING_PROTOCOL_PROTOCOL_MOCK_OBJECTS_H_ | 6 #define REMOTING_PROTOCOL_PROTOCOL_MOCK_OBJECTS_H_ |
7 | 7 |
8 #include <map> | 8 #include <map> |
9 #include <string> | 9 #include <string> |
10 | 10 |
11 #include "base/location.h" | 11 #include "base/location.h" |
12 #include "base/single_thread_task_runner.h" | 12 #include "base/single_thread_task_runner.h" |
13 #include "base/values.h" | 13 #include "base/values.h" |
14 #include "net/base/ip_endpoint.h" | 14 #include "net/base/ip_endpoint.h" |
15 #include "remoting/proto/internal.pb.h" | 15 #include "remoting/proto/internal.pb.h" |
16 #include "remoting/proto/video.pb.h" | 16 #include "remoting/proto/video.pb.h" |
17 #include "remoting/protocol/authenticator.h" | 17 #include "remoting/protocol/authenticator.h" |
18 #include "remoting/protocol/client_stub.h" | 18 #include "remoting/protocol/client_stub.h" |
19 #include "remoting/protocol/clipboard_stub.h" | 19 #include "remoting/protocol/clipboard_stub.h" |
20 #include "remoting/protocol/connection_to_client.h" | 20 #include "remoting/protocol/connection_to_client.h" |
| 21 #include "remoting/protocol/connection_to_host.h" |
21 #include "remoting/protocol/host_stub.h" | 22 #include "remoting/protocol/host_stub.h" |
22 #include "remoting/protocol/input_stub.h" | 23 #include "remoting/protocol/input_stub.h" |
23 #include "remoting/protocol/pairing_registry.h" | 24 #include "remoting/protocol/pairing_registry.h" |
24 #include "remoting/protocol/session.h" | 25 #include "remoting/protocol/session.h" |
25 #include "remoting/protocol/session_manager.h" | 26 #include "remoting/protocol/session_manager.h" |
26 #include "remoting/protocol/transport.h" | 27 #include "remoting/protocol/transport.h" |
27 #include "remoting/protocol/video_stub.h" | 28 #include "remoting/protocol/video_stub.h" |
28 #include "testing/gmock/include/gmock/gmock.h" | 29 #include "testing/gmock/include/gmock/gmock.h" |
29 | 30 |
30 namespace remoting { | 31 namespace remoting { |
31 namespace protocol { | 32 namespace protocol { |
32 | 33 |
33 class MockConnectionToClient : public ConnectionToClient { | 34 class MockConnectionToClient : public ConnectionToClient { |
34 public: | 35 public: |
35 MockConnectionToClient(Session* session, | 36 MockConnectionToClient(Session* session, |
36 HostStub* host_stub); | 37 HostStub* host_stub); |
37 virtual ~MockConnectionToClient(); | 38 ~MockConnectionToClient() override; |
38 | 39 |
39 MOCK_METHOD1(Init, void(Session* session)); | 40 MOCK_METHOD1(Init, void(Session* session)); |
40 MOCK_METHOD0(video_stub, VideoStub*()); | 41 MOCK_METHOD0(video_stub, VideoStub*()); |
41 MOCK_METHOD0(client_stub, ClientStub*()); | 42 MOCK_METHOD0(client_stub, ClientStub*()); |
42 MOCK_METHOD0(session, Session*()); | 43 MOCK_METHOD0(session, Session*()); |
43 MOCK_METHOD0(Disconnect, void()); | 44 MOCK_METHOD0(Disconnect, void()); |
44 | 45 |
45 void set_clipboard_stub(ClipboardStub* clipboard_stub) override { | 46 void set_clipboard_stub(ClipboardStub* clipboard_stub) override { |
46 clipboard_stub_ = clipboard_stub; | 47 clipboard_stub_ = clipboard_stub; |
47 } | 48 } |
(...skipping 14 matching lines...) Expand all Loading... |
62 | 63 |
63 private: | 64 private: |
64 ClipboardStub* clipboard_stub_; | 65 ClipboardStub* clipboard_stub_; |
65 HostStub* host_stub_; | 66 HostStub* host_stub_; |
66 InputStub* input_stub_; | 67 InputStub* input_stub_; |
67 VideoFeedbackStub* video_feedback_stub_; | 68 VideoFeedbackStub* video_feedback_stub_; |
68 | 69 |
69 DISALLOW_COPY_AND_ASSIGN(MockConnectionToClient); | 70 DISALLOW_COPY_AND_ASSIGN(MockConnectionToClient); |
70 }; | 71 }; |
71 | 72 |
| 73 class MockConnectionToHost : public ConnectionToHost { |
| 74 public: |
| 75 MockConnectionToHost(); |
| 76 ~MockConnectionToHost() override; |
| 77 |
| 78 MOCK_METHOD5(ConnectPtr, |
| 79 void(SignalStrategy* signal_strategy, |
| 80 TransportFactory* transport_factory, |
| 81 Authenticator* authenticator, |
| 82 const std::string& host_jid, |
| 83 HostEventCallback* event_callback)); |
| 84 MOCK_METHOD0(config, const SessionConfig&()); |
| 85 MOCK_METHOD0(clipboard_forwarder, ClipboardStub*()); |
| 86 MOCK_METHOD0(host_stub, HostStub*()); |
| 87 MOCK_METHOD0(input_stub, InputStub* ()); |
| 88 MOCK_METHOD1(OnSignalStrategyStateChange, void(SignalStrategy::State state)); |
| 89 MOCK_METHOD1(OnSignalStrategyIncomingStanza, |
| 90 bool(const buzz::XmlElement* stanza)); |
| 91 MOCK_METHOD0(OnSessionManagerReady, void()); |
| 92 MOCK_METHOD2(OnIncomingSession, |
| 93 void(Session* session, |
| 94 SessionManager::IncomingSessionResponse* response)); |
| 95 MOCK_METHOD1(OnSessionStateChange, void(Session::State state)); |
| 96 MOCK_METHOD2(OnSessionRouteChange, |
| 97 void(const std::string& channel_name, const TransportRoute& route)); |
| 98 MOCK_METHOD1(OnChannelInitialized, |
| 99 void(ChannelDispatcherBase* channel_dispatcher)); |
| 100 MOCK_METHOD2(OnChannelError, |
| 101 void(ChannelDispatcherBase* channel_dispatcher, ErrorCode error)); |
| 102 MOCK_METHOD1(OnVideoChannelStatus, void(bool active)); |
| 103 |
| 104 // ConnectionToHost interface. |
| 105 void Connect(SignalStrategy* signal_strategy, |
| 106 scoped_ptr<TransportFactory> transport_factory, |
| 107 scoped_ptr<Authenticator> authenticator, |
| 108 const std::string& host_jid, |
| 109 HostEventCallback* event_callback) override; |
| 110 |
| 111 private: |
| 112 DISALLOW_COPY_AND_ASSIGN(MockConnectionToHost); |
| 113 }; |
| 114 |
72 class MockConnectionToClientEventHandler : | 115 class MockConnectionToClientEventHandler : |
73 public ConnectionToClient::EventHandler { | 116 public ConnectionToClient::EventHandler { |
74 public: | 117 public: |
75 MockConnectionToClientEventHandler(); | 118 MockConnectionToClientEventHandler(); |
76 virtual ~MockConnectionToClientEventHandler(); | 119 ~MockConnectionToClientEventHandler() override; |
77 | 120 |
78 MOCK_METHOD1(OnConnectionAuthenticating, | 121 MOCK_METHOD1(OnConnectionAuthenticating, |
79 void(ConnectionToClient* connection)); | 122 void(ConnectionToClient* connection)); |
80 MOCK_METHOD1(OnConnectionAuthenticated, void(ConnectionToClient* connection)); | 123 MOCK_METHOD1(OnConnectionAuthenticated, void(ConnectionToClient* connection)); |
81 MOCK_METHOD1(OnConnectionChannelsConnected, | 124 MOCK_METHOD1(OnConnectionChannelsConnected, |
82 void(ConnectionToClient* connection)); | 125 void(ConnectionToClient* connection)); |
83 MOCK_METHOD2(OnConnectionClosed, void(ConnectionToClient* connection, | 126 MOCK_METHOD2(OnConnectionClosed, void(ConnectionToClient* connection, |
84 ErrorCode error)); | 127 ErrorCode error)); |
85 MOCK_METHOD2(OnEventTimestamp, | 128 MOCK_METHOD2(OnEventTimestamp, |
86 void(ConnectionToClient* connection, int64 timestamp)); | 129 void(ConnectionToClient* connection, int64 timestamp)); |
87 MOCK_METHOD3(OnRouteChange, void(ConnectionToClient* connection, | 130 MOCK_METHOD3(OnRouteChange, void(ConnectionToClient* connection, |
88 const std::string& channel_name, | 131 const std::string& channel_name, |
89 const TransportRoute& route)); | 132 const TransportRoute& route)); |
90 | 133 |
91 private: | 134 private: |
92 DISALLOW_COPY_AND_ASSIGN(MockConnectionToClientEventHandler); | 135 DISALLOW_COPY_AND_ASSIGN(MockConnectionToClientEventHandler); |
93 }; | 136 }; |
94 | 137 |
95 class MockClipboardStub : public ClipboardStub { | 138 class MockClipboardStub : public ClipboardStub { |
96 public: | 139 public: |
97 MockClipboardStub(); | 140 MockClipboardStub(); |
98 virtual ~MockClipboardStub(); | 141 ~MockClipboardStub() override; |
99 | 142 |
100 MOCK_METHOD1(InjectClipboardEvent, void(const ClipboardEvent& event)); | 143 MOCK_METHOD1(InjectClipboardEvent, void(const ClipboardEvent& event)); |
101 | 144 |
102 private: | 145 private: |
103 DISALLOW_COPY_AND_ASSIGN(MockClipboardStub); | 146 DISALLOW_COPY_AND_ASSIGN(MockClipboardStub); |
104 }; | 147 }; |
105 | 148 |
106 class MockCursorShapeChangeCallback { | 149 class MockCursorShapeChangeCallback { |
107 public: | 150 public: |
108 MockCursorShapeChangeCallback(); | 151 MockCursorShapeChangeCallback(); |
109 virtual ~MockCursorShapeChangeCallback(); | 152 virtual ~MockCursorShapeChangeCallback(); |
110 | 153 |
111 MOCK_METHOD1(CursorShapeChangedPtr, void(CursorShapeInfo* info)); | 154 MOCK_METHOD1(CursorShapeChangedPtr, void(CursorShapeInfo* info)); |
112 void CursorShapeChanged(scoped_ptr<CursorShapeInfo> info); | 155 void CursorShapeChanged(scoped_ptr<CursorShapeInfo> info); |
113 | 156 |
114 private: | 157 private: |
115 DISALLOW_COPY_AND_ASSIGN(MockCursorShapeChangeCallback); | 158 DISALLOW_COPY_AND_ASSIGN(MockCursorShapeChangeCallback); |
116 }; | 159 }; |
117 | 160 |
118 class MockInputStub : public InputStub { | 161 class MockInputStub : public InputStub { |
119 public: | 162 public: |
120 MockInputStub(); | 163 MockInputStub(); |
121 virtual ~MockInputStub(); | 164 ~MockInputStub() override; |
122 | 165 |
123 MOCK_METHOD1(InjectKeyEvent, void(const KeyEvent& event)); | 166 MOCK_METHOD1(InjectKeyEvent, void(const KeyEvent& event)); |
124 MOCK_METHOD1(InjectTextEvent, void(const TextEvent& event)); | 167 MOCK_METHOD1(InjectTextEvent, void(const TextEvent& event)); |
125 MOCK_METHOD1(InjectMouseEvent, void(const MouseEvent& event)); | 168 MOCK_METHOD1(InjectMouseEvent, void(const MouseEvent& event)); |
126 MOCK_METHOD1(InjectTouchEvent, void(const TouchEvent& event)); | 169 MOCK_METHOD1(InjectTouchEvent, void(const TouchEvent& event)); |
127 | 170 |
128 private: | 171 private: |
129 DISALLOW_COPY_AND_ASSIGN(MockInputStub); | 172 DISALLOW_COPY_AND_ASSIGN(MockInputStub); |
130 }; | 173 }; |
131 | 174 |
132 class MockHostStub : public HostStub { | 175 class MockHostStub : public HostStub { |
133 public: | 176 public: |
134 MockHostStub(); | 177 MockHostStub(); |
135 virtual ~MockHostStub(); | 178 ~MockHostStub() override; |
136 | 179 |
137 MOCK_METHOD1(NotifyClientResolution, | 180 MOCK_METHOD1(NotifyClientResolution, |
138 void(const ClientResolution& resolution)); | 181 void(const ClientResolution& resolution)); |
139 MOCK_METHOD1(ControlVideo, void(const VideoControl& video_control)); | 182 MOCK_METHOD1(ControlVideo, void(const VideoControl& video_control)); |
140 MOCK_METHOD1(ControlAudio, void(const AudioControl& audio_control)); | 183 MOCK_METHOD1(ControlAudio, void(const AudioControl& audio_control)); |
141 MOCK_METHOD1(SetCapabilities, void(const Capabilities& capabilities)); | 184 MOCK_METHOD1(SetCapabilities, void(const Capabilities& capabilities)); |
142 MOCK_METHOD1(RequestPairing, | 185 MOCK_METHOD1(RequestPairing, |
143 void(const PairingRequest& pairing_request)); | 186 void(const PairingRequest& pairing_request)); |
144 MOCK_METHOD1(DeliverClientMessage, void(const ExtensionMessage& message)); | 187 MOCK_METHOD1(DeliverClientMessage, void(const ExtensionMessage& message)); |
145 | 188 |
146 private: | 189 private: |
147 DISALLOW_COPY_AND_ASSIGN(MockHostStub); | 190 DISALLOW_COPY_AND_ASSIGN(MockHostStub); |
148 }; | 191 }; |
149 | 192 |
150 class MockClientStub : public ClientStub { | 193 class MockClientStub : public ClientStub { |
151 public: | 194 public: |
152 MockClientStub(); | 195 MockClientStub(); |
153 virtual ~MockClientStub(); | 196 ~MockClientStub() override; |
154 | 197 |
155 // ClientStub mock implementation. | 198 // ClientStub mock implementation. |
156 MOCK_METHOD1(SetCapabilities, void(const Capabilities& capabilities)); | 199 MOCK_METHOD1(SetCapabilities, void(const Capabilities& capabilities)); |
157 MOCK_METHOD1(SetPairingResponse, | 200 MOCK_METHOD1(SetPairingResponse, |
158 void(const PairingResponse& pairing_response)); | 201 void(const PairingResponse& pairing_response)); |
159 MOCK_METHOD1(DeliverHostMessage, void(const ExtensionMessage& message)); | 202 MOCK_METHOD1(DeliverHostMessage, void(const ExtensionMessage& message)); |
160 | 203 |
161 // ClipboardStub mock implementation. | 204 // ClipboardStub mock implementation. |
162 MOCK_METHOD1(InjectClipboardEvent, void(const ClipboardEvent& event)); | 205 MOCK_METHOD1(InjectClipboardEvent, void(const ClipboardEvent& event)); |
163 | 206 |
164 // CursorShapeStub mock implementation. | 207 // CursorShapeStub mock implementation. |
165 MOCK_METHOD1(SetCursorShape, void(const CursorShapeInfo& cursor_shape)); | 208 MOCK_METHOD1(SetCursorShape, void(const CursorShapeInfo& cursor_shape)); |
166 | 209 |
167 private: | 210 private: |
168 DISALLOW_COPY_AND_ASSIGN(MockClientStub); | 211 DISALLOW_COPY_AND_ASSIGN(MockClientStub); |
169 }; | 212 }; |
170 | 213 |
171 class MockCursorShapeStub : public CursorShapeStub { | 214 class MockCursorShapeStub : public CursorShapeStub { |
172 public: | 215 public: |
173 MockCursorShapeStub(); | 216 MockCursorShapeStub(); |
174 virtual ~MockCursorShapeStub(); | 217 ~MockCursorShapeStub() override; |
175 | 218 |
176 MOCK_METHOD1(SetCursorShape, void(const CursorShapeInfo& cursor_shape)); | 219 MOCK_METHOD1(SetCursorShape, void(const CursorShapeInfo& cursor_shape)); |
177 | 220 |
178 private: | 221 private: |
179 DISALLOW_COPY_AND_ASSIGN(MockCursorShapeStub); | 222 DISALLOW_COPY_AND_ASSIGN(MockCursorShapeStub); |
180 }; | 223 }; |
181 | 224 |
182 class MockVideoStub : public VideoStub { | 225 class MockVideoStub : public VideoStub { |
183 public: | 226 public: |
184 MockVideoStub(); | 227 MockVideoStub(); |
185 virtual ~MockVideoStub(); | 228 ~MockVideoStub() override; |
186 | 229 |
187 MOCK_METHOD2(ProcessVideoPacketPtr, void(const VideoPacket* video_packet, | 230 MOCK_METHOD2(ProcessVideoPacketPtr, void(const VideoPacket* video_packet, |
188 const base::Closure& done)); | 231 const base::Closure& done)); |
189 virtual void ProcessVideoPacket(scoped_ptr<VideoPacket> video_packet, | 232 void ProcessVideoPacket(scoped_ptr<VideoPacket> video_packet, |
190 const base::Closure& done) { | 233 const base::Closure& done) override { |
191 ProcessVideoPacketPtr(video_packet.get(), done); | 234 ProcessVideoPacketPtr(video_packet.get(), done); |
192 } | 235 } |
193 | 236 |
194 private: | 237 private: |
195 DISALLOW_COPY_AND_ASSIGN(MockVideoStub); | 238 DISALLOW_COPY_AND_ASSIGN(MockVideoStub); |
196 }; | 239 }; |
197 | 240 |
198 class MockSession : public Session { | 241 class MockSession : public Session { |
199 public: | 242 public: |
200 MockSession(); | 243 MockSession(); |
201 virtual ~MockSession(); | 244 ~MockSession() override; |
202 | 245 |
203 MOCK_METHOD1(SetEventHandler, void(Session::EventHandler* event_handler)); | 246 MOCK_METHOD1(SetEventHandler, void(Session::EventHandler* event_handler)); |
204 MOCK_METHOD0(error, ErrorCode()); | 247 MOCK_METHOD0(error, ErrorCode()); |
205 MOCK_METHOD0(GetTransportChannelFactory, StreamChannelFactory*()); | 248 MOCK_METHOD0(GetTransportChannelFactory, StreamChannelFactory*()); |
206 MOCK_METHOD0(GetMultiplexedChannelFactory, StreamChannelFactory*()); | 249 MOCK_METHOD0(GetMultiplexedChannelFactory, StreamChannelFactory*()); |
207 MOCK_METHOD0(jid, const std::string&()); | 250 MOCK_METHOD0(jid, const std::string&()); |
208 MOCK_METHOD0(candidate_config, const CandidateSessionConfig*()); | 251 MOCK_METHOD0(candidate_config, const CandidateSessionConfig*()); |
209 MOCK_METHOD0(config, const SessionConfig&()); | 252 MOCK_METHOD0(config, const SessionConfig&()); |
210 MOCK_METHOD1(set_config, void(const SessionConfig& config)); | 253 MOCK_METHOD1(set_config, void(const SessionConfig& config)); |
211 MOCK_METHOD0(initiator_token, const std::string&()); | 254 MOCK_METHOD0(initiator_token, const std::string&()); |
212 MOCK_METHOD1(set_initiator_token, void(const std::string& initiator_token)); | 255 MOCK_METHOD1(set_initiator_token, void(const std::string& initiator_token)); |
213 MOCK_METHOD0(receiver_token, const std::string&()); | 256 MOCK_METHOD0(receiver_token, const std::string&()); |
214 MOCK_METHOD1(set_receiver_token, void(const std::string& receiver_token)); | 257 MOCK_METHOD1(set_receiver_token, void(const std::string& receiver_token)); |
215 MOCK_METHOD1(set_shared_secret, void(const std::string& secret)); | 258 MOCK_METHOD1(set_shared_secret, void(const std::string& secret)); |
216 MOCK_METHOD0(shared_secret, const std::string&()); | 259 MOCK_METHOD0(shared_secret, const std::string&()); |
217 MOCK_METHOD0(Close, void()); | 260 MOCK_METHOD0(Close, void()); |
218 | 261 |
219 private: | 262 private: |
220 DISALLOW_COPY_AND_ASSIGN(MockSession); | 263 DISALLOW_COPY_AND_ASSIGN(MockSession); |
221 }; | 264 }; |
222 | 265 |
223 class MockSessionManager : public SessionManager { | 266 class MockSessionManager : public SessionManager { |
224 public: | 267 public: |
225 MockSessionManager(); | 268 MockSessionManager(); |
226 virtual ~MockSessionManager(); | 269 ~MockSessionManager() override; |
227 | 270 |
228 MOCK_METHOD2(Init, void(SignalStrategy*, Listener*)); | 271 MOCK_METHOD2(Init, void(SignalStrategy*, Listener*)); |
229 MOCK_METHOD3(ConnectPtr, Session*( | 272 MOCK_METHOD3(ConnectPtr, Session*( |
230 const std::string& host_jid, | 273 const std::string& host_jid, |
231 Authenticator* authenticator, | 274 Authenticator* authenticator, |
232 CandidateSessionConfig* config)); | 275 CandidateSessionConfig* config)); |
233 MOCK_METHOD0(Close, void()); | 276 MOCK_METHOD0(Close, void()); |
234 MOCK_METHOD1(set_authenticator_factory_ptr, | 277 MOCK_METHOD1(set_authenticator_factory_ptr, |
235 void(AuthenticatorFactory* factory)); | 278 void(AuthenticatorFactory* factory)); |
236 virtual scoped_ptr<Session> Connect( | 279 scoped_ptr<Session> Connect( |
237 const std::string& host_jid, | 280 const std::string& host_jid, |
238 scoped_ptr<Authenticator> authenticator, | 281 scoped_ptr<Authenticator> authenticator, |
239 scoped_ptr<CandidateSessionConfig> config) { | 282 scoped_ptr<CandidateSessionConfig> config) override { |
240 return make_scoped_ptr( | 283 return make_scoped_ptr( |
241 ConnectPtr(host_jid, authenticator.get(), config.get())); | 284 ConnectPtr(host_jid, authenticator.get(), config.get())); |
242 } | 285 } |
243 virtual void set_authenticator_factory( | 286 void set_authenticator_factory( |
244 scoped_ptr<AuthenticatorFactory> authenticator_factory) { | 287 scoped_ptr<AuthenticatorFactory> authenticator_factory) override { |
245 set_authenticator_factory_ptr(authenticator_factory.release()); | 288 set_authenticator_factory_ptr(authenticator_factory.release()); |
246 } | 289 } |
247 | 290 |
248 private: | 291 private: |
249 DISALLOW_COPY_AND_ASSIGN(MockSessionManager); | 292 DISALLOW_COPY_AND_ASSIGN(MockSessionManager); |
250 }; | 293 }; |
251 | 294 |
252 // Simple delegate that caches information on paired clients in memory. | 295 // Simple delegate that caches information on paired clients in memory. |
253 class MockPairingRegistryDelegate : public PairingRegistry::Delegate { | 296 class MockPairingRegistryDelegate : public PairingRegistry::Delegate { |
254 public: | 297 public: |
(...skipping 23 matching lines...) Expand all Loading... |
278 // Runs tasks synchronously instead of posting them to |task_runner|. | 321 // Runs tasks synchronously instead of posting them to |task_runner|. |
279 void PostTask(const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, | 322 void PostTask(const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, |
280 const tracked_objects::Location& from_here, | 323 const tracked_objects::Location& from_here, |
281 const base::Closure& task) override; | 324 const base::Closure& task) override; |
282 }; | 325 }; |
283 | 326 |
284 } // namespace protocol | 327 } // namespace protocol |
285 } // namespace remoting | 328 } // namespace remoting |
286 | 329 |
287 #endif // REMOTING_PROTOCOL_PROTOCOL_MOCK_OBJECTS_H_ | 330 #endif // REMOTING_PROTOCOL_PROTOCOL_MOCK_OBJECTS_H_ |
OLD | NEW |