hyprparser 0.1.6

A parser for Hyprland's configuration file.
Documentation
use std::fs;

use hyprparser::{parse_config, HyprlandConfig};

const TEST_CONFIG_FILENAME_0: &str = "tests/test_config_0.conf";
const TEST_CONFIG_FILENAME_1: &str = "tests/test_config_1.conf";
const TEST_CONFIG_FILENAME_2: &str = "tests/test_config_2.conf";

#[test]
fn config_parsing() {
    let _ = parse_config(&fs::read_to_string(TEST_CONFIG_FILENAME_0).unwrap());
}

#[test]
fn entry_adding() {
    let config_parsed = parse_config(&fs::read_to_string(TEST_CONFIG_FILENAME_0).unwrap());
    let mut config = HyprlandConfig::new();

    config.add_entry("envcursor", "no_hardware_cursors = true");
    config.add_entry("input", "accel_profile = flat");
    config.add_entry("general", "gaps_in = 5");
    config.add_entry("general", "gaps_out = 20");
    config.add_entry("general", "col.active_border = rgb(BDBDBD)");
    config.add_entry("general", "allow_tearing = false");
    config.add_entry("general", "layout = master");
    config.add_entry_headless("$terminal", "kitty");
    config.add_entry_headless("", "");
    config.add_entry_headless("$mainMod", "super");
    config.add_entry_headless("", "");
    config.add_entry_headless("bind", "$mainMod, RETURN, exec, $terminal");
    config.add_entry_headless("", "");
    config.add_entry_headless("bind", "$mainMod, 1, workspace, 1");
    config.add_entry_headless("", "");
    config.add_entry_headless("bind", "$mainMod SHIFT, 1, movetoworkspacesilent, 1");
    config.add_entry_headless("", "");
    config.add_entry_headless("bindm", "$mainMod, mouse:272, movewindow");
    config.add_entry_headless("bindm", "$mainMod, mouse:273, resizewindow");

    assert_eq!(config_parsed, config)
}

#[test]
fn color_parsing() {
    let config = HyprlandConfig::new();

    let expected = Some((0.11764706, 0.27450982, 0.19607843, 1.0));

    let rgba_parsed = config.parse_color("rgba(1E4632FF)");
    let rgb_parsed = config.parse_color("rgb(1E4632)");
    let argb_parsed = config.parse_color("0xFF1E4632");

    assert_eq!(expected, rgba_parsed);
    assert_eq!(expected, rgb_parsed);
    assert_eq!(expected, argb_parsed);
}

#[test]
fn file_sourcing() {
    let config_parsed = parse_config(&fs::read_to_string(TEST_CONFIG_FILENAME_1).unwrap());
    let mut config = HyprlandConfig::new();

    config.add_entry_headless(
        "source",
        &format!("{}/tests/test_config_2.conf", env!("CARGO_MANIFEST_DIR")),
    );
    config.add_sourced(vec![fs::read_to_string(TEST_CONFIG_FILENAME_2).unwrap()]);

    assert_eq!(config_parsed, config)
}