blob: 0fe273ea18dd1237efc937e6c43a4590883b6221 [file] [log] [blame]
#![cfg(no)]
use cargo_deny::{func_name, test_utils::*};
/// Ensures that you can ban features in your own workspace. `simple` is brought
/// in via the default features
#[test]
fn bans_workspace_features() {
let diags = gather_bans(
func_name!(),
KrateGather {
name: "features-galore",
targets: &["x86_64-unknown-linux-gnu"],
..Default::default()
},
Config::new("features = [{ name = 'features-galore', deny = ['simple'] }]"),
);
insta::assert_json_snapshot!(diags);
}
/// Ensures non-workspace features are banned
#[test]
fn bans_external_features() {
let diags = gather_bans(
func_name!(),
KrateGather {
name: "features-galore",
features: &["zlib", "ssh"],
no_default_features: true,
targets: &["x86_64-unknown-linux-gnu"],
..Default::default()
},
Config::new("features = [{ name = 'libssh2-sys', deny = ['zlib-ng-compat'] }]"),
);
insta::assert_json_snapshot!(diags);
}
/// Ensures non-workspace features can be allowed
#[test]
fn allows_external_features() {
let diags = gather_bans(
func_name!(),
KrateGather {
name: "features-galore",
features: &["zlib", "ssh"],
no_default_features: true,
targets: &["x86_64-unknown-linux-gnu"],
..Default::default()
},
Config::new("features = [{ name = 'libssh2-sys', allow = ['zlib-ng-compat'] }]"),
);
insta::assert_json_snapshot!(diags);
}
/// Ensures workspace features fail if not all are allowed
#[test]
fn fails_if_not_all_features_allowed() {
let diags = gather_bans(
func_name!(),
KrateGather {
name: "features-galore",
features: &["zlib", "ssh"],
no_default_features: true,
targets: &["x86_64-unknown-linux-gnu"],
..Default::default()
},
"features = [{ name = 'features-galore', allow = ['ssh'] }]",
);
insta::assert_json_snapshot!(diags);
}
/// Ensures features banned in a crate with multiple versions are all found
#[test]
fn bans_features_from_multiple_versions() {
let diags = gather_bans(
func_name!(),
KrateGather {
name: "features-galore",
targets: &["x86_64-pc-windows-msvc"],
..Default::default()
},
"multiple-versions = 'allow'\nfeatures = [{ name = 'windows-sys', deny = ['Win32_System_LibraryLoader'] }]",
);
insta::assert_json_snapshot!(diags);
}
/// Ensures exact works
#[test]
fn exact_features() {
let diags = gather_bans(
func_name!(),
KrateGather {
name: "features-galore",
targets: &["x86_64-pc-windows-msvc"],
..Default::default()
},
"multiple-versions = 'allow'\nfeatures = [{ name = 'windows-sys', exact = true, allow = ['Win32_System_LibraryLoader'] }]",
);
insta::assert_json_snapshot!(diags);
}
/// Ensures weak dependencies are properly pruned from the graph
/// See <https://github.com/EmbarkStudios/krates/issues/41> for more
#[test]
fn weak_dependencies_pruned() {
let diags = gather_bans(
func_name!(),
KrateGather {
name: "features-galore",
features: &["zlib"],
no_default_features: true,
targets: &["x86_64-unknown-linux-gnu"],
..Default::default()
},
"deny = [{ name = 'libssh2-sys' }]",
);
assert!(diags.is_empty());
}
#[test]
fn workspace_default_features_denies() {
let diags = gather_bans(
func_name!(),
KrateGather {
name: "features-galore",
no_default_features: false,
targets: &["x86_64-unknown-linux-gnu"],
..Default::default()
},
"workspace-default-features = 'deny'",
);
insta::assert_json_snapshot!(diags);
}
#[test]
fn workspace_default_features_warns_and_denies() {
let diags = gather_bans(
func_name!(),
KrateGather {
name: "features-galore",
no_default_features: false,
targets: &["x86_64-unknown-linux-gnu"],
..Default::default()
},
"workspace-default-features = 'warn'\nfeatures = [{ name = 'features-galore', deny = ['default'] }]",
);
insta::assert_json_snapshot!(diags);
}
/// Ensures that a workspace default ban can be overridden by a crate specific allow = 'default'
#[test]
fn workspace_default_features_allow_override() {
let diags = gather_bans(
func_name!(),
KrateGather {
name: "features-galore",
no_default_features: false,
targets: &["x86_64-unknown-linux-gnu"],
..Default::default()
},
"workspace-default-features = 'deny'\nfeatures = [{ name = 'features-galore', allow = ['default'] }]",
);
insta::assert_json_snapshot!(diags);
}
#[test]
fn external_default_features_denies() {
let diags = gather_bans(
func_name!(),
KrateGather {
name: "features-galore",
no_default_features: true,
targets: &["x86_64-unknown-linux-gnu"],
..Default::default()
},
"external-default-features = 'deny'",
);
insta::assert_json_snapshot!(diags);
}
#[test]
fn external_default_features_warns_and_denies() {
let diags = gather_bans(
func_name!(),
KrateGather {
name: "features-galore",
no_default_features: true,
targets: &["x86_64-unknown-linux-gnu"],
..Default::default()
},
"external-default-features = 'warn'\nfeatures = [{ name = 'bitflags', deny = ['default'] }]",
);
insta::assert_json_snapshot!(diags);
}
/// Ensures that a workspace default ban can be overridden by a crate specific allow = 'default'
#[test]
fn external_default_features_allow_override() {
let diags = gather_bans(
func_name!(),
KrateGather {
name: "features-galore",
no_default_features: false,
targets: &["x86_64-unknown-linux-gnu"],
..Default::default()
},
"external-default-features = 'deny'\nfeatures = [{ name = 'bitflags', allow = ['default'] }]",
);
insta::assert_json_snapshot!(diags);
}