list-features 0.1.2

Extracts the list of enabled feature flags during compilation.
Documentation
use std::env::{set_var, remove_var};
use list_features::test_list_enabled_among as list_enabled_among;

fn make_features(keys: &[&str]) -> std::collections::HashSet<String> {
  keys.iter().map(|s| s.to_string()).collect()
}

#[test]
fn detects_enabled_features() {
  let all = make_features(&["foo-bar", "baz"]);

  set_var("CARGO_FEATURE_FOO_BAR", "1");
  set_var("CARGO_FEATURE_UNUSED", "1");

  let result = list_enabled_among(&all);

  assert_eq!(result.len(), 1);
  assert!(result.contains(&String::from("foo-bar")));

  remove_var("CARGO_FEATURE_FOO_BAR");
  remove_var("CARGO_FEATURE_UNUSED");
}

#[test]
fn detects_enabled_features_with_underscore() {
  let all = make_features(&["under_scored", "dashed-name", "under_scored_and-dashed", "disabled_feature"]);

  set_var("CARGO_FEATURE_UNDER_SCORED", "1");
  set_var("CARGO_FEATURE_DASHED_NAME", "1");
  set_var("CARGO_FEATURE_UNDER_SCORED_AND_DASHED", "1");
  set_var("CARGO_FEATURE_UNUSED", "1");

  let result = list_enabled_among(&all);

  assert_eq!(result.len(), 3);
  assert!(result.contains(&String::from("under_scored")));
  assert!(result.contains(&String::from("dashed-name")));
  assert!(result.contains(&String::from("under_scored_and-dashed")));

  remove_var("CARGO_FEATURE_UNDER_SCORED");
  remove_var("CARGO_FEATURE_DASHED_NAME");
  remove_var("CARGO_FEATURE_UNDER_SCORED_AND_DASHED");
  remove_var("CARGO_FEATURE_UNUSED");
}

#[test]
fn detects_enabled_features_with_caps() {
  let all = make_features(&["Not_a-Good_name"]);

  set_var("CARGO_FEATURE_NOT_A_GOOD_NAME", "1");

  let result = list_enabled_among(&all);

  assert_eq!(result.len(), 1);
  assert!(result.contains(&String::from("Not_a-Good_name")));

  remove_var("CARGO_FEATURE_NOT_A_GOOD_NAME");
}