Skip to content

Commit ee5f229

Browse files
Add MakeAsyncCallback utility function to TurboModuleTestFixture.h (#53284)
Summary: Pull Request resolved: #53284 Changelog: [Internal] Reviewed By: lenaic Differential Revision: D80280615 fbshipit-source-id: eca82072fdfa74e70e9c327f9a1379f0ddf9a8c4
1 parent a8bc74c commit ee5f229

2 files changed

Lines changed: 37 additions & 1 deletion

File tree

packages/react-native/ReactCommon/callinvoker/ReactCommon/tests/TestCallInvoker.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@ class TestCallInvoker : public CallInvoker {
3535
}
3636
}
3737

38+
size_t queueSize() {
39+
return queue_.size();
40+
}
41+
3842
private:
3943
std::list<CallFunc> queue_{};
4044
std::shared_ptr<facebook::jsi::Runtime> runtime_{};

packages/react-native/ReactCommon/react/nativemodule/core/tests/TurboModuleTestFixture.h

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,17 @@
1616
#include <optional>
1717

1818
namespace facebook::react {
19+
class TurboModule;
1920

2021
template <typename T, typename... Args>
2122
class TurboModuleTestFixture : public ::testing::Test {
23+
static_assert(
24+
std::is_base_of<TurboModule, T>::value,
25+
"T must be derived from TurboModule");
26+
2227
public:
2328
explicit TurboModuleTestFixture(Args... args)
24-
: runtime_(facebook::hermes::makeHermesRuntime()),
29+
: runtime_(hermes::makeHermesRuntime()),
2530
jsInvoker_(std::make_shared<TestCallInvoker>(runtime_)),
2631
module_(std::make_shared<T>(jsInvoker_, std::forward<Args>(args)...)) {}
2732

@@ -94,6 +99,33 @@ class TurboModuleTestFixture : public ::testing::Test {
9499
return message;
95100
}
96101

102+
template <typename TEvent>
103+
AsyncCallback<TEvent> makeAsyncCallback(
104+
std::function<void(TEvent)>&& callback) {
105+
auto func = jsi::Function::createFromHostFunction(
106+
*runtime_,
107+
jsi::PropNameID::forAscii(*runtime_, "callback"),
108+
1,
109+
[jsInvoker = jsInvoker_, callback = std::move(callback)](
110+
jsi::Runtime& rt,
111+
[[maybe_unused]] const jsi::Value& thisVal,
112+
const jsi::Value* args,
113+
size_t count) {
114+
if (count < 1) {
115+
throw jsi::JSINativeException("callback: Missing argument");
116+
}
117+
callback(
118+
Bridging<TEvent>::fromJs(rt, args[0].asObject(rt), jsInvoker));
119+
return jsi::Value::undefined();
120+
});
121+
return {*runtime_, std::move(func), jsInvoker_};
122+
}
123+
124+
void expectAndFlushQueue(size_t queueSize) {
125+
EXPECT_EQ(jsInvoker_->queueSize(), queueSize);
126+
jsInvoker_->flushQueue();
127+
}
128+
97129
protected:
98130
std::shared_ptr<jsi::Runtime> runtime_{};
99131
std::shared_ptr<TestCallInvoker> jsInvoker_{};

0 commit comments

Comments
 (0)