vesper-player-cli 0.5.4

The vesper command-line tool for authoring, validating, and installing plugins.
Documentation
use std::fs;
use std::process::Command;

#[test]
fn packaged_cli_scaffolds_and_inspects_native_and_wasm_plugins() {
    let parent = tempfile::tempdir().expect("temporary scaffold parent");

    for (directory_name, transport, capability) in [
        ("native-plugin", "native", "post-download"),
        ("wasm-plugin", "wasm", "event-hook"),
    ] {
        let directory = parent.path().join(directory_name);
        let output = Command::new(env!("CARGO_BIN_EXE_vesper"))
            .args(["plugin", "new"])
            .arg(&directory)
            .args([
                "--plugin-id",
                &format!("dev.vesper.{directory_name}"),
                "--publisher",
                "dev.vesper",
                "--license",
                "Apache-2.0",
                "--transport",
                transport,
                "--capability",
                capability,
            ])
            .output()
            .expect("run packaged scaffold command");
        assert_eq!(
            output.status.code(),
            Some(0),
            "stderr: {}",
            String::from_utf8_lossy(&output.stderr)
        );
        assert!(output.stderr.is_empty());
        let cargo = fs::read_to_string(directory.join("Cargo.toml")).expect("scaffold Cargo.toml");
        assert!(!cargo.contains("path ="));
        let published_sdk = if transport == "native" {
            format!(
                "player-plugin = {{ package = \"vesper-player-plugin\", version = \"={}\" }}",
                env!("CARGO_PKG_VERSION")
            )
        } else {
            format!(
                "player-plugin-wasm = {{ package = \"vesper-player-plugin-wasm\", version = \"={}\" }}",
                env!("CARGO_PKG_VERSION")
            )
        };
        assert!(cargo.contains(&published_sdk), "Cargo.toml: {cargo}");

        let inspect = Command::new(env!("CARGO_BIN_EXE_vesper"))
            .args(["plugin", "inspect"])
            .arg(directory.join("vesper-plugin.toml"))
            .arg("--manifest-only")
            .output()
            .expect("inspect packaged scaffold manifest");
        assert_eq!(
            inspect.status.code(),
            Some(0),
            "stderr: {}",
            String::from_utf8_lossy(&inspect.stderr)
        );
        assert!(inspect.stderr.is_empty());

        if transport == "wasm" {
            assert_eq!(
                fs::read(directory.join("wit/plugin.wit")).expect("scaffold WIT"),
                player_plugin_wasm_host::VESPER_PLUGIN_WIT.as_bytes()
            );
        }
    }
}