livesplit-core 0.13.0

livesplit-core is a library that provides a lot of functionality for creating a speedrun timer.
Documentation
use super::{Component, Text, TextState};
use crate::{timing::formatter, util::tests_helper::create_run, Timer};

#[test]
fn resolves_variables() {
    let mut run = create_run(&["A"]);
    run.metadata_mut().custom_variable_mut("Goal Time").value = String::from("4:20:00");
    let timer = Timer::new(run).unwrap();

    let mut component = Component::new();
    component.settings_mut().text = Text::Variable(String::from("Goal Time"), true);

    let state = component.state(&timer);

    assert_eq!(
        state.text,
        TextState::Split(String::from("Goal Time"), String::from("4:20:00"))
    );

    component.settings_mut().text = Text::Variable(String::from("Goal Time"), false);

    let state = component.state(&timer);

    assert_eq!(state.text, TextState::Center(String::from("4:20:00")));
}

#[test]
fn uses_dash_for_non_existing_variables() {
    let run = create_run(&["A"]);
    let timer = Timer::new(run).unwrap();

    let mut component = Component::new();
    component.settings_mut().text = Text::Variable(String::from("Goal Time"), true);

    let state = component.state(&timer);

    assert_eq!(
        state.text,
        TextState::Split(String::from("Goal Time"), String::from(formatter::DASH))
    );
}

#[test]
fn uses_dash_for_empty_string_variable() {
    let mut run = create_run(&["A"]);
    run.metadata_mut().custom_variable_mut("Goal Time").value = String::new();
    let timer = Timer::new(run).unwrap();

    let mut component = Component::new();
    component.settings_mut().text = Text::Variable(String::from("Goal Time"), true);

    let state = component.state(&timer);

    assert_eq!(
        state.text,
        TextState::Split(String::from("Goal Time"), String::from(formatter::DASH))
    );
}

#[test]
fn uses_dash_for_whitespace_variable() {
    let mut run = create_run(&["A"]);
    run.metadata_mut().custom_variable_mut("Goal Time").value = String::from("    ");
    let timer = Timer::new(run).unwrap();

    let mut component = Component::new();
    component.settings_mut().text = Text::Variable(String::from("Goal Time"), true);

    let state = component.state(&timer);

    assert_eq!(
        state.text,
        TextState::Split(String::from("Goal Time"), String::from(formatter::DASH))
    );
}