79 lines
3.4 KiB
Rust
79 lines
3.4 KiB
Rust
use std::{fs, path::Path};
|
|
|
|
const CRATE_DIR: &str = env!("CARGO_MANIFEST_DIR");
|
|
|
|
#[test]
|
|
fn desktop_packages_have_native_icons_and_cargo_commands() {
|
|
let assets = Path::new(CRATE_DIR).join("assets/app-icons");
|
|
let png = fs::read(assets.join("bds.png")).expect("Linux PNG icon");
|
|
let ico = fs::read(assets.join("bds.ico")).expect("Windows ICO icon");
|
|
let icns = fs::read(assets.join("bds.icns")).expect("macOS ICNS icon");
|
|
|
|
assert_eq!(&png[..8], b"\x89PNG\r\n\x1a\n");
|
|
assert_eq!(u32::from_be_bytes(png[16..20].try_into().unwrap()), 1024);
|
|
assert_eq!(u32::from_be_bytes(png[20..24].try_into().unwrap()), 1024);
|
|
assert_eq!(&ico[..4], &[0, 0, 1, 0]);
|
|
assert!(u16::from_le_bytes(ico[4..6].try_into().unwrap()) >= 6);
|
|
assert_eq!(&icns[..4], b"icns");
|
|
|
|
let manifest = fs::read_to_string(Path::new(CRATE_DIR).join("Cargo.toml")).unwrap();
|
|
for required in [
|
|
"[package.metadata.packager]",
|
|
"assets/app-icons/bds.png",
|
|
"assets/app-icons/bds.ico",
|
|
"assets/app-icons/bds.icns",
|
|
"identifier = \"de.rfc1437.ruds\"",
|
|
"deep-link-protocols = [{ schemes = [\"ruds\"] }]",
|
|
"minimum-system-version = \"26.0\"",
|
|
"../../target/release/bds-runtime/*",
|
|
"cargo run --quiet -p bds-package-runtime",
|
|
"cargo run --quiet -p bds-package-runtime -- sign-app-for-dmg",
|
|
"{ path = \"bds-mcp\" }",
|
|
] {
|
|
assert!(manifest.contains(required), "missing {required}");
|
|
}
|
|
assert!(!manifest.contains("signing-identity"));
|
|
|
|
let cargo_config = fs::read_to_string(Path::new(CRATE_DIR).join("../../.cargo/config.toml"))
|
|
.expect("Cargo packaging aliases");
|
|
for alias in ["bundle-macos", "bundle-windows", "bundle-linux"] {
|
|
assert!(cargo_config.contains(alias), "missing cargo {alias}");
|
|
}
|
|
assert!(cargo_config.contains("prefer-dynamic"));
|
|
assert!(cargo_config.contains("-mmacosx-version-min=26.0"));
|
|
assert!(cargo_config.contains("@executable_path/../Resources"));
|
|
assert!(cargo_config.contains("$ORIGIN/../lib/bds-ui"));
|
|
|
|
let main = fs::read_to_string(Path::new(CRATE_DIR).join("src/main.rs")).unwrap();
|
|
assert!(main.contains("assets/app-icons/bds.png"));
|
|
|
|
let build = fs::read_to_string(Path::new(CRATE_DIR).join("build.rs")).unwrap();
|
|
assert!(build.contains("set_icon(\"assets/app-icons/bds.ico\")"));
|
|
|
|
let workspace_manifest =
|
|
fs::read_to_string(Path::new(CRATE_DIR).join("../../Cargo.toml")).unwrap();
|
|
assert!(workspace_manifest.contains("strip = \"symbols\""));
|
|
assert!(workspace_manifest.contains("ort-download-binaries-rustls-tls"));
|
|
|
|
let core_manifest =
|
|
fs::read_to_string(Path::new(CRATE_DIR).join("../bds-core/Cargo.toml")).unwrap();
|
|
assert!(core_manifest.contains("crate-type = [\"dylib\"]"));
|
|
let server_manifest =
|
|
fs::read_to_string(Path::new(CRATE_DIR).join("../bds-server/Cargo.toml")).unwrap();
|
|
assert!(server_manifest.contains("crate-type = [\"dylib\"]"));
|
|
assert!(!manifest.contains("{ path = \"bds-server\" }"));
|
|
assert!(!manifest.contains("-p bds-server"));
|
|
assert!(
|
|
!Path::new(CRATE_DIR)
|
|
.join("../bds-server/src/main.rs")
|
|
.exists()
|
|
);
|
|
|
|
let packager =
|
|
fs::read_to_string(Path::new(CRATE_DIR).join("../bds-package-runtime/src/main.rs"))
|
|
.unwrap();
|
|
assert!(packager.contains("Command::new(\"codesign\")"));
|
|
assert!(packager.contains("CARGO_PACKAGER_FORMAT"));
|
|
assert!(!packager.contains("--options"));
|
|
}
|