@@ -299,4 +299,99 @@ TEST_F(BridgingTest, pointerTest) {
299
299
EXPECT_TRUE (bridging::toJs (rt, weak, invoker).isNull ());
300
300
}
301
301
302
+ TEST_F (BridgingTest, supportTest) {
303
+ // Ensure sure can convert some basic types, including primitives that can be
304
+ // trivially converted to JSI values.
305
+ EXPECT_TRUE ((bridging::supportsFromJs<bool >));
306
+ EXPECT_TRUE ((bridging::supportsFromJs<bool , bool >));
307
+ EXPECT_TRUE ((bridging::supportsFromJs<bool , jsi::Value &>));
308
+ EXPECT_TRUE ((bridging::supportsFromJs<int >));
309
+ EXPECT_TRUE ((bridging::supportsFromJs<int , int >));
310
+ EXPECT_TRUE ((bridging::supportsFromJs<int , jsi::Value &>));
311
+ EXPECT_TRUE ((bridging::supportsFromJs<double >));
312
+ EXPECT_TRUE ((bridging::supportsFromJs<double , double >));
313
+ EXPECT_TRUE ((bridging::supportsFromJs<double , jsi::Value &>));
314
+ EXPECT_TRUE ((bridging::supportsFromJs<std::string>));
315
+ EXPECT_TRUE ((bridging::supportsFromJs<std::string, jsi::String>));
316
+ EXPECT_TRUE ((bridging::supportsFromJs<std::string, jsi::String &>));
317
+ EXPECT_TRUE ((bridging::supportsFromJs<std::vector<int >, jsi::Array>));
318
+ EXPECT_TRUE ((bridging::supportsFromJs<std::vector<int >, jsi::Array &>));
319
+ EXPECT_TRUE (
320
+ (bridging::supportsFromJs<std::map<std::string, int >, jsi::Object>));
321
+ EXPECT_TRUE (
322
+ (bridging::supportsFromJs<std::map<std::string, int >, jsi::Object &>));
323
+
324
+ // Ensure incompatible conversions will fail.
325
+ EXPECT_FALSE ((bridging::supportsFromJs<bool , jsi::String>));
326
+ EXPECT_FALSE ((bridging::supportsFromJs<bool , jsi::String &>));
327
+ EXPECT_FALSE ((bridging::supportsFromJs<int , jsi::String>));
328
+ EXPECT_FALSE ((bridging::supportsFromJs<int , jsi::String &>));
329
+ EXPECT_FALSE ((bridging::supportsFromJs<double , jsi::String>));
330
+ EXPECT_FALSE ((bridging::supportsFromJs<double , jsi::String &>));
331
+ EXPECT_FALSE ((bridging::supportsFromJs<bool , jsi::Object>));
332
+ EXPECT_FALSE ((bridging::supportsFromJs<bool , jsi::Object &>));
333
+ EXPECT_FALSE ((bridging::supportsFromJs<int , jsi::Object>));
334
+ EXPECT_FALSE ((bridging::supportsFromJs<int , jsi::Object &>));
335
+ EXPECT_FALSE ((bridging::supportsFromJs<double , jsi::Object>));
336
+ EXPECT_FALSE ((bridging::supportsFromJs<double , jsi::Object &>));
337
+ EXPECT_FALSE ((bridging::supportsFromJs<std::string, jsi::Object>));
338
+ EXPECT_FALSE ((bridging::supportsFromJs<std::string, jsi::Object &>));
339
+ EXPECT_FALSE ((bridging::supportsFromJs<std::vector<int >, jsi::String>));
340
+ EXPECT_FALSE ((bridging::supportsFromJs<std::vector<int >, jsi::String &>));
341
+
342
+ // Ensure copying and up/down casting JSI values is also supported.
343
+ EXPECT_TRUE ((bridging::supportsFromJs<jsi::Value>));
344
+ EXPECT_TRUE ((bridging::supportsFromJs<jsi::Value, jsi::Value &>));
345
+ EXPECT_TRUE ((bridging::supportsFromJs<jsi::Value, jsi::Object>));
346
+ EXPECT_TRUE ((bridging::supportsFromJs<jsi::Value, jsi::Object &>));
347
+ EXPECT_TRUE ((bridging::supportsFromJs<jsi::String>));
348
+ EXPECT_TRUE ((bridging::supportsFromJs<jsi::String, jsi::String>));
349
+ EXPECT_TRUE ((bridging::supportsFromJs<jsi::String, jsi::String &>));
350
+ EXPECT_TRUE ((bridging::supportsFromJs<jsi::Object>));
351
+ EXPECT_TRUE ((bridging::supportsFromJs<jsi::Object, jsi::Object>));
352
+ EXPECT_TRUE ((bridging::supportsFromJs<jsi::Object, jsi::Object &>));
353
+ EXPECT_TRUE ((bridging::supportsFromJs<jsi::Object, jsi::Array>));
354
+ EXPECT_TRUE ((bridging::supportsFromJs<jsi::Object, jsi::Array &>));
355
+ EXPECT_TRUE ((bridging::supportsFromJs<jsi::Object, jsi::Function>));
356
+ EXPECT_TRUE ((bridging::supportsFromJs<jsi::Object, jsi::Function &>));
357
+ EXPECT_TRUE ((bridging::supportsFromJs<jsi::Array>));
358
+ EXPECT_TRUE ((bridging::supportsFromJs<jsi::Array, jsi::Array>));
359
+ EXPECT_TRUE ((bridging::supportsFromJs<jsi::Array, jsi::Array &>));
360
+ EXPECT_TRUE ((bridging::supportsFromJs<jsi::Array, jsi::Object>));
361
+ EXPECT_TRUE ((bridging::supportsFromJs<jsi::Array, jsi::Object &>));
362
+ EXPECT_TRUE ((bridging::supportsFromJs<jsi::Function>));
363
+ EXPECT_TRUE ((bridging::supportsFromJs<jsi::Function, jsi::Function>));
364
+ EXPECT_TRUE ((bridging::supportsFromJs<jsi::Function, jsi::Function &>));
365
+ EXPECT_TRUE ((bridging::supportsFromJs<jsi::Function, jsi::Object>));
366
+ EXPECT_TRUE ((bridging::supportsFromJs<jsi::Function, jsi::Object &>));
367
+
368
+ // Ensure incorrect casts will fail.
369
+ EXPECT_FALSE ((bridging::supportsFromJs<jsi::Array, jsi::Function>));
370
+ EXPECT_FALSE ((bridging::supportsFromJs<jsi::Array, jsi::Function &>));
371
+ EXPECT_FALSE ((bridging::supportsFromJs<jsi::Function, jsi::Array>));
372
+ EXPECT_FALSE ((bridging::supportsFromJs<jsi::Function, jsi::Array &>));
373
+
374
+ // Ensure we can convert some basic types to JSI values.
375
+ EXPECT_TRUE ((bridging::supportsToJs<bool >));
376
+ EXPECT_TRUE ((bridging::supportsToJs<int >));
377
+ EXPECT_TRUE ((bridging::supportsToJs<double >));
378
+ EXPECT_TRUE ((bridging::supportsToJs<std::string>));
379
+ EXPECT_TRUE ((bridging::supportsToJs<std::string, jsi::String>));
380
+ EXPECT_TRUE ((bridging::supportsToJs<std::vector<int >>));
381
+ EXPECT_TRUE ((bridging::supportsToJs<std::vector<int >, jsi::Array>));
382
+ EXPECT_TRUE ((bridging::supportsToJs<std::map<std::string, int >>));
383
+ EXPECT_TRUE (
384
+ (bridging::supportsToJs<std::map<std::string, int >, jsi::Object>));
385
+ EXPECT_TRUE ((bridging::supportsToJs<void (*)()>));
386
+ EXPECT_TRUE ((bridging::supportsToJs<void (*)(), jsi::Function>));
387
+
388
+ // Ensure invalid conversions to JSI values are not supported.
389
+ EXPECT_FALSE ((bridging::supportsToJs<void *>));
390
+ EXPECT_FALSE ((bridging::supportsToJs<bool , jsi::Object>));
391
+ EXPECT_FALSE ((bridging::supportsToJs<int , jsi::Object>));
392
+ EXPECT_FALSE ((bridging::supportsToJs<double , jsi::Object>));
393
+ EXPECT_FALSE ((bridging::supportsToJs<std::string, jsi::Object>));
394
+ EXPECT_FALSE ((bridging::supportsToJs<std::vector<int >, jsi::Function>));
395
+ }
396
+
302
397
} // namespace facebook::react
0 commit comments