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

Side by Side Diff: mojo/dart/apptests/dart_apptests/lib/src/versioning_apptests.dart

Issue 2006093002: Dart: Futures -> Callbacks. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Merge Created 4 years, 6 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 library versioning_apptests; 5 library versioning_apptests;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 8
9 import 'package:mojo_apptest/apptest.dart'; 9 import 'package:mojo_apptest/apptest.dart';
10 import 'package:mojo/application.dart'; 10 import 'package:mojo/application.dart';
11 import 'package:mojo/bindings.dart'; 11 import 'package:mojo/bindings.dart';
12 import 'package:mojo/core.dart'; 12 import 'package:mojo/core.dart';
13 import 'package:_mojo_for_test_only/mojo/test/versioning/versioning_test_client. mojom.dart'; 13 import 'package:_mojo_for_test_only/mojo/test/versioning/versioning_test_client. mojom.dart';
14 14
15 tests(Application application, String url) { 15 tests(Application application, String url) {
16 group('Versioning Apptests', () { 16 group('Versioning Apptests', () {
17 test('Struct', () async { 17 test('Struct', () async {
18 // The service side uses a newer version of Employee definition that 18 // The service side uses a newer version of Employee definition that
19 // includes the 'birthday' field. 19 // includes the 'birthday' field.
20 20
21 // Connect to human resource database. 21 // Connect to human resource database.
22 var database = HumanResourceDatabase.connectToService( 22 var database = HumanResourceDatabase.connectToService(
23 application, "mojo:versioning_test_service"); 23 application, "mojo:versioning_test_service");
24 24
25 // Query database and get a response back (even though the client does not 25 // Query database and get a response back (even though the client does not
26 // know about the birthday field). 26 // know about the birthday field).
27 var c = new Completer();
27 bool retrieveFingerPrint = true; 28 bool retrieveFingerPrint = true;
28 var response = await database.queryEmployee(1, retrieveFingerPrint); 29 database.queryEmployee(1, retrieveFingerPrint,
29 expect(response.employee.employeeId, equals(1)); 30 (Employee e, List<int> fingerPrint) {
30 expect(response.employee.name, equals("Homer Simpson")); 31 c.complete([e, fingerPrint]);
31 expect(response.employee.department, equals(Department.dev)); 32 });
32 expect(response.fingerPrint, isNotNull); 33 var response = await database.responseOrError(c.future);
34 expect(response[0].employeeId, equals(1));
35 expect(response[0].name, equals("Homer Simpson"));
36 expect(response[0].department, equals(Department.dev));
37 expect(response[1], isNotNull);
33 38
34 // Pass an Employee struct to the service side that lacks the 'birthday' 39 // Pass an Employee struct to the service side that lacks the 'birthday'
35 // field. 40 // field.
36 var newEmployee = new Employee(); 41 var newEmployee = new Employee();
37 newEmployee.employeeId = 2; 42 newEmployee.employeeId = 2;
38 newEmployee.name = "Marge Simpson"; 43 newEmployee.name = "Marge Simpson";
39 newEmployee.department = Department.sales; 44 newEmployee.department = Department.sales;
40 response = await database.addEmployee(newEmployee); 45 c = new Completer();
41 expect(response.success, isTrue); 46 database.addEmployee(newEmployee, (bool success) {
47 c.complete(success);
48 });
49 response = await database.responseOrError(c.future);
50 expect(response, isTrue);
42 51
43 // Query for employee #2. 52 // Query for employee #2.
53 c = new Completer();
44 retrieveFingerPrint = false; 54 retrieveFingerPrint = false;
45 response = await database.queryEmployee(2, retrieveFingerPrint); 55 database.queryEmployee(2, retrieveFingerPrint,
46 expect(response.employee.employeeId, equals(2)); 56 (Employee e, List<int> fingerPrint) {
47 expect(response.employee.name, equals("Marge Simpson")); 57 c.complete([e, fingerPrint]);
48 expect(response.employee.department, equals(Department.sales)); 58 });
49 expect(response.fingerPrint, isNull); 59 response = await database.responseOrError(c.future);
60 expect(response[0].employeeId, equals(2));
61 expect(response[0].name, equals("Marge Simpson"));
62 expect(response[0].department, equals(Department.sales));
63 expect(response[1], isNull);
50 64
51 // Disconnect from database. 65 // Disconnect from database.
52 database.close(); 66 database.close();
53 }); 67 });
54 68
55 test('QueryVersion', () async { 69 test('QueryVersion', () async {
56 // Connect to human resource database. 70 // Connect to human resource database.
57 var database = HumanResourceDatabase.connectToService( 71 var database = HumanResourceDatabase.connectToService(
58 application, "mojo:versioning_test_service"); 72 application, "mojo:versioning_test_service");
59 // Query the version. 73 // Query the version.
60 var version = await database.ctrl.queryVersion(); 74 var version = await database.ctrl.queryVersion();
61 // Expect it to be 1. 75 // Expect it to be 1.
62 expect(version, equals(1)); 76 expect(version, equals(1));
63 // Disconnect from database. 77 // Disconnect from database.
64 database.close(); 78 database.close();
65 }); 79 });
66 80
67 test('RequireVersion', () async { 81 test('RequireVersion', () async {
68 // Connect to human resource database. 82 // Connect to human resource database.
69 var database = HumanResourceDatabase.connectToService( 83 var database = HumanResourceDatabase.connectToService(
70 application, "mojo:versioning_test_service"); 84 application, "mojo:versioning_test_service");
71 85
72 // Require version 1. 86 // Require version 1.
73 database.ctrl.requireVersion(1); 87 database.ctrl.requireVersion(1);
74 expect(database.ctrl.version, equals(1)); 88 expect(database.ctrl.version, equals(1));
75 89
76 // Query for employee #3. 90 // Query for employee #3.
77 var retrieveFingerPrint = false; 91 var retrieveFingerPrint = false;
78 var response = await database.queryEmployee(3, retrieveFingerPrint); 92 var c = new Completer();
93 database.queryEmployee(3, retrieveFingerPrint,
94 (Employee e, List<int> fingerPrint) {
95 c.complete([e, fingerPrint]);
96 });
97 var response = await database.responseOrError(c.future);
79 98
80 // Got some kind of response. 99 // Got some kind of response.
81 expect(response, isNotNull); 100 expect(response, isNotNull);
82 101
83 // Require version 3 (which cannot be satisfied). 102 // Require version 3 (which cannot be satisfied).
84 database.ctrl.requireVersion(3); 103 database.ctrl.requireVersion(3);
85 expect(database.ctrl.version, equals(3)); 104 expect(database.ctrl.version, equals(3));
86 105
87 // Query for employee #1, observe that the call fails. 106 // Query for employee #1, observe that the call fails.
88 bool exceptionCaught = false; 107 bool exceptionCaught = false;
108 c = new Completer();
109 database.queryEmployee(1, retrieveFingerPrint,
110 (Employee e, List<int> fingerPrint) {
111 c.complete([e, fingerPrint]);
112 });
89 try { 113 try {
90 response = await database.responseOrError( 114 response = await database.responseOrError(c.future);
91 database.queryEmployee(1, retrieveFingerPrint));
92 fail('Exception should be thrown.'); 115 fail('Exception should be thrown.');
93 } catch (e) { 116 } catch (e) {
94 exceptionCaught = true; 117 exceptionCaught = true;
95 } 118 }
96 expect(exceptionCaught, isTrue); 119 expect(exceptionCaught, isTrue);
97 120
98 // No need to disconnect from database because we were disconnected by 121 // No need to disconnect from database because we were disconnected by
99 // the requireVersion control message. 122 // the requireVersion control message.
100 }); 123 });
101 124
102 test('CallNonexistentMethod', () async { 125 test('CallNonexistentMethod', () async {
103 // Connect to human resource database. 126 // Connect to human resource database.
104 var database = HumanResourceDatabase.connectToService( 127 var database = HumanResourceDatabase.connectToService(
105 application, "mojo:versioning_test_service"); 128 application, "mojo:versioning_test_service");
106 const fingerPrintLength = 128; 129 const fingerPrintLength = 128;
107 var fingerPrint = new List(fingerPrintLength); 130 var fingerPrint = new List(fingerPrintLength);
108 for (var i = 0; i < fingerPrintLength; i++) { 131 for (var i = 0; i < fingerPrintLength; i++) {
109 fingerPrint[i] = i + 13; 132 fingerPrint[i] = i + 13;
110 } 133 }
111 // Although the client side doesn't know whether the service side supports 134 // Although the client side doesn't know whether the service side supports
112 // version 1, calling a version 1 method succeeds as long as the service 135 // version 1, calling a version 1 method succeeds as long as the service
113 // side supports version 1. 136 // side supports version 1.
114 var response = await database.attachFingerPrint(1, fingerPrint); 137 var c = new Completer();
115 expect(response.success, isTrue); 138 database.attachFingerPrint(1, fingerPrint, (bool success) {
139 c.complete(success);
140 });
141 var response = await database.responseOrError(c.future);
142 expect(response, isTrue);
116 143
117 // Calling a version 2 method (which the service side doesn't support) 144 // Calling a version 2 method (which the service side doesn't support)
118 // closes the pipe. 145 // closes the pipe.
119 bool exceptionCaught = false; 146 bool exceptionCaught = false;
147 c = new Completer();
148 database.listEmployeeIds((List<int> ids) {
149 c.complete(ids);
150 });
120 try { 151 try {
121 response = await database.responseOrError(database.listEmployeeIds()); 152 response = await database.responseOrError(c.future);
122 fail('Exception should be thrown.'); 153 fail('Exception should be thrown.');
123 } catch (e) { 154 } catch (e) {
124 exceptionCaught = true; 155 exceptionCaught = true;
125 } 156 }
126 expect(exceptionCaught, isTrue); 157 expect(exceptionCaught, isTrue);
127 158
128 // No need to disconnect from database because we were disconnected by 159 // No need to disconnect from database because we were disconnected by
129 // the call to a version 2 method. 160 // the call to a version 2 method.
130 }); 161 });
131 }); 162 });
132 } 163 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698