use internal::dirs::target_directory;
use predicates::prelude::*;
use std::process::Command;
use testing::{examples::MANIFEST_PATH, CommandExt};

const SERDE_DEFAULT: &str = "bincode";

#[test]
fn link() {
    Command::new("cargo")
        .args([
            "build",
            "--manifest-path",
            &MANIFEST_PATH,
            "--features",
            &("test-fuzz/".to_owned() + test_fuzz::serde_format::as_feature()),
        ])
        .logged_assert()
        .success();

    let pred = predicate::str::contains(SERDE_DEFAULT);

    #[cfg(not(any(serde_default, feature = "serde_bincode")))]
    let pred = pred.not();

    // smoelius: https://stackoverflow.com/questions/7219845/difference-between-nm-and-objdump
    Command::new("nm")
        .args([target_directory(false)
            .join("debug/hello-world")
            .to_string_lossy()
            .to_string()])
        .logged_assert()
        .success()
        .stdout(pred);
}
