trash_parallelism 0.1.102

Azzybana Raccoon's comprehensive parallelism library.
Documentation
//! Tests for the data module
use trash_parallelism::data::*;

#[test]
pub fn test_parse_key_value_basic() {
    let content = "key1=value1\nkey2=value2\nkey3=value3";
    let map = parse_key_value(content);

    assert_eq!(map.get("key1"), Some(&"value1".to_string()));
    assert_eq!(map.get("key2"), Some(&"value2".to_string()));
    assert_eq!(map.get("key3"), Some(&"value3".to_string()));
    assert_eq!(map.len(), 3);
}

#[test]
pub fn test_parse_key_value_with_whitespace() {
    let content = "  key1  =  value1  \n  key2=value2\nkey3=  value3  ";
    let map = parse_key_value(content);

    assert_eq!(map.get("key1"), Some(&"value1".to_string()));
    assert_eq!(map.get("key2"), Some(&"value2".to_string()));
    assert_eq!(map.get("key3"), Some(&"value3".to_string()));
    assert_eq!(map.len(), 3);
}

#[test]
pub fn test_parse_key_value_empty_lines() {
    let content = "key1=value1\n\nkey2=value2\n\n\nkey3=value3\n";
    let map = parse_key_value(content);

    assert_eq!(map.get("key1"), Some(&"value1".to_string()));
    assert_eq!(map.get("key2"), Some(&"value2".to_string()));
    assert_eq!(map.get("key3"), Some(&"value3".to_string()));
    assert_eq!(map.len(), 3);
}

#[test]
pub fn test_parse_key_value_no_equals() {
    let content = "key1=value1\ninvalid line\nkey2=value2";
    let map = parse_key_value(content);

    assert_eq!(map.get("key1"), Some(&"value1".to_string()));
    assert_eq!(map.get("key2"), Some(&"value2".to_string()));
    assert_eq!(map.len(), 2);
}

#[test]
pub fn test_parse_key_value_multiple_equals() {
    let content = "key1=value=with=equals\nkey2=value2";
    let map = parse_key_value(content);

    assert_eq!(map.get("key1"), Some(&"value=with=equals".to_string()));
    assert_eq!(map.get("key2"), Some(&"value2".to_string()));
    assert_eq!(map.len(), 2);
}

#[test]
pub fn test_parse_key_value_empty_values() {
    let content = "key1=\nkey2=value2\nkey3=";
    let map = parse_key_value(content);

    assert_eq!(map.get("key1"), Some(&String::new()));
    assert_eq!(map.get("key2"), Some(&"value2".to_string()));
    assert_eq!(map.get("key3"), Some(&String::new()));
    assert_eq!(map.len(), 3);
}

#[test]
pub fn test_parse_key_value_config_format() {
    let content = r"
app.name=MyApp
app.version=1.0.0
database.host=localhost
database.port=5432
features.logging=true
features.metrics=false
";
    let map = parse_key_value(content);

    assert_eq!(map.get("app.name"), Some(&"MyApp".to_string()));
    assert_eq!(map.get("app.version"), Some(&"1.0.0".to_string()));
    assert_eq!(map.get("database.host"), Some(&"localhost".to_string()));
    assert_eq!(map.get("database.port"), Some(&"5432".to_string()));
    assert_eq!(map.get("features.logging"), Some(&"true".to_string()));
    assert_eq!(map.get("features.metrics"), Some(&"false".to_string()));
    assert_eq!(map.len(), 6);
}

#[test]
pub fn test_parse_key_value_env_format() {
    let content = "
HOME=/home/user
PATH=/usr/bin:/bin
USER=testuser
SHELL=/bin/bash
";
    let map = parse_key_value(content);

    assert_eq!(map.get("HOME"), Some(&"/home/user".to_string()));
    assert_eq!(map.get("PATH"), Some(&"/usr/bin:/bin".to_string()));
    assert_eq!(map.get("USER"), Some(&"testuser".to_string()));
    assert_eq!(map.get("SHELL"), Some(&"/bin/bash".to_string()));
    assert_eq!(map.len(), 4);
}

#[test]
pub fn test_parse_key_value_docker_format() {
    let content = "
POSTGRES_DB=myapp
POSTGRES_USER=admin
POSTGRES_PASSWORD=secret123
DATABASE_URL=postgresql://admin:secret123@localhost:5432/myapp
";
    let map = parse_key_value(content);

    assert_eq!(map.get("POSTGRES_DB"), Some(&"myapp".to_string()));
    assert_eq!(map.get("POSTGRES_USER"), Some(&"admin".to_string()));
    assert_eq!(map.get("POSTGRES_PASSWORD"), Some(&"secret123".to_string()));
    assert_eq!(
        map.get("DATABASE_URL"),
        Some(&"postgresql://admin:secret123@localhost:5432/myapp".to_string())
    );
    assert_eq!(map.len(), 4);
}

#[test]
pub fn test_parse_key_value_empty_string() {
    let content = "";
    let map = parse_key_value(content);
    assert!(map.is_empty());
}

#[test]
pub fn test_parse_key_value_only_newlines() {
    let content = "\n\n\n";
    let map = parse_key_value(content);
    assert!(map.is_empty());
}

#[test]
pub fn test_parse_key_value_single_line() {
    let content = "single=value";
    let map = parse_key_value(content);

    assert_eq!(map.get("single"), Some(&"value".to_string()));
    assert_eq!(map.len(), 1);
}

#[test]
pub fn test_parse_key_value_windows_line_endings() {
    let content = "key1=value1\r\nkey2=value2\r\nkey3=value3";
    let map = parse_key_value(content);

    assert_eq!(map.get("key1"), Some(&"value1".to_string()));
    assert_eq!(map.get("key2"), Some(&"value2".to_string()));
    assert_eq!(map.get("key3"), Some(&"value3".to_string()));
    assert_eq!(map.len(), 3);
}

#[test]
pub fn test_parse_key_value_duplicate_keys() {
    let content = "key=first\nkey=second\nkey=third";
    let map = parse_key_value(content);

    // Last value should win
    assert_eq!(map.get("key"), Some(&"third".to_string()));
    assert_eq!(map.len(), 1);
}

#[test]
pub fn test_parse_key_value_special_characters() {
    let content = "key1=value with spaces\nkey2=value-with-dashes\nkey3=value_with_underscores\nkey4=value.with.dots";
    let map = parse_key_value(content);

    assert_eq!(map.get("key1"), Some(&"value with spaces".to_string()));
    assert_eq!(map.get("key2"), Some(&"value-with-dashes".to_string()));
    assert_eq!(map.get("key3"), Some(&"value_with_underscores".to_string()));
    assert_eq!(map.get("key4"), Some(&"value.with.dots".to_string()));
    assert_eq!(map.len(), 4);
}

#[test]
pub fn test_data() {
    test_parse_key_value_basic();
    test_parse_key_value_with_whitespace();
    test_parse_key_value_empty_lines();
    test_parse_key_value_no_equals();
    test_parse_key_value_multiple_equals();
    test_parse_key_value_empty_values();
    test_parse_key_value_config_format();
    test_parse_key_value_env_format();
    test_parse_key_value_docker_format();
    test_parse_key_value_empty_string();
    test_parse_key_value_only_newlines();
    test_parse_key_value_single_line();
    test_parse_key_value_windows_line_endings();
    test_parse_key_value_duplicate_keys();
    test_parse_key_value_special_characters();
}