Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How does one test optional features in Rust?

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?

like image 338
dfhoughton Avatar asked Oct 15 '22 09:10

dfhoughton


1 Answers

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!.

like image 67
dfhoughton Avatar answered Nov 15 '22 08:11

dfhoughton