@@ -15,34 +15,34 @@ class OptionTests: XCTestCase {
15
15
func testSwiftCallRustOptionPrimitive( ) throws {
16
16
XCTAssertEqual ( rust_reflect_option_u8 ( 70 ) , 70 )
17
17
XCTAssertEqual ( rust_reflect_option_u8 ( nil ) , nil )
18
-
18
+
19
19
XCTAssertEqual ( rust_reflect_option_i8 ( 70 ) , 70 )
20
20
XCTAssertEqual ( rust_reflect_option_i8 ( nil ) , nil )
21
-
21
+
22
22
XCTAssertEqual ( rust_reflect_option_u16 ( 70 ) , 70 )
23
23
XCTAssertEqual ( rust_reflect_option_u16 ( nil ) , nil )
24
-
24
+
25
25
XCTAssertEqual ( rust_reflect_option_i16 ( 70 ) , 70 )
26
26
XCTAssertEqual ( rust_reflect_option_i16 ( nil ) , nil )
27
-
27
+
28
28
XCTAssertEqual ( rust_reflect_option_u32 ( 70 ) , 70 )
29
29
XCTAssertEqual ( rust_reflect_option_u32 ( nil ) , nil )
30
-
30
+
31
31
XCTAssertEqual ( rust_reflect_option_i32 ( 70 ) , 70 )
32
32
XCTAssertEqual ( rust_reflect_option_i32 ( nil ) , nil )
33
-
33
+
34
34
XCTAssertEqual ( rust_reflect_option_u64 ( 70 ) , 70 )
35
35
XCTAssertEqual ( rust_reflect_option_u64 ( nil ) , nil )
36
-
36
+
37
37
XCTAssertEqual ( rust_reflect_option_i64 ( 70 ) , 70 )
38
38
XCTAssertEqual ( rust_reflect_option_i64 ( nil ) , nil )
39
-
39
+
40
40
XCTAssertEqual ( rust_reflect_option_f32 ( 70.0 ) , 70.0 )
41
41
XCTAssertEqual ( rust_reflect_option_f32 ( nil ) , nil )
42
-
42
+
43
43
XCTAssertEqual ( rust_reflect_option_f64 ( 70.0 ) , 70.0 )
44
44
XCTAssertEqual ( rust_reflect_option_f64 ( nil ) , nil )
45
-
45
+
46
46
XCTAssertEqual ( rust_reflect_option_bool ( true ) , true )
47
47
XCTAssertEqual ( rust_reflect_option_bool ( false ) , false )
48
48
XCTAssertEqual ( rust_reflect_option_bool ( nil ) , nil )
@@ -52,30 +52,30 @@ class OptionTests: XCTestCase {
52
52
func testRustCallSwiftOptionPrimitive( ) throws {
53
53
test_rust_calls_swift_option_primitive ( )
54
54
}
55
-
55
+
56
56
/// Verify that Swift can call a Rust function that accepts and returns an Option<T>
57
57
/// where T is a String.
58
58
func testSwiftCallRustReturnOptionString( ) throws {
59
59
let string = rust_reflect_option_string ( " hello world " )
60
60
XCTAssertEqual ( string!. toString ( ) , " hello world " )
61
-
61
+
62
62
let none : String ? = nil
63
63
XCTAssertNil ( rust_reflect_option_string ( none) )
64
64
}
65
-
65
+
66
66
/// We use an `Option<&'static str>` that we create on the Rust side so that
67
67
/// we don't run into any lifetime issues.
68
68
func testSwiftCallRustReturnOptionStr( ) throws {
69
69
let str = rust_create_option_static_str ( )
70
70
XCTAssertEqual ( str!. toString ( ) , " hello " )
71
-
71
+
72
72
let reflected = rust_reflect_option_str ( str)
73
73
XCTAssertEqual ( reflected!. toString ( ) , " hello " )
74
-
74
+
75
75
let none : RustStr ? = nil
76
76
XCTAssertNil ( rust_reflect_option_str ( none) )
77
77
}
78
-
78
+
79
79
func testSwiftCallRustWithOptionVecOfPrimitiveType( ) throws {
80
80
let vec = RustVec < UInt16 > ( )
81
81
vec. push ( value: 123 )
@@ -89,15 +89,24 @@ class OptionTests: XCTestCase {
89
89
90
90
XCTAssertNil ( rust_reflect_option_vector_rust_type ( nil ) )
91
91
}
92
-
92
+
93
93
func testSwiftCallRustWithOptionOpaqueRustType( ) throws {
94
94
let val = OptTestOpaqueRustType ( 123 )
95
95
let reflect = rust_reflect_option_opaque_rust_type ( val)
96
96
XCTAssertEqual ( reflect!. field ( ) , 123 )
97
-
97
+
98
98
XCTAssertNil ( rust_reflect_option_opaque_rust_type ( nil ) )
99
99
}
100
100
101
+ /// Verify that we can bridge options of opaque Swift types.
102
+ func testSwiftCallRustWithOptionOpaqueSwiftType( ) throws {
103
+ let val = OptTestOpaqueSwiftType ( val: 727 )
104
+ let reflect = rust_reflect_option_opaque_swift_type ( val)
105
+ XCTAssertEqual ( reflect!. val, 727 )
106
+
107
+ XCTAssertNil ( rust_reflect_option_opaque_swift_type ( nil ) )
108
+ }
109
+
101
110
/// Verify that we can pass and receive an `Option<&RustType>`.
102
111
///
103
112
/// We deinitialize the first reference and create a second to confirm that
@@ -110,39 +119,39 @@ class OptionTests: XCTestCase {
110
119
XCTAssertEqual ( reflect!. field ( ) , 123 )
111
120
XCTAssertNil ( rust_reflect_option_ref_opaque_rust_type ( nil ) )
112
121
reflect = nil
113
-
122
+
114
123
reflect = rust_reflect_option_ref_opaque_rust_type ( opt_ref)
115
124
XCTAssertEqual ( reflect!. field ( ) , 123 )
116
125
}
117
-
126
+
118
127
func testSwiftCallRustWithOptionOpaqueRustCopyType( ) throws {
119
128
let val = new_opaque_rust_copy_type ( 123 )
120
129
let _: OptTestOpaqueRustCopyType ? = rust_reflect_option_opaque_rust_copy_type ( val)
121
-
130
+
122
131
// TODO: Support methods on generic types
123
132
// XCTAssertEqual(reflect!.field(), 123)
124
133
XCTAssertNil ( rust_reflect_option_opaque_rust_copy_type ( nil ) )
125
134
}
126
-
135
+
127
136
func testSwiftCallRustWithOptionGenericOpaqueRustType( ) throws {
128
137
let val = new_generic_opaque_rust_type ( 123 )
129
138
let _: OptTestGenericOpaqueRustType < UInt8 > ? = rust_reflect_option_generic_opaque_rust_type ( val)
130
-
139
+
131
140
// TODO: Support methods on generic types
132
141
// XCTAssertEqual(reflect!.field(), 123)
133
142
XCTAssertNil ( rust_reflect_option_opaque_rust_type ( nil ) )
134
143
}
135
-
144
+
136
145
func testSwiftCallRustWithOptionGenericOpaqueRustCopyType( ) throws {
137
146
let val = new_generic_opaque_rust_copy_type ( 123 )
138
147
let _: OptTestGenericOpaqueRustCopyType ? = rust_reflect_option_generic_opaque_rust_copy_type ( val)
139
-
148
+
140
149
// TODO: Support methods on generic types
141
150
// XCTAssertEqual(reflect!.field(), 123)
142
151
XCTAssertNil ( rust_reflect_option_generic_opaque_rust_copy_type ( nil ) )
143
152
}
144
153
145
-
154
+
146
155
func testStructWithOptionFieldsSome( ) throws {
147
156
let val = StructWithOptionFields (
148
157
u8: 123 , i8: 123 , u16: 123 , i16: 123 ,
@@ -165,7 +174,7 @@ class OptionTests: XCTestCase {
165
174
XCTAssertEqual ( reflected. f64, 123.4 )
166
175
XCTAssertEqual ( reflected. boolean, true )
167
176
}
168
-
177
+
169
178
func testStructWithOptionFieldsNone( ) {
170
179
let val = StructWithOptionFields (
171
180
u8: nil , i8: nil , u16: nil , i16: nil ,
@@ -187,29 +196,28 @@ class OptionTests: XCTestCase {
187
196
XCTAssertEqual ( reflected. f64, nil )
188
197
XCTAssertEqual ( reflected. boolean, nil )
189
198
}
190
-
199
+
191
200
func testEnumWhereVariantsHaveNoData( ) {
192
201
let val = OptionEnumWithNoData . Variant2
193
202
let reflectedSome = rust_reflect_option_enum_with_no_data ( val)
194
203
let reflectedNone = rust_reflect_option_enum_with_no_data ( nil )
195
-
204
+
196
205
switch reflectedSome! {
197
206
case . Variant2:
198
207
break ;
199
208
default :
200
209
XCTFail ( )
201
210
}
202
-
211
+
203
212
XCTAssertNil ( reflectedNone)
204
213
}
205
-
214
+
206
215
func testOptionStruct( ) {
207
216
let val = OptionStruct ( field: 123 )
208
217
let reflectedSome = rust_reflect_option_struct_with_no_data ( val)
209
218
let reflectedNone = rust_reflect_option_struct_with_no_data ( nil )
210
-
219
+
211
220
XCTAssertEqual ( reflectedSome!. field, 123 )
212
221
XCTAssertNil ( reflectedNone)
213
222
}
214
223
}
215
-
0 commit comments