bevy-convars 0.2.1

An implementation of convars (config or console variables) for configuring your Bevy application.
Documentation
use std::str::FromStr;

use toml_edit::DocumentMut;

use crate::{
    CVarError,
    tests::{self, TestBool, TestInteger},
};

#[test]
pub fn save_unmodified_world() -> Result<(), CVarError> {
    let app = tests::make_test_app();

    let mut save_ctx = crate::save::CVarSaveContext::blank();

    save_ctx.save_world(app.world())?;

    let result = save_ctx.return_document();

    assert_eq!(result.to_string(), "");

    Ok(())
}

#[test]
pub fn save_modified_world() -> Result<(), CVarError> {
    let expected = include_str!("expected_cfg_1.toml").to_owned().replace("\r\n", "\n");

    let mut app = tests::make_test_app();

    {
        let world = app.world_mut();

        **world.resource_mut::<TestBool>() = true;
        **world.resource_mut::<TestInteger>() = 42;
    }

    let mut save_ctx = crate::save::CVarSaveContext::blank();

    save_ctx.save_world(app.world())?;

    let result = save_ctx.return_document();

    assert_eq!(result.to_string(), expected);

    Ok(())
}

#[test]
pub fn save_over_existing_cfg() -> Result<(), CVarError> {
    const INITIAL: &str = include_str!("existing_cfg_1.toml");
    let expected = include_str!("expected_cfg_2.toml").to_owned().replace("\r\n", "\n");
    let mut app = tests::make_test_app();

    {
        let world = app.world_mut();

        **world.resource_mut::<TestBool>() = true;
        **world.resource_mut::<TestInteger>() = 42;
    }

    let document = DocumentMut::from_str(INITIAL)?;

    let mut save_ctx = crate::save::CVarSaveContext::from_document(document);

    save_ctx.save_world(app.world())?;

    let result = save_ctx.return_document();

    assert_eq!(result.to_string(), expected);

    Ok(())
}