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

Side by Side Diff: runtime/observatory/tests/service/developer_extension_test.dart

Issue 1270103002: Allow Dart code to register service protocol handlers (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 4 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
« no previous file with comments | « no previous file | runtime/vm/json_stream.cc » ('j') | sdk/lib/developer/extension.dart » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2015, 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 // VMOptions=--error_on_bad_type --error_on_bad_override
5
6 import 'dart:async';
7 import 'dart:convert';
8 import 'dart:developer';
9 import 'package:observatory/service_io.dart';
10 import 'package:observatory/cpu_profile.dart';
11 import 'package:unittest/unittest.dart';
12
13 import 'test_helper.dart';
14
15 Future<ServiceExtensionResponse> Handler(String method,
16 Map paremeters) {
turnidge 2015/08/06 18:12:54 Reminder to run the tests in --checked mode before
Cutch 2015/08/06 23:20:18 Done.
17 switch (method) {
18 case '__delay':
19 Completer c = new Completer();
20 new Timer(new Duration(seconds: 1), () {
21 c.complete(new ServiceExtensionResponse.result(JSON.encode({
22 'type': '_delayedType',
23 'method': method,
24 'parameters': paremeters,
25 })));
26 });
27 return c.future;
28 case '__error':
29 return new ServiceExtensionResponse.error(
30 ServiceExtensionResponse.kExtensionErrorMin,
31 'My error detail.');
32 case '__exception':
33 throw "I always throw!";
34 case '__success':
35 return new ServiceExtensionResponse.result(JSON.encode({
36 'type': '_extensionType',
37 'method': method,
38 'parameters': paremeters,
39 }));
40 case '__null':
41 return null;
42 }
43 }
44
45 void test() {
46 registerExtension('__delay', Handler);
47 registerExtension('__error', Handler);
48 registerExtension('__exception', Handler);
49 registerExtension('__null', Handler);
50 registerExtension('__success', Handler);
51 bool exceptionThrown = false;
52 try {
53 registerException('__delay', Handler);
54 } catch (e) {
55 exceptionThrown = true;
56 }
57 expect(exceptionThrown, isTrue);
58 }
59
60 var tests = [
61 // Initial.
62 (Isolate isolate) async {
63 var result;
64
65 result = await isolate.invokeRpcNoUpgrade('__delay', {});
66 expect(result['type'], equals('_delayedType'));
67 expect(result['method'], equals('__delay'));
68 expect(result['parameters']['isolateId'], isNotNull);
69
70 try {
71 await isolate.invokeRpcNoUpgrade('__error', {});
72 } on ServerRpcException catch (e, st) {
73 expect(e.code, equals(ServiceExtensionResponse.kExtensionErrorMin));
74 expect(e.message, equals('My error detail.'));
75 }
76
77 try {
78 await isolate.invokeRpcNoUpgrade('__exception', {});
79 } on ServerRpcException catch (e, st) {
80 expect(e.code, equals(ServiceExtensionResponse.kExtensionError));
81 expect(e.message.startsWith('I always throw!\n'), isTrue);
82 }
83
84 try {
85 await isolate.invokeRpcNoUpgrade('__null', {});
86 } on ServerRpcException catch (e, st) {
87 expect(e.code, equals(ServiceExtensionResponse.kExtensionError));
88 expect(e.message, equals('Extension handler returned null'));
89 }
90
91 result = await isolate.invokeRpcNoUpgrade('__success',
92 {'apple': 'banana'});
93 expect(result['type'], equals('_extensionType'));
94 expect(result['method'], equals('__success'));
95 expect(result['parameters']['isolateId'], isNotNull);
96 expect(result['parameters']['apple'], equals('banana'));
97
98
99 },
100 ];
101
102 main(args) async => runIsolateTests(args, tests, testeeBefore:test);
OLDNEW
« no previous file with comments | « no previous file | runtime/vm/json_stream.cc » ('j') | sdk/lib/developer/extension.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698