dnf-repofile 0.1.2

Pure Rust library for parsing, managing, validating, diffing, and rendering DNF/YUM .repo configuration files
Documentation
use dnf_repofile::variables::*;
use std::collections::HashMap;

#[test]
fn test_expand_simple() {
    let mut v = HashMap::new();
    v.insert("releasever".into(), "9".into());
    assert_eq!(
        expand_variables("https://x.com/$releasever/os/", &v).unwrap(),
        "https://x.com/9/os/"
    );
}

#[test]
fn test_expand_braced() {
    let mut v = HashMap::new();
    v.insert("basearch".into(), "x86_64".into());
    assert_eq!(expand_variables("${basearch}", &v).unwrap(), "x86_64");
}

#[test]
fn test_expand_default_set() {
    let mut v = HashMap::new();
    v.insert("releasever".into(), "9".into());
    assert_eq!(expand_variables("${releasever:-8}", &v).unwrap(), "9");
}

#[test]
fn test_expand_default_unset() {
    assert_eq!(
        expand_variables("${releasever:-8}", &HashMap::new()).unwrap(),
        "8"
    );
}

#[test]
fn test_expand_alt_set() {
    let mut v = HashMap::new();
    v.insert("releasever".into(), "9".into());
    assert_eq!(expand_variables("${releasever:+alt}", &v).unwrap(), "alt");
}

#[test]
fn test_expand_alt_unset() {
    assert_eq!(
        expand_variables("${releasever:+alt}", &HashMap::new()).unwrap(),
        ""
    );
}

#[test]
fn test_expand_missing_error() {
    assert!(expand_variables("$nonexistent", &HashMap::new()).is_err());
}

#[test]
fn test_detect_variables() {
    let vars = detect_variables("https://x.com/$releasever/${basearch}/$arch/");
    assert!(vars.contains(&"releasever".to_string()));
    assert!(vars.contains(&"basearch".to_string()));
    assert!(vars.contains(&"arch".to_string()));
}