featureflag 0.0.3

Runtime feature flagging for Rust
Documentation
#![allow(missing_docs)]

use featureflag::{Feature, evaluator::with_default};
use featureflag_test::TestEvaluator;

#[test]
fn test_is_enabled_macro() {
    let evaluator = TestEvaluator::new();
    evaluator.set_feature("enabled", true);
    evaluator.set_feature("disabled", false);

    with_default(evaluator, || {
        assert!(featureflag::is_enabled!("enabled", false));
        assert!(featureflag::is_enabled!("enabled", true));

        assert!(!featureflag::is_enabled!("disabled", false));
        assert!(!featureflag::is_enabled!("disabled", true));

        assert!(!featureflag::is_enabled!("unknown", false));
        assert!(featureflag::is_enabled!("unknown", true));
    });
}

#[test]
fn test_feature_macro() {
    let evaluator = TestEvaluator::new();
    evaluator.set_feature("enabled", true);
    evaluator.set_feature("disabled", false);

    with_default(evaluator, || {
        const ENABLED_TRUE: Feature = featureflag::feature!("enabled", true);
        const ENABLED_FALSE: Feature = featureflag::feature!("enabled", false);
        const DISABLED_TRUE: Feature = featureflag::feature!("disabled", true);
        const DISABLED_FALSE: Feature = featureflag::feature!("disabled", false);
        const UNKNOWN_TRUE: Feature = featureflag::feature!("unknown", true);
        const UNKNOWN_FALSE: Feature = featureflag::feature!("unknown", false);

        assert_eq!(ENABLED_TRUE.name(), "enabled");
        assert_eq!(ENABLED_FALSE.name(), "enabled");
        assert_eq!(DISABLED_TRUE.name(), "disabled");
        assert_eq!(DISABLED_FALSE.name(), "disabled");
        assert_eq!(UNKNOWN_TRUE.name(), "unknown");
        assert_eq!(UNKNOWN_FALSE.name(), "unknown");

        assert!(ENABLED_TRUE.is_enabled());
        assert!(ENABLED_FALSE.is_enabled());
        assert!(!DISABLED_TRUE.is_enabled());
        assert!(!DISABLED_FALSE.is_enabled());
        assert!(UNKNOWN_TRUE.is_enabled());
        assert!(!UNKNOWN_FALSE.is_enabled());
    });
}