Skip to content
This repository was archived by the owner on Feb 22, 2023. It is now read-only.

Commit f9eb6db

Browse files
committed
add unit test to e2e
1 parent 9d31c55 commit f9eb6db

File tree

3 files changed

+117
-26
lines changed

3 files changed

+117
-26
lines changed

packages/e2e/lib/e2e.dart

Lines changed: 29 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -93,36 +93,39 @@ class E2EWidgetsFlutterBinding extends LiveTestWidgetsFlutterBinding {
9393
});
9494
}
9595

96+
/// the callback function to response the driver side input.
97+
@visibleForTesting
98+
Future<Map<String, dynamic>> callback(Map<String, String> params) async {
99+
final String command = params['command'];
100+
Map<String, String> response;
101+
switch (command) {
102+
case 'request_data':
103+
final bool allTestsPassed = await _allTestsPassed.future;
104+
response = <String, String>{
105+
'message': allTestsPassed
106+
? Response.allTestsPassed(data: _data).toJson()
107+
: Response.someTestsFailed(
108+
_failureMethodsDetails,
109+
data: _data,
110+
).toJson(),
111+
};
112+
break;
113+
case 'get_health':
114+
response = <String, String>{'status': 'ok'};
115+
break;
116+
default:
117+
throw UnimplementedError('$command is not implemented');
118+
}
119+
return <String, dynamic>{
120+
'isError': false,
121+
'response': response,
122+
};
123+
}
124+
96125
// Emulates the Flutter driver extension, returning 'pass' or 'fail'.
97126
@override
98127
void initServiceExtensions() {
99128
super.initServiceExtensions();
100-
Future<Map<String, dynamic>> callback(Map<String, String> params) async {
101-
final String command = params['command'];
102-
Map<String, String> response;
103-
switch (command) {
104-
case 'request_data':
105-
final bool allTestsPassed = await _allTestsPassed.future;
106-
response = <String, String>{
107-
'message': allTestsPassed
108-
? Response.allTestsPassed(data: _data).toJson()
109-
: Response.someTestsFailed(
110-
_failureMethodsDetails,
111-
data: _data,
112-
).toJson(),
113-
};
114-
break;
115-
case 'get_health':
116-
response = <String, String>{'status': 'ok'};
117-
break;
118-
default:
119-
throw UnimplementedError('$command is not implemented');
120-
}
121-
return <String, dynamic>{
122-
'isError': false,
123-
'response': response,
124-
};
125-
}
126129

127130
if (kIsWeb) {
128131
registerWebServiceExtension(callback);
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import 'package:flutter/material.dart';
2+
3+
import 'package:e2e/e2e.dart';
4+
import 'package:e2e/common.dart';
5+
import 'package:flutter_test/flutter_test.dart';
6+
7+
void main() async {
8+
Future<Map<String, dynamic>> request;
9+
10+
group('Test E2E binding', () {
11+
final WidgetsBinding binding = E2EWidgetsFlutterBinding.ensureInitialized();
12+
assert(binding is E2EWidgetsFlutterBinding);
13+
final E2EWidgetsFlutterBinding e2ebinding =
14+
binding as E2EWidgetsFlutterBinding;
15+
16+
setUp(() {
17+
request = e2ebinding.callback(<String, String>{
18+
'command': 'request_data',
19+
});
20+
});
21+
22+
testWidgets('Run E2E app', (WidgetTester tester) async {
23+
runApp(MaterialApp(
24+
home: Text('Test'),
25+
));
26+
expect(tester.binding, e2ebinding);
27+
e2ebinding.addData(<String, dynamic>{'answer': 42});
28+
});
29+
});
30+
31+
tearDownAll(() async {
32+
// This part is outside the group so that `request` has been compeleted as
33+
// part of the `tearDownAll` registerred in the group during
34+
// `E2EWidgetsFlutterBinding` initialization.
35+
final Map<String, dynamic> response =
36+
(await request)['response'] as Map<String, dynamic>;
37+
final String message = response['message'] as String;
38+
Response result = Response.fromJson(message);
39+
assert(result.data['answer'] == 42);
40+
});
41+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import 'package:flutter_test/flutter_test.dart';
2+
3+
import 'package:e2e/common.dart';
4+
5+
void main() {
6+
test('Serialize and deserialize Failure', () {
7+
Failure fail = Failure('what a name', 'no detail');
8+
Failure restored = Failure.fromJsonString(fail.toString());
9+
expect(restored.methodName, fail.methodName);
10+
expect(restored.details, fail.details);
11+
});
12+
13+
test('Serialize and deserialize Response', () {
14+
Response response, restored;
15+
String jsonString;
16+
17+
response = Response.allTestsPassed();
18+
jsonString = response.toJson();
19+
expect(jsonString, '{"result":"true","failureDetails":[]}');
20+
restored = Response.fromJson(jsonString);
21+
expect(restored.allTestsPassed, response.allTestsPassed);
22+
expect(restored.data, null);
23+
expect(restored.formattedFailureDetails, '');
24+
25+
final Failure fail = Failure('what a name', 'no detail');
26+
final Failure fail2 = Failure('what a name2', 'no detail2');
27+
response = Response.someTestsFailed([fail, fail2]);
28+
jsonString = response.toJson();
29+
restored = Response.fromJson(jsonString);
30+
expect(restored.allTestsPassed, response.allTestsPassed);
31+
expect(restored.data, null);
32+
expect(restored.formattedFailureDetails, response.formattedFailureDetails);
33+
34+
Map<String, dynamic> data = <String, dynamic>{'aaa': 'bbb'};
35+
response = Response.allTestsPassed(data: data);
36+
jsonString = response.toJson();
37+
restored = Response.fromJson(jsonString);
38+
expect(restored.data.keys, ['aaa']);
39+
expect(restored.data.values, ['bbb']);
40+
41+
response = Response.someTestsFailed([fail, fail2], data: data);
42+
jsonString = response.toJson();
43+
restored = Response.fromJson(jsonString);
44+
expect(restored.data.keys, ['aaa']);
45+
expect(restored.data.values, ['bbb']);
46+
});
47+
}

0 commit comments

Comments
 (0)