df_ls_structure 0.3.0-rc.1

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

#[test]
fn test_body_and_bodygloss() {
    SyntaxTestBuilder::from_lexer_test_builder(
        LexerTestBuilder::test_source(
            "body

            [OBJECT:BODY]

            [BODY:THROAT]
                [BP:THROAT:throat:STP]
                    [CON_CAT:NECK]

            [BODY:TEETH]
                [BP:U_F_TOOTH:upper front tooth:upper front teeth]
                    [CONTYPE:HEAD]
                    [CATEGORY:TOOTH]
                    [NUMBER:6]
                    [INDIVIDUAL_NAME:first upper right incisor:STP]

            [BODY:BASIC_2PARTBODY]
                [BP:UB:upper body:upper bodies]
                    [UPPERBODY]
                    [CATEGORY:BODY_UPPER]
                    [DEFAULT_RELSIZE:1000]
                [BP:LB:lower body:lower bodies]
                    [CON:UB][LOWERBODY]
                    [CATEGORY:BODY_LOWER]

            [BODYGLOSS:PAW:foot:paw:feet:paws]
            ",
        )
        .add_test_lexer_diagnostics_codes(vec![])
        .add_test_lexer_diagnostics_ranges(vec![]),
    )
    .add_test_structure(DFRaw {
        header: "body".to_owned(),
        token_structure: vec![ObjectToken {
            body_tokens: vec![
                BodyObjectToken::BodyToken(BodyToken {
                    reference: Some(ReferenceTo::new("THROAT".to_owned())),
                    bp: vec![BodyPartToken {
                        bp: Some((
                            Reference("THROAT".to_owned()),
                            "throat".to_owned(),
                            Choose::Choice1(StandardPluralEnum::Stp),
                        )),
                        con_cat: Some(Reference("NECK".to_owned())),
                        ..Default::default()
                    }],
                }),
                BodyObjectToken::BodyToken(BodyToken {
                    reference: Some(ReferenceTo::new("TEETH".to_owned())),
                    bp: vec![BodyPartToken {
                        bp: Some((
                            Reference("U_F_TOOTH".to_owned()),
                            "upper front tooth".to_owned(),
                            Choose::Choice2("upper front teeth".to_owned()),
                        )),
                        category: Some(Reference("TOOTH".to_owned())),
                        contype: Some(ConTypeEnum::Head),
                        individual_name: vec![(
                            "first upper right incisor".to_owned(),
                            Choose::Choice1(StandardPluralEnum::Stp),
                        )],
                        number: Some(6),
                        ..Default::default()
                    }],
                }),
                BodyObjectToken::BodyToken(BodyToken {
                    reference: Some(ReferenceTo::new("BASIC_2PARTBODY".to_owned())),
                    bp: vec![
                        BodyPartToken {
                            bp: Some((
                                Reference("UB".to_owned()),
                                "upper body".to_owned(),
                                Choose::Choice2("upper bodies".to_owned()),
                            )),
                            category: Some(Reference("BODY_UPPER".to_owned())),
                            default_relsize: Some(1000),
                            upperbody: Some(()),
                            ..Default::default()
                        },
                        BodyPartToken {
                            bp: Some((
                                Reference("LB".to_owned()),
                                "lower body".to_owned(),
                                Choose::Choice2("lower bodies".to_owned()),
                            )),
                            category: Some(Reference("BODY_LOWER".to_owned())),
                            con: Some(Reference("UB".to_owned())),
                            lowerbody: Some(()),
                            ..Default::default()
                        },
                    ],
                }),
                BodyObjectToken::BodyGlossToken(BodyGlossToken {
                    bodygloss: Some((
                        ReferenceTo::new("PAW".to_owned()),
                        "foot".to_owned(),
                        "paw".to_owned(),
                        "feet".to_owned(),
                        "paws".to_owned(),
                    )),
                }),
            ],
            ..Default::default()
        }],
    })
    .add_test_syntax_diagnostics_codes(vec![])
    .add_test_syntax_diagnostics_ranges(vec![])
    .run_test();
}