| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 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 | 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. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library test.protocol; | 5 library test.protocol; |
| 6 | 6 |
| 7 import 'dart:convert'; | 7 import 'dart:convert'; |
| 8 | 8 |
| 9 import 'package:analysis_server/src/protocol.dart'; | 9 import 'package:analysis_server/src/protocol.dart'; |
| 10 import 'package:unittest/unittest.dart'; | 10 import 'package:unittest/unittest.dart'; |
| 11 | 11 |
| 12 import 'declarative_tests.dart'; | 12 import 'declarative_tests.dart'; |
| 13 | 13 |
| 14 main() { | 14 main() { |
| 15 addTestSuite(NotificationTest); | 15 addTestSuite(NotificationTest); |
| 16 addTestSuite(RequestTest); | 16 addTestSuite(RequestTest); |
| 17 addTestSuite(RequestErrorTest); | 17 addTestSuite(RequestErrorTest); |
| 18 addTestSuite(RequestDatumTest); |
| 18 addTestSuite(ResponseTest); | 19 addTestSuite(ResponseTest); |
| 19 } | 20 } |
| 20 | 21 |
| 21 class NotificationTest { | 22 class NotificationTest { |
| 22 @runTest | 23 @runTest |
| 23 static void getParameter_defined() { | 24 static void getParameter_defined() { |
| 24 Notification notification = new Notification('foo'); | 25 Notification notification = new Notification('foo'); |
| 25 notification.setParameter('x', 'y'); | 26 notification.setParameter('x', 'y'); |
| 26 expect(notification.event, equals('foo')); | 27 expect(notification.event, equals('foo')); |
| 27 expect(notification.params.length, equals(1)); | 28 expect(notification.params.length, equals(1)); |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 63 } | 64 } |
| 64 } | 65 } |
| 65 | 66 |
| 66 class RequestTest { | 67 class RequestTest { |
| 67 @runTest | 68 @runTest |
| 68 static void getParameter_defined() { | 69 static void getParameter_defined() { |
| 69 String name = 'name'; | 70 String name = 'name'; |
| 70 String value = 'value'; | 71 String value = 'value'; |
| 71 Request request = new Request('0', ''); | 72 Request request = new Request('0', ''); |
| 72 request.setParameter(name, value); | 73 request.setParameter(name, value); |
| 73 expect(request.getParameter(name), equals(value)); | 74 expect(request.getParameter(name, null).datum, equals(value)); |
| 74 } | 75 } |
| 75 | 76 |
| 76 @runTest | 77 @runTest |
| 77 static void getParameter_undefined() { | 78 static void getParameter_undefined() { |
| 78 String name = 'name'; | 79 String name = 'name'; |
| 80 String defaultValue = 'default value'; |
| 79 Request request = new Request('0', ''); | 81 Request request = new Request('0', ''); |
| 80 expect(request.getParameter(name), isNull); | 82 expect(request.getParameter(name, defaultValue).datum, equals(defaultValue))
; |
| 81 } | 83 } |
| 82 | 84 |
| 83 @runTest | 85 @runTest |
| 84 static void getRequiredParameter_defined() { | 86 static void getRequiredParameter_defined() { |
| 85 String name = 'name'; | 87 String name = 'name'; |
| 86 String value = 'value'; | 88 String value = 'value'; |
| 87 Request request = new Request('0', ''); | 89 Request request = new Request('0', ''); |
| 88 request.setParameter(name, value); | 90 request.setParameter(name, value); |
| 89 expect(request.getRequiredParameter(name), equals(value)); | 91 expect(request.getRequiredParameter(name).datum, equals(value)); |
| 90 } | 92 } |
| 91 | 93 |
| 92 @runTest | 94 @runTest |
| 93 static void getRequiredParameter_undefined() { | 95 static void getRequiredParameter_undefined() { |
| 94 String name = 'name'; | 96 String name = 'name'; |
| 95 Request request = new Request('0', ''); | 97 Request request = new Request('0', ''); |
| 96 expect(() => request.getRequiredParameter(name), _throwsRequestFailure); | 98 expect(() => request.getRequiredParameter(name), _throwsRequestFailure); |
| 97 } | 99 } |
| 98 | 100 |
| 99 @runTest | 101 @runTest |
| (...skipping 27 matching lines...) Expand all Loading... |
| 127 } | 129 } |
| 128 | 130 |
| 129 @runTest | 131 @runTest |
| 130 static void fromJson_withParams() { | 132 static void fromJson_withParams() { |
| 131 Request original = new Request('one', 'aMethod'); | 133 Request original = new Request('one', 'aMethod'); |
| 132 original.setParameter('foo', 'bar'); | 134 original.setParameter('foo', 'bar'); |
| 133 String json = JSON.encode(original.toJson()); | 135 String json = JSON.encode(original.toJson()); |
| 134 Request request = new Request.fromString(json); | 136 Request request = new Request.fromString(json); |
| 135 expect(request.id, equals('one')); | 137 expect(request.id, equals('one')); |
| 136 expect(request.method, equals('aMethod')); | 138 expect(request.method, equals('aMethod')); |
| 137 expect(request.getParameter('foo'), equals('bar')); | 139 expect(request.getParameter('foo', null).asString(), equals('bar')); |
| 138 } | 140 } |
| 139 | 141 |
| 140 @runTest | 142 @runTest |
| 141 static void toBool() { | |
| 142 Request request = new Request('0', ''); | |
| 143 expect(request.toBool(true), isTrue); | |
| 144 expect(request.toBool(false), isFalse); | |
| 145 expect(request.toBool('true'), isTrue); | |
| 146 expect(request.toBool('false'), isFalse); | |
| 147 expect(request.toBool('abc'), isFalse); | |
| 148 expect(() => request.toBool(42), _throwsRequestFailure); | |
| 149 } | |
| 150 | |
| 151 @runTest | |
| 152 static void toInt() { | |
| 153 Request request = new Request('0', ''); | |
| 154 expect(request.toInt(1), equals(1)); | |
| 155 expect(request.toInt('2'), equals(2)); | |
| 156 expect(() => request.toInt('xxx'), _throwsRequestFailure); | |
| 157 expect(() => request.toInt(request), _throwsRequestFailure); | |
| 158 } | |
| 159 | |
| 160 @runTest | |
| 161 static void toJson() { | 143 static void toJson() { |
| 162 Request request = new Request('one', 'aMethod'); | 144 Request request = new Request('one', 'aMethod'); |
| 163 expect(request.toJson(), equals({ | 145 expect(request.toJson(), equals({ |
| 164 Request.ID : 'one', | 146 Request.ID : 'one', |
| 165 Request.METHOD : 'aMethod' | 147 Request.METHOD : 'aMethod' |
| 166 })); | 148 })); |
| 167 } | 149 } |
| 168 | 150 |
| 169 @runTest | 151 @runTest |
| 170 static void toJson_withParams() { | 152 static void toJson_withParams() { |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 252 error.setData('answer', 42); | 234 error.setData('answer', 42); |
| 253 error.setData('question', 'unknown'); | 235 error.setData('question', 'unknown'); |
| 254 expect(error.toJson(), { | 236 expect(error.toJson(), { |
| 255 RequestError.CODE: 0, | 237 RequestError.CODE: 0, |
| 256 RequestError.MESSAGE: 'msg', | 238 RequestError.MESSAGE: 'msg', |
| 257 RequestError.DATA: {'answer': 42, 'question': 'unknown'} | 239 RequestError.DATA: {'answer': 42, 'question': 'unknown'} |
| 258 }); | 240 }); |
| 259 } | 241 } |
| 260 } | 242 } |
| 261 | 243 |
| 244 class InvalidParameterResponseMatcher extends Matcher { |
| 245 static const int ERROR_CODE = -2; |
| 246 |
| 247 @override |
| 248 Description describe(Description description) => |
| 249 description.add("an 'invalid parameter' response (code $ERROR_CODE)"); |
| 250 |
| 251 @override |
| 252 bool matches(item, Map matchState) { |
| 253 if (item is! Response) { |
| 254 return false; |
| 255 } |
| 256 Response response = item; |
| 257 if (response.error is! RequestError) { |
| 258 return false; |
| 259 } |
| 260 RequestError requestError = response.error; |
| 261 if (requestError.code != ERROR_CODE) { |
| 262 return false; |
| 263 } |
| 264 return true; |
| 265 } |
| 266 } |
| 267 |
| 268 class RequestDatumTest { |
| 269 static Request request; |
| 270 |
| 271 static Matcher _throwsInvalidParameter = throwsA( |
| 272 new InvalidParameterResponseMatcher()); |
| 273 static Matcher isRequestDatum = new isInstanceOf<RequestDatum>("RequestDatum" |
| 274 ); |
| 275 |
| 276 static void setUp() { |
| 277 request = new Request('myId', 'myMethod'); |
| 278 } |
| 279 |
| 280 static RequestDatum makeDatum(dynamic datum) { |
| 281 return new RequestDatum(request, 'myPath', datum); |
| 282 } |
| 283 |
| 284 static void indexOperator_nonMap() { |
| 285 expect(() => makeDatum(1)['foo'], _throwsInvalidParameter); |
| 286 } |
| 287 |
| 288 static void indexOperator_missingKey() { |
| 289 expect(() => makeDatum({ |
| 290 'foo': 'bar' |
| 291 })['baz'], _throwsInvalidParameter); |
| 292 } |
| 293 |
| 294 static void indexOperator_hasKey() { |
| 295 var indexResult = makeDatum({ |
| 296 'foo': 'bar' |
| 297 })['foo']; |
| 298 expect(indexResult, isRequestDatum); |
| 299 expect(indexResult.datum, equals('bar')); |
| 300 expect(indexResult.path, equals('myPath.bar')); |
| 301 } |
| 302 |
| 303 static void forEachMap_nonMap() { |
| 304 expect(() => makeDatum(1).forEachMap((key, value) { |
| 305 fail('Non-map should not be iterated'); |
| 306 }), _throwsInvalidParameter); |
| 307 } |
| 308 |
| 309 static void forEachMap_emptyMap() { |
| 310 makeDatum({}).forEachMap((key, value) { |
| 311 fail('Empty map should not be iterated'); |
| 312 }); |
| 313 } |
| 314 |
| 315 static void forEachMap_oneElementMap() { |
| 316 int callCount = 0; |
| 317 makeDatum({ |
| 318 'key': 'value' |
| 319 }).forEachMap((key, value) { |
| 320 callCount++; |
| 321 expect(key, equals('key')); |
| 322 expect(value, isRequestDatum); |
| 323 expect(value.datum, equals('value')); |
| 324 }); |
| 325 expect(callCount, equals(1)); |
| 326 } |
| 327 |
| 328 static void forEachMap_twoElementMap() { |
| 329 int callCount = 0; |
| 330 Map<String, String> map = { |
| 331 'key1': 'value1', |
| 332 'key2': 'value2' |
| 333 }; |
| 334 Map iterationResult = {}; |
| 335 makeDatum(map).forEachMap((key, value) { |
| 336 callCount++; |
| 337 iterationResult[key] = value; |
| 338 }); |
| 339 expect(callCount, equals(2)); |
| 340 expect(iterationResult, equals(map)); |
| 341 } |
| 342 |
| 343 static void asBool() { |
| 344 expect(makeDatum(true).asBool(), isTrue); |
| 345 expect(makeDatum(false).asBool(), isFalse); |
| 346 expect(makeDatum('true').asBool(), isTrue); |
| 347 expect(makeDatum('false').asBool(), isFalse); |
| 348 expect(() => makeDatum('abc').asBool(), _throwsInvalidParameter); |
| 349 } |
| 350 |
| 351 static void asInt() { |
| 352 expect(makeDatum(1).asInt(), equals(1)); |
| 353 expect(makeDatum('2').asInt(), equals(2)); |
| 354 expect(() => makeDatum('xxx').asInt(), _throwsInvalidParameter); |
| 355 expect(() => makeDatum(true).asInt(), _throwsInvalidParameter); |
| 356 } |
| 357 |
| 358 static void asString() { |
| 359 expect(makeDatum('foo').asString(), equals('foo')); |
| 360 expect(() => makeDatum(3).asString(), _throwsInvalidParameter); |
| 361 } |
| 362 |
| 363 static void asStringList() { |
| 364 expect(makeDatum(['foo', 'bar']).asStringList(), equals(['foo', 'bar'])); |
| 365 expect(makeDatum([]).asStringList(), equals([])); |
| 366 expect(() => makeDatum(['foo', 1]).asStringList(), _throwsInvalidParameter); |
| 367 expect(() => makeDatum({}).asStringList(), _throwsInvalidParameter); |
| 368 } |
| 369 |
| 370 static void asStringMap() { |
| 371 expect(makeDatum({ |
| 372 'key1': 'value1', |
| 373 'key2': 'value2' |
| 374 }).asStringMap(), equals({ |
| 375 'key1': 'value1', |
| 376 'key2': 'value2' |
| 377 })); |
| 378 expect(makeDatum({}).asStringMap(), equals({})); |
| 379 expect(() => makeDatum({ |
| 380 'key1': 'value1', |
| 381 'key2': 2 |
| 382 }).asStringMap(), _throwsInvalidParameter); |
| 383 expect(() => makeDatum({ |
| 384 'key1': 1, |
| 385 'key2': 2 |
| 386 }).asStringMap(), _throwsInvalidParameter); |
| 387 expect(() => makeDatum({ |
| 388 1: 'value1', |
| 389 2: 'value2' |
| 390 }).asStringMap(), _throwsInvalidParameter); |
| 391 expect(() => makeDatum([]).asStringMap(), _throwsInvalidParameter); |
| 392 } |
| 393 } |
| 394 |
| 262 class ResponseTest { | 395 class ResponseTest { |
| 263 @runTest | 396 @runTest |
| 264 static void create_contextDoesNotExist() { | 397 static void create_contextDoesNotExist() { |
| 265 Response response = new Response.contextDoesNotExist(new Request('0', '')); | 398 Response response = new Response.contextDoesNotExist(new Request('0', '')); |
| 266 expect(response.id, equals('0')); | 399 expect(response.id, equals('0')); |
| 267 expect(response.error, isNotNull); | 400 expect(response.error, isNotNull); |
| 268 expect(response.toJson(), equals({ | 401 expect(response.toJson(), equals({ |
| 269 Response.ID: '0', | 402 Response.ID: '0', |
| 270 Response.ERROR: {'code': -1, 'message': 'Context does not exist'} | 403 Response.ERROR: {'code': -1, 'message': 'Context does not exist'} |
| 271 })); | 404 })); |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 355 original.setResult('foo', 'bar'); | 488 original.setResult('foo', 'bar'); |
| 356 Response response = new Response.fromJson(original.toJson()); | 489 Response response = new Response.fromJson(original.toJson()); |
| 357 expect(response.id, equals('myId')); | 490 expect(response.id, equals('myId')); |
| 358 Map<String, Object> result = response.result; | 491 Map<String, Object> result = response.result; |
| 359 expect(result.length, equals(1)); | 492 expect(result.length, equals(1)); |
| 360 expect(result['foo'], equals('bar')); | 493 expect(result['foo'], equals('bar')); |
| 361 } | 494 } |
| 362 } | 495 } |
| 363 | 496 |
| 364 Matcher _throwsRequestFailure = throwsA(new isInstanceOf<RequestFailure>()); | 497 Matcher _throwsRequestFailure = throwsA(new isInstanceOf<RequestFailure>()); |
| OLD | NEW |