I have a package I want to add an optional feature to. I've added an appropriate section to my Cargo.toml:
[features]
foo = []
I wrote an experimental test for the basic functionality of the cfg! macro:
#[test]
fn testing_with_foo() {
assert!(cfg!(foo));
}
It looks as though I can activate features during testing via either of the options --features or --all-features:
(master *=) $ cargo help test
cargo-test
Execute all unit and integration tests and build examples of a local package
USAGE:
cargo test [OPTIONS] [TESTNAME] [-- <args>...]
OPTIONS:
-q, --quiet Display one character per test instead of one line
...
--features <FEATURES>... Space-separated list of features to activate
--all-features Activate all available features
Neither cargo test --features foo testing_with_foo nor cargo test --all-features testing_with_foo works, though.
What is the proper way to do this?
The solution is what @Jmb proposed: assert!(cfg!(feature = "foo"));. What it says in the Cargo Book
This can be tested in code via
#[cfg(feature = "foo")].
allows one to confirm that conditional compilation works but doesn't provide a boolean value one can test against. If you want to branch based on the feature at runtime, you need cfg!.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With