use bracket::{
error::{Error, ErrorInfo, SourcePos, SyntaxError},
Registry, Result,
};
const NAME: &str = "syntax_error.rs";
#[test]
fn syntax_err_empty_statement() -> Result<()> {
let registry = Registry::new();
let value = r"{{}}";
match registry.parse(NAME, value) {
Ok(_) => panic!("Identifier error expected (empty statement)"),
Err(e) => {
println!("{:?}", e);
let pos = SourcePos(0, 2);
let info = ErrorInfo::new(value, NAME, pos, vec![]);
assert_eq!(
Error::Syntax(SyntaxError::ExpectedIdentifier(info.into())),
e
);
}
}
Ok(())
}
#[test]
fn syntax_err_identifier_expected() -> Result<()> {
let registry = Registry::new();
let value = r#"{{# }}"#;
match registry.parse(NAME, value) {
Ok(_) => panic!("Identifier error expected (empty block)"),
Err(e) => {
println!("{:?}", e);
let pos = SourcePos(0, 4);
let info = ErrorInfo::new(value, NAME, pos, vec![]);
assert_eq!(
Error::Syntax(SyntaxError::ExpectedIdentifier(info.into())),
e
);
}
}
Ok(())
}
#[test]
fn syntax_err_block_name() -> Result<()> {
let registry = Registry::new();
let value = r#"{{# foo.bar}}"#;
match registry.parse(NAME, value) {
Ok(_) => panic!("Block name error expected"),
Err(e) => {
println!("{:?}", e);
let pos = SourcePos(0, 4);
let info = ErrorInfo::new(value, NAME, pos, vec![]);
assert_eq!(Error::Syntax(SyntaxError::BlockName(info.into())), e);
}
}
Ok(())
}
#[test]
fn syntax_err_literal_newline_double() -> Result<()> {
let registry = Registry::new();
let value = r#"{{ foo."bar
qux" }}"#;
match registry.parse(NAME, value) {
Ok(_) => panic!("Literal newline error expected"),
Err(e) => {
println!("{:?}", e);
let pos = SourcePos(0, 10);
let info = ErrorInfo::new(value, NAME, pos, vec![]);
assert_eq!(
Error::Syntax(SyntaxError::LiteralNewline(info.into())),
e
);
}
}
Ok(())
}
#[test]
fn syntax_err_literal_newline_single() -> Result<()> {
let registry = Registry::new();
let value = r#"{{ foo.'bar
qux' }}"#;
match registry.parse(NAME, value) {
Ok(_) => panic!("Literal newline error expected"),
Err(e) => {
println!("{:?}", e);
let pos = SourcePos(0, 10);
let info = ErrorInfo::new(value, NAME, pos, vec![]);
assert_eq!(
Error::Syntax(SyntaxError::LiteralNewline(info.into())),
e
);
}
}
Ok(())
}
#[test]
fn syntax_err_literal_newline_array() -> Result<()> {
let registry = Registry::new();
let value = r#"{{ foo.[bar
qux] }}"#;
match registry.parse(NAME, value) {
Ok(_) => panic!("Literal newline error expected"),
Err(e) => {
println!("{:?}", e);
let pos = SourcePos(0, 10);
let info = ErrorInfo::new(value, NAME, pos, vec![]);
assert_eq!(
Error::Syntax(SyntaxError::LiteralNewline(info.into())),
e
);
}
}
Ok(())
}
#[test]
fn syntax_err_sub_expr() -> Result<()> {
let registry = Registry::new();
let value = r#"{{#> (foo}}"#;
match registry.parse(NAME, value) {
Ok(_) => panic!("Sub expression not terminated error expected"),
Err(e) => {
println!("{:?}", e);
let pos = SourcePos(0, 9);
let info = ErrorInfo::new(value, NAME, pos, vec![]);
assert_eq!(
Error::Syntax(SyntaxError::SubExpressionNotTerminated(
info.into()
)),
e
);
}
}
Ok(())
}
#[test]
fn syntax_err_link() -> Result<()> {
let registry = Registry::new();
let value = r#"[[SomeLink|Page"#;
match registry.parse(NAME, value) {
Ok(_) => panic!("Link not terminated error expected"),
Err(e) => {
println!("{:?}", e);
let pos = SourcePos(0, 14);
let info = ErrorInfo::new(value, NAME, pos, vec![]);
assert_eq!(
Error::Syntax(SyntaxError::LinkNotTerminated(info.into())),
e
);
}
}
Ok(())
}
#[test]
fn syntax_err_raw_block_open() -> Result<()> {
let registry = Registry::new();
let value = r#"{{{{raw"#;
match registry.parse(NAME, value) {
Ok(_) => panic!("Raw block open error expected"),
Err(e) => {
println!("{:?}", e);
let pos = SourcePos(0, 4);
let info = ErrorInfo::new(value, NAME, pos, vec![]);
assert_eq!(
Error::Syntax(SyntaxError::RawBlockOpenNotTerminated(
info.into()
)),
e
);
}
}
Ok(())
}
#[test]
fn syntax_err_raw_block_close() -> Result<()> {
let registry = Registry::new();
let value = r#"{{{{raw}}}}foo{{{{/raw"#;
match registry.parse(NAME, value) {
Ok(_) => panic!("Raw block close error expected"),
Err(e) => {
println!("{:?}", e);
let pos = SourcePos(0, 19);
let info = ErrorInfo::new(value, NAME, pos, vec![]);
assert_eq!(
Error::Syntax(SyntaxError::RawBlockNotTerminated(info.into())),
e
);
}
}
Ok(())
}
#[test]
fn syntax_err_raw_block_half_open() -> Result<()> {
let registry = Registry::new();
let value = r#"{{{{raw}}}}foo"#;
match registry.parse(NAME, value) {
Ok(_) => panic!("Raw block half open error expected"),
Err(e) => {
println!("{:?}", e);
let pos = SourcePos(0, 13);
let info = ErrorInfo::new(value, NAME, pos, vec![]);
assert_eq!(
Error::Syntax(SyntaxError::RawBlockNotTerminated(info.into())),
e
);
}
}
Ok(())
}