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

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') | 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) 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) {
17 print('Invoked extension: $method');
18 switch (method) {
19 case '__delay':
20 Completer c = new Completer();
21 new Timer(new Duration(seconds: 1), () {
22 c.complete(new ServiceExtensionResponse.result(JSON.encode({
23 'type': '_delayedType',
24 'method': method,
25 'parameters': paremeters,
26 })));
27 });
28 return c.future;
29 case '__error':
30 return new Future.value(
31 new ServiceExtensionResponse.error(
32 ServiceExtensionResponse.kExtensionErrorMin,
33 'My error detail.'));
34 case '__exception':
35 throw "I always throw!";
36 case '__success':
37 return new Future.value(
38 new ServiceExtensionResponse.result(JSON.encode({
39 'type': '_extensionType',
40 'method': method,
41 'parameters': paremeters,
42 })));
43 case '__null':
44 return null;
45 case '__nullFuture':
46 return new Future.value(null);
47 }
48 }
49
50 void test() {
51 registerExtension('__delay', Handler);
52 registerExtension('__error', Handler);
53 registerExtension('__exception', Handler);
54 registerExtension('__null', Handler);
55 registerExtension('__nullFuture', Handler);
56 registerExtension('__success', Handler);
57 bool exceptionThrown = false;
58 try {
59 registerException('__delay', Handler);
60 } catch (e) {
61 exceptionThrown = true;
62 }
63 expect(exceptionThrown, isTrue);
64 }
65
66 var tests = [
67 // Initial.
68 (Isolate isolate) async {
69 var result;
70
71 result = await isolate.invokeRpcNoUpgrade('__delay', {});
72 expect(result['type'], equals('_delayedType'));
73 expect(result['method'], equals('__delay'));
74 expect(result['parameters']['isolateId'], isNotNull);
75
76 try {
77 await isolate.invokeRpcNoUpgrade('__error', {});
78 } on ServerRpcException catch (e, st) {
79 expect(e.code, equals(ServiceExtensionResponse.kExtensionErrorMin));
80 expect(e.message, equals('My error detail.'));
81 }
82
83 try {
84 await isolate.invokeRpcNoUpgrade('__exception', {});
85 } on ServerRpcException catch (e, st) {
86 expect(e.code, equals(ServiceExtensionResponse.kExtensionError));
87 expect(e.message.startsWith('I always throw!\n'), isTrue);
88 }
89
90 try {
91 await isolate.invokeRpcNoUpgrade('__null', {});
92 } on ServerRpcException catch (e, st) {
93 expect(e.code, equals(ServiceExtensionResponse.kExtensionError));
94 expect(e.message, equals('Extension handler must return a Future'));
95 }
96
97 try {
98 await isolate.invokeRpcNoUpgrade('__nullFuture', {});
99 } on ServerRpcException catch (e, st) {
100 expect(e.code, equals(ServiceExtensionResponse.kExtensionError));
101 expect(e.message, equals('Extension handler returned null'));
102 }
103
104 result = await isolate.invokeRpcNoUpgrade('__success',
105 {'apple': 'banana'});
106 expect(result['type'], equals('_extensionType'));
107 expect(result['method'], equals('__success'));
108 expect(result['parameters']['isolateId'], isNotNull);
109 expect(result['parameters']['apple'], equals('banana'));
110
111
112 },
113 ];
114
115 main(args) async => runIsolateTests(args, tests, testeeBefore:test);
OLDNEW
« no previous file with comments | « no previous file | runtime/vm/json_stream.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698