rmcl 0.4.0

A fully featured Minecraft TUI launcher
use super::*;

#[test]
fn instance_paths_use_visible_directories() {
    let paths = InstancePaths::new("/instances/example");
    assert_eq!(
        paths.minecraft(),
        PathBuf::from("/instances/example/minecraft")
    );
    assert_eq!(
        paths.content_manifest(),
        PathBuf::from("/instances/example/rmcl/content/manifest.json")
    );
    assert_eq!(
        paths.local_config(),
        PathBuf::from("/instances/example/rmcl/content/config")
    );
}

#[test]
fn metadata_paths_separate_state_and_cache() {
    let paths = MetadataPaths::new("/meta");
    assert_eq!(paths.profiles(), PathBuf::from("/meta/state/profiles"));
    assert_eq!(
        paths.provider_icons("modrinth"),
        PathBuf::from("/meta/cache/providers/modrinth/icons")
    );
    assert_eq!(
        paths.versions(),
        PathBuf::from("/meta/cache/minecraft/versions")
    );
    assert_eq!(
        paths.migration_journal(),
        PathBuf::from("/meta/state/migration.json")
    );
}

#[test]
fn atomic_write_replaces_existing_file() {
    let temp = tempfile::tempdir().unwrap();
    let path = temp.path().join("state.json");
    std::fs::write(&path, b"old").unwrap();
    write_atomic(&path, b"new").unwrap();
    assert_eq!(std::fs::read(path).unwrap(), b"new");
}