df_ls_structure 0.3.0-rc.1

A language server for Dwarf Fortress RAW files
Documentation
use df_ls_core::{Choose, ReferenceTo};
use df_ls_lexical_analysis::test_utils::LexerTestBuilder;
use df_ls_structure::*;
use df_ls_syntax_analysis::test_utils::SyntaxTestBuilder;

#[test]
fn test_material() {
    SyntaxTestBuilder::from_lexer_test_builder(
        LexerTestBuilder::test_source(
            "material_template

            [OBJECT:MATERIAL_TEMPLATE]

            [MATERIAL_TEMPLATE:STONE_TEMPLATE]
                [STATE_COLOR:ALL_SOLID:GRAY]
                [STATE_NAME:ALL_SOLID:stone]
                [STATE_ADJ:ALL_SOLID:stone]
                [STATE_COLOR:LIQUID:ORANGE]
                [STATE_NAME:LIQUID:magma]
                [STATE_ADJ:LIQUID:magma]
                [DISPLAY_COLOR:7:0:0]
                [MATERIAL_VALUE:1]
                [SPEC_HEAT:450]
                [IGNITE_POINT:NONE]
                [MELTING_POINT:12768]

            [MATERIAL_TEMPLATE:WOOD_TEMPLATE]
                [STATE_COLOR:ALL_SOLID:BROWN]
            ",
        )
        .add_test_lexer_diagnostics_codes(vec![])
        .add_test_lexer_diagnostics_ranges(vec![]),
    )
    .add_test_structure(DFRaw {
        header: "material_template".to_owned(),
        token_structure: vec![ObjectToken {
            material_tokens: vec![
                MaterialToken {
                    reference: Some(ReferenceTo::new("STONE_TEMPLATE".to_owned())),
                    display_color: Some((7, 0, 0)),
                    state_color: vec![
                        (
                            Choose::Choice2(AllOrAllSolidEnum::AllSolid),
                            ReferenceTo::new("GRAY".to_owned()),
                        ),
                        (
                            Choose::Choice1(MaterialStateEnum::Liquid),
                            ReferenceTo::new("ORANGE".to_owned()),
                        ),
                    ],
                    state_name: vec![
                        (
                            Choose::Choice2(AllOrAllSolidEnum::AllSolid),
                            "stone".to_owned(),
                        ),
                        (
                            Choose::Choice1(MaterialStateEnum::Liquid),
                            "magma".to_owned(),
                        ),
                    ],
                    state_adj: vec![
                        (
                            Choose::Choice2(AllOrAllSolidEnum::AllSolid),
                            "stone".to_owned(),
                        ),
                        (
                            Choose::Choice1(MaterialStateEnum::Liquid),
                            "magma".to_owned(),
                        ),
                    ],
                    material_value: Some(1),
                    spec_heat: Some(Choose::Choice1(450)),
                    ignite_point: Some(Choose::Choice2(NoneEnum::None)),
                    melting_point: Some(Choose::Choice1(12768)),
                    reaction_class: vec![],
                    ..Default::default()
                },
                MaterialToken {
                    reference: Some(ReferenceTo::new("WOOD_TEMPLATE".to_owned())),
                    state_color: vec![(
                        Choose::Choice2(AllOrAllSolidEnum::AllSolid),
                        ReferenceTo::new("BROWN".to_owned()),
                    )],
                    ..Default::default()
                },
            ],
            ..Default::default()
        }],
    })
    .add_test_syntax_diagnostics_codes(vec![])
    .add_test_syntax_diagnostics_ranges(vec![])
    .run_test();
}