1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
//! Interact with `cargo`

#[doc(inline)]
pub use snapbox::cmd::cargo_bin;

/// Prepare an example for testing
///
/// Unlike `cargo_bin!`, this does not inherit all of the current compiler settings.  It
/// will match the current target and profile but will not get feature flags.  Pass those arguments
/// to the compiler via `args`.
///
/// ## Example
///
/// ```rust,no_run
/// #[test]
/// fn cli_tests() {
///     trycmd_indygreg_fork::TestCases::new()
///         .register_bin("example-fixture", trycmd_indygreg_fork::cargo::compile_example("example-fixture", []))
///         .case("examples/cmd/*.trycmd");
/// }
/// ```
#[cfg(feature = "examples")]
pub fn compile_example<'a>(
    target_name: &str,
    args: impl IntoIterator<Item = &'a str>,
) -> crate::schema::Bin {
    snapbox::cmd::compile_example(target_name, args).into()
}

/// Prepare all examples for testing
///
/// Unlike `cargo_bin!`, this does not inherit all of the current compiler settings.  It
/// will match the current target and profile but will not get feature flags.  Pass those arguments
/// to the compiler via `args`.
///
/// ## Example
///
/// ```rust,no_run
/// #[test]
/// fn cli_tests() {
///     trycmd_indygreg_fork::TestCases::new()
///         .register_bins(trycmd_indygreg_fork::cargo::compile_examples([]).unwrap())
///         .case("examples/cmd/*.trycmd");
/// }
/// ```
#[cfg(feature = "examples")]
pub fn compile_examples<'a>(
    args: impl IntoIterator<Item = &'a str>,
) -> Result<impl Iterator<Item = (String, crate::schema::Bin)>, crate::Error> {
    snapbox::cmd::compile_examples(args).map(|i| i.map(|(name, path)| (name, path.into())))
}