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

Side by Side Diff: pkg/json_rpc_2/test/client/client_test.dart

Issue 691053006: Add a Client class to json_rpc_2. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Code review changes Created 6 years, 1 month 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 | « pkg/json_rpc_2/pubspec.yaml ('k') | pkg/json_rpc_2/test/client/stream_test.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4
5 library json_rpc_2.test.client.client_test;
6
7 import 'dart:async';
8 import 'dart:convert';
9
10 import 'package:unittest/unittest.dart';
11 import 'package:json_rpc_2/error_code.dart' as error_code;
12 import 'package:json_rpc_2/json_rpc_2.dart' as json_rpc;
13
14 import 'utils.dart';
15
16 void main() {
17 var controller;
18 setUp(() => controller = new ClientController());
19
20 test("sends a message and returns the response", () {
21 controller.expectRequest((request) {
22 expect(request, allOf([
23 containsPair('jsonrpc', '2.0'),
24 containsPair('method', 'foo'),
25 containsPair('params', {'param': 'value'})
26 ]));
27
28 return {
29 'jsonrpc': '2.0',
30 'result': 'bar',
31 'id': request['id']
32 };
33 });
34
35 expect(controller.client.sendRequest("foo", {'param': 'value'}),
36 completion(equals('bar')));
37 });
38
39 test("sends a notification and expects no response", () {
40 controller.expectRequest((request) {
41 expect(request, equals({
42 'jsonrpc': '2.0',
43 'method': 'foo',
44 'params': {'param': 'value'}
45 }));
46 });
47
48 controller.client.sendNotification("foo", {'param': 'value'});
49 });
50
51 test("sends a notification with positional parameters", () {
52 controller.expectRequest((request) {
53 expect(request, equals({
54 'jsonrpc': '2.0',
55 'method': 'foo',
56 'params': ['value1', 'value2']
57 }));
58 });
59
60 controller.client.sendNotification("foo", ['value1', 'value2']);
61 });
62
63 test("sends a notification with no parameters", () {
64 controller.expectRequest((request) {
65 expect(request, equals({
66 'jsonrpc': '2.0',
67 'method': 'foo'
68 }));
69 });
70
71 controller.client.sendNotification("foo");
72 });
73
74 test("sends a synchronous batch of requests", () {
75 controller.expectRequest((request) {
76 expect(request, new isInstanceOf<List>());
77 expect(request, hasLength(3));
78 expect(request[0], equals({
79 'jsonrpc': '2.0',
80 'method': 'foo'
81 }));
82 expect(request[1], allOf([
83 containsPair('jsonrpc', '2.0'),
84 containsPair('method', 'bar'),
85 containsPair('params', {'param': 'value'})
86 ]));
87 expect(request[2], allOf([
88 containsPair('jsonrpc', '2.0'),
89 containsPair('method', 'baz')
90 ]));
91
92 return [
93 {
94 'jsonrpc': '2.0',
95 'result': 'baz response',
96 'id': request[2]['id']
97 },
98 {
99 'jsonrpc': '2.0',
100 'result': 'bar response',
101 'id': request[1]['id']
102 }
103 ];
104 });
105
106 controller.client.withBatch(() {
107 controller.client.sendNotification("foo");
108 expect(controller.client.sendRequest("bar", {'param': 'value'}),
109 completion(equals("bar response")));
110 expect(controller.client.sendRequest("baz"),
111 completion(equals("baz response")));
112 });
113 });
114
115 test("sends an asynchronous batch of requests", () {
116 controller.expectRequest((request) {
117 expect(request, new isInstanceOf<List>());
118 expect(request, hasLength(3));
119 expect(request[0], equals({
120 'jsonrpc': '2.0',
121 'method': 'foo'
122 }));
123 expect(request[1], allOf([
124 containsPair('jsonrpc', '2.0'),
125 containsPair('method', 'bar'),
126 containsPair('params', {'param': 'value'})
127 ]));
128 expect(request[2], allOf([
129 containsPair('jsonrpc', '2.0'),
130 containsPair('method', 'baz')
131 ]));
132
133 return [
134 {
135 'jsonrpc': '2.0',
136 'result': 'baz response',
137 'id': request[2]['id']
138 },
139 {
140 'jsonrpc': '2.0',
141 'result': 'bar response',
142 'id': request[1]['id']
143 }
144 ];
145 });
146
147 controller.client.withBatch(() {
148 return new Future.value().then((_) {
149 controller.client.sendNotification("foo");
150 return new Future.value();
151 }).then((_) {
152 expect(controller.client.sendRequest("bar", {'param': 'value'}),
153 completion(equals("bar response")));
154 return new Future.value();
155 }).then((_) {
156 expect(controller.client.sendRequest("baz"),
157 completion(equals("baz response")));
158 });
159 });
160 });
161
162 test("reports an error from the server", () {
163 controller.expectRequest((request) {
164 expect(request, allOf([
165 containsPair('jsonrpc', '2.0'),
166 containsPair('method', 'foo')
167 ]));
168
169 return {
170 'jsonrpc': '2.0',
171 'error': {
172 'code': error_code.SERVER_ERROR,
173 'message': 'you are bad at requests',
174 'data': 'some junk'
175 },
176 'id': request['id']
177 };
178 });
179
180 expect(controller.client.sendRequest("foo", {'param': 'value'}),
181 throwsA(predicate((exception) {
182 expect(exception, new isInstanceOf<json_rpc.RpcException>());
183 expect(exception.code, equals(error_code.SERVER_ERROR));
184 expect(exception.message, equals('you are bad at requests'));
185 expect(exception.data, equals('some junk'));
186 return true;
187 })));
188 });
189
190 test("ignores bogus responses", () {
191 // Make a request so we have something to respond to.
192 controller.expectRequest((request) {
193 controller.sendJsonResponse("{invalid");
194 controller.sendResponse("not a map");
195 controller.sendResponse({
196 'jsonrpc': 'wrong version',
197 'result': 'wrong',
198 'id': request['id']
199 });
200 controller.sendResponse({
201 'jsonrpc': '2.0',
202 'result': 'wrong'
203 });
204 controller.sendResponse({
205 'jsonrpc': '2.0',
206 'id': request['id']
207 });
208 controller.sendResponse({
209 'jsonrpc': '2.0',
210 'error': 'not a map',
211 'id': request['id']
212 });
213 controller.sendResponse({
214 'jsonrpc': '2.0',
215 'error': {
216 'code': 'not an int',
217 'message': 'dang yo'
218 },
219 'id': request['id']
220 });
221 controller.sendResponse({
222 'jsonrpc': '2.0',
223 'error': {
224 'code': 123,
225 'message': 0xDEADBEEF
226 },
227 'id': request['id']
228 });
229
230 return pumpEventQueue().then((_) => {
231 'jsonrpc': '2.0',
232 'result': 'right',
233 'id': request['id']
234 });
235 });
236
237 expect(controller.client.sendRequest("foo"), completion(equals('right')));
238 });
239 }
OLDNEW
« no previous file with comments | « pkg/json_rpc_2/pubspec.yaml ('k') | pkg/json_rpc_2/test/client/stream_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698