44
55import 'package:flutter_test/flutter_test.dart' ;
66import 'package:integration_test/integration_test.dart' ;
7- import 'package:tizen_rpc_port/src/parcel.dart' ;
7+ import 'package:tizen_bundle/tizen_bundle.dart' ;
8+ import 'package:tizen_rpc_port/tizen_rpc_port.dart' ;
9+
10+ // A minimal Parcelable implementation used only in tests.
11+ class _Point implements Parcelable {
12+ _Point ({this .x = 0 , this .y = 0 });
13+
14+ int x;
15+ int y;
16+
17+ @override
18+ void serialize (Parcel parcel) {
19+ parcel.writeInt32 (x);
20+ parcel.writeInt32 (y);
21+ }
22+
23+ @override
24+ void deserialize (Parcel parcel) {
25+ x = parcel.readInt32 ();
26+ y = parcel.readInt32 ();
27+ }
28+ }
29+
30+ // A minimal ProxyBase subclass used only to test single-app observable
31+ // behaviour (isConnected initial state, connection rejection).
32+ class _TestProxy extends ProxyBase {
33+ _TestProxy () : super ('org.tizen.nonexistent_app_for_rpc_test' , 'TestPort' );
34+
35+ @override
36+ Future <void > onReceivedEvent (Parcel parcel) async {}
37+ }
838
939void main () {
1040 IntegrationTestWidgetsFlutterBinding .ensureInitialized ();
1141
42+ // ---------------------------------------------------------------------------
43+ // Existing tests — preserved unchanged
44+ // ---------------------------------------------------------------------------
45+
1246 testWidgets ('Parcel test' , (WidgetTester tester) async {
1347 final Parcel parcel = Parcel ();
1448 parcel.writeBool (false );
@@ -23,4 +57,230 @@ void main() {
2357 expect (parcel.readByte (), 0x3f );
2458 expect (parcel.readDouble (), 123.4 );
2559 });
60+
61+ // ---------------------------------------------------------------------------
62+ // Parcel — additional primitive types
63+ // ---------------------------------------------------------------------------
64+
65+ group ('Parcel' , () {
66+ group ('writeInt16 / readInt16' , () {
67+ testWidgets ('round-trips positive value' , (WidgetTester _) async {
68+ final Parcel parcel = Parcel ();
69+ parcel.writeInt16 (32767 );
70+ expect (parcel.readInt16 (), 32767 );
71+ });
72+
73+ testWidgets ('round-trips negative value' , (WidgetTester _) async {
74+ final Parcel parcel = Parcel ();
75+ parcel.writeInt16 (- 1 );
76+ expect (parcel.readInt16 (), - 1 );
77+ });
78+
79+ testWidgets ('round-trips minimum value' , (WidgetTester _) async {
80+ final Parcel parcel = Parcel ();
81+ parcel.writeInt16 (- 32768 );
82+ expect (parcel.readInt16 (), - 32768 );
83+ });
84+
85+ testWidgets ('masks value to 16 bits' , (WidgetTester _) async {
86+ final Parcel parcel = Parcel ();
87+ // 0x10042 & 0xffff == 0x0042 == 66
88+ parcel.writeInt16 (0x10042 );
89+ expect (parcel.readInt16 (), 66 );
90+ });
91+ });
92+
93+ group ('writeInt64 / readInt64' , () {
94+ testWidgets ('round-trips large positive value' , (WidgetTester _) async {
95+ final Parcel parcel = Parcel ();
96+ const int value = 9007199254740992 ; // 2^53
97+ parcel.writeInt64 (value);
98+ expect (parcel.readInt64 (), value);
99+ });
100+
101+ testWidgets ('round-trips maximum value' , (WidgetTester _) async {
102+ final Parcel parcel = Parcel ();
103+ const int value = 9223372036854775807 ; // int64 max
104+ parcel.writeInt64 (value);
105+ expect (parcel.readInt64 (), value);
106+ });
107+
108+ testWidgets ('round-trips minimum value' , (WidgetTester _) async {
109+ final Parcel parcel = Parcel ();
110+ const int value = - 9223372036854775808 ; // int64 min
111+ parcel.writeInt64 (value);
112+ expect (parcel.readInt64 (), value);
113+ });
114+ });
115+
116+ group ('writeByte / readByte' , () {
117+ testWidgets ('round-trips a value' , (WidgetTester _) async {
118+ final Parcel parcel = Parcel ();
119+ parcel.writeByte (0xab );
120+ expect (parcel.readByte (), 0xab );
121+ });
122+
123+ testWidgets ('round-trips maximum unsigned value' , (WidgetTester _) async {
124+ final Parcel parcel = Parcel ();
125+ parcel.writeByte (255 );
126+ expect (parcel.readByte (), 255 );
127+ });
128+
129+ testWidgets ('reads a negative input back as an unsigned byte' , (
130+ WidgetTester _,
131+ ) async {
132+ final Parcel parcel = Parcel ();
133+ // -1 is written as 0xff and must read back as the unsigned byte 255.
134+ parcel.writeByte (- 1 );
135+ expect (parcel.readByte (), 255 );
136+ });
137+
138+ testWidgets ('masks value to 8 bits' , (WidgetTester _) async {
139+ final Parcel parcel = Parcel ();
140+ // 0x142 & 0xff == 0x42 == 66
141+ parcel.writeByte (0x142 );
142+ expect (parcel.readByte (), 66 );
143+ });
144+ });
145+
146+ group ('writeArrayCount / readArrayCount' , () {
147+ testWidgets ('round-trips a count' , (WidgetTester _) async {
148+ final Parcel parcel = Parcel ();
149+ parcel.writeArrayCount (42 );
150+ expect (parcel.readArrayCount (), 42 );
151+ });
152+ });
153+
154+ group ('write / read (burst byte array)' , () {
155+ testWidgets ('round-trips byte array' , (WidgetTester _) async {
156+ final Parcel parcel = Parcel ();
157+ final Uint8List bytes = Uint8List .fromList (< int > [
158+ 0x00 ,
159+ 0x01 ,
160+ 0x7f ,
161+ 0x80 ,
162+ 0xff ,
163+ ]);
164+ parcel.write (bytes);
165+ final Uint8List result = parcel.read (bytes.length);
166+ expect (result, equals (bytes));
167+ });
168+ });
169+
170+ group ('Parcel.fromRaw' , () {
171+ testWidgets ('reconstructed parcel reads back original values' , (
172+ WidgetTester _,
173+ ) async {
174+ final Parcel original = Parcel ();
175+ original.writeInt32 (99 );
176+ original.writeString ('raw' );
177+ original.writeBool (true );
178+
179+ final Uint8List raw = original.asRaw ();
180+ final Parcel restored = Parcel .fromRaw (raw);
181+
182+ expect (restored.readInt32 (), 99 );
183+ expect (restored.readString (), 'raw' );
184+ expect (restored.readBool (), isTrue);
185+ });
186+ });
187+
188+ group ('writeBundle / readBundle' , () {
189+ testWidgets ('round-trips a Bundle with string entries' , (
190+ WidgetTester _,
191+ ) async {
192+ final Bundle bundle = Bundle ();
193+ bundle['key1' ] = 'value1' ;
194+ bundle['key2' ] = 'value2' ;
195+
196+ final Parcel parcel = Parcel ();
197+ parcel.writeBundle (bundle);
198+
199+ final Bundle restored = parcel.readBundle ();
200+ expect (restored['key1' ], 'value1' );
201+ expect (restored['key2' ], 'value2' );
202+ });
203+
204+ testWidgets ('round-trips an empty Bundle' , (WidgetTester _) async {
205+ final Parcel parcel = Parcel ();
206+ parcel.writeBundle (Bundle ());
207+ final Bundle restored = parcel.readBundle ();
208+ expect (restored.length, 0 );
209+ });
210+ });
211+
212+ group ('header' , () {
213+ testWidgets ('tag can be set and retrieved' , (WidgetTester _) async {
214+ final Parcel parcel = Parcel ();
215+ final ParcelHeader header = parcel.header;
216+ header.tag = '1.2.3' ;
217+ expect (parcel.header.tag, '1.2.3' );
218+ });
219+
220+ testWidgets ('sequenceNumber can be set and retrieved' , (
221+ WidgetTester _,
222+ ) async {
223+ final Parcel parcel = Parcel ();
224+ final ParcelHeader header = parcel.header;
225+ header.sequenceNumber = 7 ;
226+ expect (parcel.header.sequenceNumber, 7 );
227+ });
228+
229+ testWidgets ('tag defaults to empty string' , (WidgetTester _) async {
230+ final Parcel parcel = Parcel ();
231+ expect (parcel.header.tag, isEmpty);
232+ });
233+ });
234+
235+ group ('Parcelable' , () {
236+ testWidgets ('custom Parcelable serializes and deserializes correctly' , (
237+ WidgetTester _,
238+ ) async {
239+ final Parcel parcel = Parcel ();
240+ final _Point original = _Point (x: 10 , y: 20 );
241+ original.serialize (parcel);
242+
243+ final _Point restored = _Point ();
244+ restored.deserialize (parcel);
245+ expect (restored.x, 10 );
246+ expect (restored.y, 20 );
247+ });
248+ });
249+ });
250+
251+ // ---------------------------------------------------------------------------
252+ // PortType enum
253+ // ---------------------------------------------------------------------------
254+
255+ group ('PortType' , () {
256+ testWidgets ('has exactly the main and callback values' , (
257+ WidgetTester _,
258+ ) async {
259+ expect (
260+ PortType .values,
261+ unorderedEquals (< PortType > [PortType .main, PortType .callback]),
262+ );
263+ });
264+ });
265+
266+ // ---------------------------------------------------------------------------
267+ // ProxyBase — single-app observable behaviour
268+ // ---------------------------------------------------------------------------
269+
270+ group ('ProxyBase' , () {
271+ testWidgets ('isConnected is false before connecting' , (
272+ WidgetTester _,
273+ ) async {
274+ final _TestProxy proxy = _TestProxy ();
275+ expect (proxy.isConnected, isFalse);
276+ });
277+
278+ testWidgets ('appid and portName are set from constructor' , (
279+ WidgetTester _,
280+ ) async {
281+ final _TestProxy proxy = _TestProxy ();
282+ expect (proxy.appid, 'org.tizen.nonexistent_app_for_rpc_test' );
283+ expect (proxy.portName, 'TestPort' );
284+ });
285+ });
26286}
0 commit comments