Local development of uniffi-bindgen-react-native
Pre-installation
This guide is in addition to the Pre-installation guide.
git clone https://github.com/jhugman/uniffi-bindgen-react-native
cd uniffi-bindgen-react-native
Now you need to run the bootstrap xtask:
cargo xtask bootstrap
The first time you run this will take some time: it clones the main branch of facebook/hermes
and builds it.
By default, it checks out the main
branch, but this can be customized:
cargo xtask bootstrap hermes --branch rn/0.76-stable
It also builds the cpp/test-harness
which is the Javascript runtime which can accept .so
files written in C++ and Rust.
You can force a re-setup with:
cargo xtask bootstrap --force
Tests to see if a bootstrap step can be skipped is fairly rudimentary: mostly just the existence of a directory, so switching to a new branch of hermes
would be done:
cargo xtask clean
cargo xtask bootstrap hermes --branch rn/0.76-stable
cargo xtask bootstrap
Running tests
Most of the testing for uniffi-bindgen-react-native
is done in the fixtures
directory by testing the generated Typescript and C++ against a Rust crate.
These can be run with:
./scripts/run-tests.sh
One or more fixtures may be run using the -f
flag.
./scripts/run-tests.sh -f chronological -f arithmetic
This, in turn, uses the run
xtask.
The run-tests.sh
script also runs the Typescript-only tests in the typescript/tests
directory.
These have been useful to prototype generated Typescript before moving them into templates.
Running rust only unit tests
Rust unit tests are encouraged! They can be run as usual with:
cargo test
Formatting and linting
Pre-commit, you should ensure that the code is formatted.
The fmt
xtask will run cargo fmt
, cargo clippy
on the Rust, prettier
on Typescript and clang-tidy
on C++ files.
cargo xtask fmt
Running with the --check
does not change the files, just finishes abnormally if any of the formatters find something it would like changed.
cargo xtask fmt --check