Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions packages/react-native/ReactCommon/jsi/jsi/decorator.h
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,9 @@ class RuntimeDecorator : public Base, private jsi::Instrumentation {
Instrumentation& instrumentation() override {
return *this;
}
Value createValueFromJsonUtf8(const uint8_t* json, size_t length) override {
return plain_.createValueFromJsonUtf8(json, length);
}

protected:
// plain is generally going to be a reference to an object managed
Expand Down
48 changes: 48 additions & 0 deletions packages/react-native/ReactCommon/jsi/jsi/test/testlib.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1981,6 +1981,54 @@ TEST_P(JSITest, CreateFromUtf16Test) {
EXPECT_EQ(cp, 55357); // 0xD83D in decimal
}

TEST_P(JSITest, CreateValueFromJsonUtf8Test) {
uint8_t jsonText[] = "{\"a\": 1}";

// This Runtime Decorator is used to test the default createValueFromJsonUtf8
// implementation for VMs that do not provide their own implementation
class DefaultRD : public RuntimeDecorator<Runtime, Runtime> {
public:
explicit DefaultRD(Runtime& rt) : RuntimeDecorator(rt) {}

Value createValueFromJsonUtf8(const uint8_t* json, size_t length) override {
return Runtime::createValueFromJsonUtf8(json, length);
}
};

DefaultRD defaultRd(rt);
Object obj =
Value::createFromJsonUtf8(defaultRd, jsonText, sizeof(jsonText) - 1)
.getObject(defaultRd);
EXPECT_EQ(obj.getProperty(defaultRd, "a").getNumber(), 1);

// A RuntimeDecorator must forward createValueFromJsonUtf8 to the runtime it
// decorates, like every other method.
class CountingRD : public RuntimeDecorator<Runtime, Runtime> {
public:
explicit CountingRD(Runtime& rt) : RuntimeDecorator(rt) {}

Value createValueFromJsonUtf8(const uint8_t* json, size_t length) override {
++count;
return plain().createValueFromJsonUtf8(json, length);
}

int count = 0;
};

// Overrides nothing, so it should forward everything to CountingRD.
class OuterRD : public RuntimeDecorator<Runtime, Runtime> {
public:
explicit OuterRD(Runtime& rt) : RuntimeDecorator(rt) {}
};

CountingRD counting(rt);
OuterRD outer(counting);
obj = outer.createValueFromJsonUtf8(jsonText, sizeof(jsonText) - 1)
.getObject(outer);
EXPECT_EQ(counting.count, 1);
EXPECT_EQ(obj.getProperty(outer, "a").getNumber(), 1);
}

TEST_P(JSITest, GetStringDataTest) {
// This Runtime Decorator is used to test the default getStringData
// implementation for VMs that do not provide their own implementation
Expand Down
1 change: 1 addition & 0 deletions scripts/cxx-api/api-snapshots/ReactAndroidDebugCxx.api
Original file line number Diff line number Diff line change
Expand Up @@ -6264,6 +6264,7 @@ class facebook::jsi::RuntimeDecorator : public facebook::jsi::Runtime {
public virtual facebook::jsi::ICast* castInterface(const facebook::jsi::UUID& interfaceUUID) override;
public virtual facebook::jsi::Instrumentation& instrumentation() override;
public virtual facebook::jsi::Object global() override;
public virtual facebook::jsi::Value createValueFromJsonUtf8(const uint8_t* json, size_t length) override;
public virtual facebook::jsi::Value evaluateJavaScript(const std::shared_ptr<const facebook::jsi::Buffer>& buffer, const std::string& sourceURL) override;
public virtual facebook::jsi::Value evaluatePreparedJavaScript(const std::shared_ptr<const facebook::jsi::PreparedJavaScript>& js) override;
public virtual std::shared_ptr<const facebook::jsi::PreparedJavaScript> prepareJavaScript(const std::shared_ptr<const facebook::jsi::Buffer>& buffer, std::string sourceURL) override;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10880,6 +10880,7 @@ class facebook::jsi::RuntimeDecorator : public facebook::jsi::Runtime {
public virtual facebook::jsi::ICast* castInterface(const facebook::jsi::UUID& interfaceUUID) override;
public virtual facebook::jsi::Instrumentation& instrumentation() override;
public virtual facebook::jsi::Object global() override;
public virtual facebook::jsi::Value createValueFromJsonUtf8(const uint8_t* json, size_t length) override;
public virtual facebook::jsi::Value evaluateJavaScript(const std::shared_ptr<const facebook::jsi::Buffer>& buffer, const std::string& sourceURL) override;
public virtual facebook::jsi::Value evaluatePreparedJavaScript(const std::shared_ptr<const facebook::jsi::PreparedJavaScript>& js) override;
public virtual std::shared_ptr<const facebook::jsi::PreparedJavaScript> prepareJavaScript(const std::shared_ptr<const facebook::jsi::Buffer>& buffer, std::string sourceURL) override;
Expand Down
1 change: 1 addition & 0 deletions scripts/cxx-api/api-snapshots/ReactAndroidNewarchCxx.api
Original file line number Diff line number Diff line change
Expand Up @@ -6113,6 +6113,7 @@ class facebook::jsi::RuntimeDecorator : public facebook::jsi::Runtime {
public virtual facebook::jsi::ICast* castInterface(const facebook::jsi::UUID& interfaceUUID) override;
public virtual facebook::jsi::Instrumentation& instrumentation() override;
public virtual facebook::jsi::Object global() override;
public virtual facebook::jsi::Value createValueFromJsonUtf8(const uint8_t* json, size_t length) override;
public virtual facebook::jsi::Value evaluateJavaScript(const std::shared_ptr<const facebook::jsi::Buffer>& buffer, const std::string& sourceURL) override;
public virtual facebook::jsi::Value evaluatePreparedJavaScript(const std::shared_ptr<const facebook::jsi::PreparedJavaScript>& js) override;
public virtual std::shared_ptr<const facebook::jsi::PreparedJavaScript> prepareJavaScript(const std::shared_ptr<const facebook::jsi::Buffer>& buffer, std::string sourceURL) override;
Expand Down
1 change: 1 addition & 0 deletions scripts/cxx-api/api-snapshots/ReactAndroidReleaseCxx.api
Original file line number Diff line number Diff line change
Expand Up @@ -6113,6 +6113,7 @@ class facebook::jsi::RuntimeDecorator : public facebook::jsi::Runtime {
public virtual facebook::jsi::ICast* castInterface(const facebook::jsi::UUID& interfaceUUID) override;
public virtual facebook::jsi::Instrumentation& instrumentation() override;
public virtual facebook::jsi::Object global() override;
public virtual facebook::jsi::Value createValueFromJsonUtf8(const uint8_t* json, size_t length) override;
public virtual facebook::jsi::Value evaluateJavaScript(const std::shared_ptr<const facebook::jsi::Buffer>& buffer, const std::string& sourceURL) override;
public virtual facebook::jsi::Value evaluatePreparedJavaScript(const std::shared_ptr<const facebook::jsi::PreparedJavaScript>& js) override;
public virtual std::shared_ptr<const facebook::jsi::PreparedJavaScript> prepareJavaScript(const std::shared_ptr<const facebook::jsi::Buffer>& buffer, std::string sourceURL) override;
Expand Down
1 change: 1 addition & 0 deletions scripts/cxx-api/api-snapshots/ReactAppleDebugCxx.api
Original file line number Diff line number Diff line change
Expand Up @@ -8108,6 +8108,7 @@ class facebook::jsi::RuntimeDecorator : public facebook::jsi::Runtime {
public virtual facebook::jsi::ICast* castInterface(const facebook::jsi::UUID& interfaceUUID) override;
public virtual facebook::jsi::Instrumentation& instrumentation() override;
public virtual facebook::jsi::Object global() override;
public virtual facebook::jsi::Value createValueFromJsonUtf8(const uint8_t* json, size_t length) override;
public virtual facebook::jsi::Value evaluateJavaScript(const std::shared_ptr<const facebook::jsi::Buffer>& buffer, const std::string& sourceURL) override;
public virtual facebook::jsi::Value evaluatePreparedJavaScript(const std::shared_ptr<const facebook::jsi::PreparedJavaScript>& js) override;
public virtual std::shared_ptr<const facebook::jsi::PreparedJavaScript> prepareJavaScript(const std::shared_ptr<const facebook::jsi::Buffer>& buffer, std::string sourceURL) override;
Expand Down
1 change: 1 addition & 0 deletions scripts/cxx-api/api-snapshots/ReactAppleFrameworksCxx.api
Original file line number Diff line number Diff line change
Expand Up @@ -12739,6 +12739,7 @@ class facebook::jsi::RuntimeDecorator : public facebook::jsi::Runtime {
public virtual facebook::jsi::ICast* castInterface(const facebook::jsi::UUID& interfaceUUID) override;
public virtual facebook::jsi::Instrumentation& instrumentation() override;
public virtual facebook::jsi::Object global() override;
public virtual facebook::jsi::Value createValueFromJsonUtf8(const uint8_t* json, size_t length) override;
public virtual facebook::jsi::Value evaluateJavaScript(const std::shared_ptr<const facebook::jsi::Buffer>& buffer, const std::string& sourceURL) override;
public virtual facebook::jsi::Value evaluatePreparedJavaScript(const std::shared_ptr<const facebook::jsi::PreparedJavaScript>& js) override;
public virtual std::shared_ptr<const facebook::jsi::PreparedJavaScript> prepareJavaScript(const std::shared_ptr<const facebook::jsi::Buffer>& buffer, std::string sourceURL) override;
Expand Down
1 change: 1 addition & 0 deletions scripts/cxx-api/api-snapshots/ReactAppleNewarchCxx.api
Original file line number Diff line number Diff line change
Expand Up @@ -7959,6 +7959,7 @@ class facebook::jsi::RuntimeDecorator : public facebook::jsi::Runtime {
public virtual facebook::jsi::ICast* castInterface(const facebook::jsi::UUID& interfaceUUID) override;
public virtual facebook::jsi::Instrumentation& instrumentation() override;
public virtual facebook::jsi::Object global() override;
public virtual facebook::jsi::Value createValueFromJsonUtf8(const uint8_t* json, size_t length) override;
public virtual facebook::jsi::Value evaluateJavaScript(const std::shared_ptr<const facebook::jsi::Buffer>& buffer, const std::string& sourceURL) override;
public virtual facebook::jsi::Value evaluatePreparedJavaScript(const std::shared_ptr<const facebook::jsi::PreparedJavaScript>& js) override;
public virtual std::shared_ptr<const facebook::jsi::PreparedJavaScript> prepareJavaScript(const std::shared_ptr<const facebook::jsi::Buffer>& buffer, std::string sourceURL) override;
Expand Down
1 change: 1 addition & 0 deletions scripts/cxx-api/api-snapshots/ReactAppleReleaseCxx.api
Original file line number Diff line number Diff line change
Expand Up @@ -7967,6 +7967,7 @@ class facebook::jsi::RuntimeDecorator : public facebook::jsi::Runtime {
public virtual facebook::jsi::ICast* castInterface(const facebook::jsi::UUID& interfaceUUID) override;
public virtual facebook::jsi::Instrumentation& instrumentation() override;
public virtual facebook::jsi::Object global() override;
public virtual facebook::jsi::Value createValueFromJsonUtf8(const uint8_t* json, size_t length) override;
public virtual facebook::jsi::Value evaluateJavaScript(const std::shared_ptr<const facebook::jsi::Buffer>& buffer, const std::string& sourceURL) override;
public virtual facebook::jsi::Value evaluatePreparedJavaScript(const std::shared_ptr<const facebook::jsi::PreparedJavaScript>& js) override;
public virtual std::shared_ptr<const facebook::jsi::PreparedJavaScript> prepareJavaScript(const std::shared_ptr<const facebook::jsi::Buffer>& buffer, std::string sourceURL) override;
Expand Down
1 change: 1 addition & 0 deletions scripts/cxx-api/api-snapshots/ReactCommonDebugCxx.api
Original file line number Diff line number Diff line change
Expand Up @@ -3511,6 +3511,7 @@ class facebook::jsi::RuntimeDecorator : public facebook::jsi::Runtime {
public virtual facebook::jsi::ICast* castInterface(const facebook::jsi::UUID& interfaceUUID) override;
public virtual facebook::jsi::Instrumentation& instrumentation() override;
public virtual facebook::jsi::Object global() override;
public virtual facebook::jsi::Value createValueFromJsonUtf8(const uint8_t* json, size_t length) override;
public virtual facebook::jsi::Value evaluateJavaScript(const std::shared_ptr<const facebook::jsi::Buffer>& buffer, const std::string& sourceURL) override;
public virtual facebook::jsi::Value evaluatePreparedJavaScript(const std::shared_ptr<const facebook::jsi::PreparedJavaScript>& js) override;
public virtual std::shared_ptr<const facebook::jsi::PreparedJavaScript> prepareJavaScript(const std::shared_ptr<const facebook::jsi::Buffer>& buffer, std::string sourceURL) override;
Expand Down
1 change: 1 addition & 0 deletions scripts/cxx-api/api-snapshots/ReactCommonFrameworksCxx.api
Original file line number Diff line number Diff line change
Expand Up @@ -8034,6 +8034,7 @@ class facebook::jsi::RuntimeDecorator : public facebook::jsi::Runtime {
public virtual facebook::jsi::ICast* castInterface(const facebook::jsi::UUID& interfaceUUID) override;
public virtual facebook::jsi::Instrumentation& instrumentation() override;
public virtual facebook::jsi::Object global() override;
public virtual facebook::jsi::Value createValueFromJsonUtf8(const uint8_t* json, size_t length) override;
public virtual facebook::jsi::Value evaluateJavaScript(const std::shared_ptr<const facebook::jsi::Buffer>& buffer, const std::string& sourceURL) override;
public virtual facebook::jsi::Value evaluatePreparedJavaScript(const std::shared_ptr<const facebook::jsi::PreparedJavaScript>& js) override;
public virtual std::shared_ptr<const facebook::jsi::PreparedJavaScript> prepareJavaScript(const std::shared_ptr<const facebook::jsi::Buffer>& buffer, std::string sourceURL) override;
Expand Down
1 change: 1 addition & 0 deletions scripts/cxx-api/api-snapshots/ReactCommonNewarchCxx.api
Original file line number Diff line number Diff line change
Expand Up @@ -3504,6 +3504,7 @@ class facebook::jsi::RuntimeDecorator : public facebook::jsi::Runtime {
public virtual facebook::jsi::ICast* castInterface(const facebook::jsi::UUID& interfaceUUID) override;
public virtual facebook::jsi::Instrumentation& instrumentation() override;
public virtual facebook::jsi::Object global() override;
public virtual facebook::jsi::Value createValueFromJsonUtf8(const uint8_t* json, size_t length) override;
public virtual facebook::jsi::Value evaluateJavaScript(const std::shared_ptr<const facebook::jsi::Buffer>& buffer, const std::string& sourceURL) override;
public virtual facebook::jsi::Value evaluatePreparedJavaScript(const std::shared_ptr<const facebook::jsi::PreparedJavaScript>& js) override;
public virtual std::shared_ptr<const facebook::jsi::PreparedJavaScript> prepareJavaScript(const std::shared_ptr<const facebook::jsi::Buffer>& buffer, std::string sourceURL) override;
Expand Down
1 change: 1 addition & 0 deletions scripts/cxx-api/api-snapshots/ReactCommonReleaseCxx.api
Original file line number Diff line number Diff line change
Expand Up @@ -3504,6 +3504,7 @@ class facebook::jsi::RuntimeDecorator : public facebook::jsi::Runtime {
public virtual facebook::jsi::ICast* castInterface(const facebook::jsi::UUID& interfaceUUID) override;
public virtual facebook::jsi::Instrumentation& instrumentation() override;
public virtual facebook::jsi::Object global() override;
public virtual facebook::jsi::Value createValueFromJsonUtf8(const uint8_t* json, size_t length) override;
public virtual facebook::jsi::Value evaluateJavaScript(const std::shared_ptr<const facebook::jsi::Buffer>& buffer, const std::string& sourceURL) override;
public virtual facebook::jsi::Value evaluatePreparedJavaScript(const std::shared_ptr<const facebook::jsi::PreparedJavaScript>& js) override;
public virtual std::shared_ptr<const facebook::jsi::PreparedJavaScript> prepareJavaScript(const std::shared_ptr<const facebook::jsi::Buffer>& buffer, std::string sourceURL) override;
Expand Down
Loading