@@ -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