nom-kconfig 0.12.0

A Kconfig parser
Documentation
use crate::{
    assert_parsing_eq, assert_parsing_fail,
    attribute::{depends_on::DependsOn, AndExpression, Atom, Expression, Term},
    entry::{parse_menu, Menu},
    symbol::Symbol,
};

#[test]
fn test_parse_menu() {
    let input = "menu \"BPF subsystem\" endmenu";
    assert_parsing_eq!(
        parse_menu,
        input,
        Ok((
            "",
            Menu {
                prompt: "BPF subsystem".to_string(),
                visible: None,
                ..Default::default()
            }
        ))
    )
}

#[test]
fn test_parse_menu_visible() {
    let input = "menu \"BPF subsystem\" visible if EXPERT endmenu";
    assert_parsing_eq!(
        parse_menu,
        input,
        Ok((
            "",
            Menu {
                prompt: "BPF subsystem".to_string(),
                visible: Some(Some(Expression::Term(AndExpression::Term(Term::Atom(
                    Atom::Symbol(Symbol::NonConstant("EXPERT".to_string()))
                ))))),
                ..Default::default()
            }
        ))
    )
}

#[test]
fn test_parse_menu_forbidden_attribute() {
    let input = "menu \"BPF subsystem\" select EXPERT endmenu";
    assert_parsing_fail!(parse_menu, input)
}

#[test]
fn test_parse_menu_depends_on() {
    let input = "menu \"BPF subsystem\"     depends on MODULES endmenu";
    assert_parsing_eq!(
        parse_menu,
        input,
        Ok((
            "",
            Menu {
                prompt: "BPF subsystem".to_string(),
                visible: None,
                depends_on: vec!(DependsOn {
                    expression: Expression::Term(AndExpression::Term(Term::Atom(Atom::Symbol(
                        Symbol::NonConstant("MODULES".to_string())
                    )))),
                    r#if: None
                }),
                ..Default::default()
            }
        ))
    )
}