Skip to content

Commit ee2878e

Browse files
authored
[messageport] Add regression integration tests (#1043)
1 parent da224f3 commit ee2878e

2 files changed

Lines changed: 63 additions & 0 deletions

File tree

packages/messageport/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
* Fix new lint warnings.
44
* Update minimum Flutter and Dart version to 3.13 and 3.1.
55
* Update code format.
6+
* Add 5 integration test cases.
67

78
## 0.3.2
89

packages/messageport/example/integration_test/messageport_test.dart

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,55 @@ void main() {
110110
await localPort.unregister();
111111
}, timeout: const Timeout(Duration(seconds: 5)));
112112

113+
group('LocalPort lifecycle', () {
114+
testWidgets('registered reflects the register/unregister lifecycle', (
115+
WidgetTester tester,
116+
) async {
117+
final LocalPort localPort = await LocalPort.create(kTestPort);
118+
// Ensure the port is unregistered even if an assertion below fails.
119+
addTearDown(localPort.unregister);
120+
expect(localPort.portName, equals(kTestPort));
121+
expect(localPort.registered, isFalse);
122+
123+
localPort.register((dynamic message, [RemotePort? remotePort]) {});
124+
expect(localPort.registered, isTrue);
125+
126+
await localPort.unregister();
127+
expect(localPort.registered, isFalse);
128+
}, timeout: const Timeout(Duration(seconds: 5)));
129+
130+
testWidgets('register throws when the port is already registered', (
131+
WidgetTester tester,
132+
) async {
133+
final LocalPort localPort = await LocalPort.create(kTestPort);
134+
addTearDown(localPort.unregister);
135+
localPort.register((dynamic message, [RemotePort? remotePort]) {});
136+
137+
expect(
138+
() =>
139+
localPort.register((dynamic message, [RemotePort? remotePort]) {}),
140+
throwsException,
141+
);
142+
}, timeout: const Timeout(Duration(seconds: 5)));
143+
144+
testWidgets('unregister is safe when not registered and when repeated', (
145+
WidgetTester tester,
146+
) async {
147+
final LocalPort localPort = await LocalPort.create(kTestPort);
148+
addTearDown(localPort.unregister);
149+
150+
// Unregistering before any registration must not throw.
151+
await localPort.unregister();
152+
expect(localPort.registered, isFalse);
153+
154+
// Unregister is safe to call repeatedly after a registration.
155+
localPort.register((dynamic message, [RemotePort? remotePort]) {});
156+
await localPort.unregister();
157+
await localPort.unregister();
158+
expect(localPort.registered, isFalse);
159+
}, timeout: const Timeout(Duration(seconds: 5)));
160+
});
161+
113162
group('Types test', () {
114163
late LocalPort localPort;
115164
late RemotePort remotePort;
@@ -172,5 +221,18 @@ void main() {
172221
final Map<String, int> value = <String, int>{'a': 5, 'b': 12};
173222
await checkForMessage<Map<dynamic, dynamic>>(value);
174223
}, timeout: const Timeout(Duration(seconds: 5)));
224+
225+
testWidgets('empty string', (WidgetTester tester) async {
226+
const String value = '';
227+
await checkForMessage<String>(value);
228+
}, timeout: const Timeout(Duration(seconds: 5)));
229+
230+
testWidgets('nested collection', (WidgetTester tester) async {
231+
final Map<String, dynamic> value = <String, dynamic>{
232+
'numbers': <int>[1, 2, 3],
233+
'nested': <String, String>{'key': 'value'},
234+
};
235+
await checkForMessage<Map<dynamic, dynamic>>(value);
236+
}, timeout: const Timeout(Duration(seconds: 5)));
175237
});
176238
}

0 commit comments

Comments
 (0)