diff --git a/packages/messageport/CHANGELOG.md b/packages/messageport/CHANGELOG.md index 1fdc90a81..62a239d0b 100644 --- a/packages/messageport/CHANGELOG.md +++ b/packages/messageport/CHANGELOG.md @@ -3,6 +3,7 @@ * Fix new lint warnings. * Update minimum Flutter and Dart version to 3.13 and 3.1. * Update code format. +* Add 5 integration test cases. ## 0.3.2 diff --git a/packages/messageport/example/integration_test/messageport_test.dart b/packages/messageport/example/integration_test/messageport_test.dart index ab6b28858..621d7a2e6 100644 --- a/packages/messageport/example/integration_test/messageport_test.dart +++ b/packages/messageport/example/integration_test/messageport_test.dart @@ -110,6 +110,55 @@ void main() { await localPort.unregister(); }, timeout: const Timeout(Duration(seconds: 5))); + group('LocalPort lifecycle', () { + testWidgets('registered reflects the register/unregister lifecycle', ( + WidgetTester tester, + ) async { + final LocalPort localPort = await LocalPort.create(kTestPort); + // Ensure the port is unregistered even if an assertion below fails. + addTearDown(localPort.unregister); + expect(localPort.portName, equals(kTestPort)); + expect(localPort.registered, isFalse); + + localPort.register((dynamic message, [RemotePort? remotePort]) {}); + expect(localPort.registered, isTrue); + + await localPort.unregister(); + expect(localPort.registered, isFalse); + }, timeout: const Timeout(Duration(seconds: 5))); + + testWidgets('register throws when the port is already registered', ( + WidgetTester tester, + ) async { + final LocalPort localPort = await LocalPort.create(kTestPort); + addTearDown(localPort.unregister); + localPort.register((dynamic message, [RemotePort? remotePort]) {}); + + expect( + () => + localPort.register((dynamic message, [RemotePort? remotePort]) {}), + throwsException, + ); + }, timeout: const Timeout(Duration(seconds: 5))); + + testWidgets('unregister is safe when not registered and when repeated', ( + WidgetTester tester, + ) async { + final LocalPort localPort = await LocalPort.create(kTestPort); + addTearDown(localPort.unregister); + + // Unregistering before any registration must not throw. + await localPort.unregister(); + expect(localPort.registered, isFalse); + + // Unregister is safe to call repeatedly after a registration. + localPort.register((dynamic message, [RemotePort? remotePort]) {}); + await localPort.unregister(); + await localPort.unregister(); + expect(localPort.registered, isFalse); + }, timeout: const Timeout(Duration(seconds: 5))); + }); + group('Types test', () { late LocalPort localPort; late RemotePort remotePort; @@ -172,5 +221,18 @@ void main() { final Map value = {'a': 5, 'b': 12}; await checkForMessage>(value); }, timeout: const Timeout(Duration(seconds: 5))); + + testWidgets('empty string', (WidgetTester tester) async { + const String value = ''; + await checkForMessage(value); + }, timeout: const Timeout(Duration(seconds: 5))); + + testWidgets('nested collection', (WidgetTester tester) async { + final Map value = { + 'numbers': [1, 2, 3], + 'nested': {'key': 'value'}, + }; + await checkForMessage>(value); + }, timeout: const Timeout(Duration(seconds: 5))); }); }