use fluent4rs::prelude::{Fluent4rsError, Parser};
use pretty_assertions::assert_eq;
#[test]
fn full_grammar_will_be_parsed() {
let ftl0 = include_str!("data/full_grammar_example.ftl");
let ast0 = Parser::parse(ftl0).unwrap();
let ftl1 = ast0.to_string();
let ast1 = Parser::parse(&ftl1).unwrap();
assert_eq!(ast1, ast0);
let ftl2 = ast1.to_string();
assert_eq!(ftl2, ftl1);
}
#[test]
fn empty_grammar_will_be_parsed() {
let ftl0 = "";
let ast0 = Parser::parse(ftl0).unwrap();
let ftl1 = ast0.to_string();
let ast1 = Parser::parse(&ftl1).unwrap();
assert_eq!(ast1, ast0);
let ftl2 = ast1.to_string();
assert_eq!(ftl2, ftl1);
}
#[test]
fn garbage_grammar_will_be_an_error() {
let ftl0 = r#"asdhj asdasdkjhk { &&*$%$% }
dfsdfjh jhksdfh *($(*%&$&
"#;
let error = Parser::parse(ftl0).unwrap_err();
assert!(matches!(error, Fluent4rsError::UnwantedJunk(_)));
}
#[test]
fn garbage_grammar_will_be_returned() {
let ftl0 = r#"asdhj asdasdkjhk { &&*$%$% }
dfsdfjh jhksdfh *($(*%&$&
"#;
let ast0 = Parser::parse_with_junk(ftl0).unwrap();
let ftl1 = ast0.to_string();
let ast1 = Parser::parse_with_junk(&ftl1).unwrap();
assert_eq!(ast1, ast0);
let ftl2 = ast1.to_string();
assert_eq!(ftl2, ftl1);
}