use lino::{parse_lino, LiNo};
#[test]
fn empty_link_test() {
let source = ":";
let result = parse_lino(source);
assert!(result.is_err());
}
#[test]
fn empty_link_with_parentheses_test() {
let source = "()";
let parsed = parse_lino(source).unwrap();
assert!(parsed.is_link());
let output = format!("{:#}", parsed);
assert_eq!("()", output);
}
#[test]
fn empty_link_with_empty_self_reference_test() {
let source = "(:)";
let result = parse_lino(source);
assert!(result.is_err());
}
#[test]
fn test_all_features_test() {
let input = "id: value1 value2";
let result = parse_lino(input);
assert!(result.is_ok());
let input = "(id: value1 value2)";
let result = parse_lino(input);
assert!(result.is_ok());
let input = ": value1 value2";
let result = parse_lino(input);
assert!(result.is_err());
let input = "(: value1 value2)";
let result = parse_lino(input);
assert!(result.is_err());
let input = "(point)";
let result = parse_lino(input);
assert!(result.is_ok());
let input = "(value1 value2 value3)";
let result = parse_lino(input);
assert!(result.is_ok());
let input = r#"("id with spaces": "value with spaces")"#;
let result = parse_lino(input);
assert!(result.is_ok());
let input = "('id': 'value')";
let result = parse_lino(input);
assert!(result.is_ok());
let input = "(outer: (inner: value))";
let result = parse_lino(input);
assert!(result.is_ok());
}
#[test]
fn test_empty_document_test() {
let input = "";
let result = parse_lino(input);
assert!(result.is_ok());
let parsed = result.unwrap();
assert!(parsed.is_link());
if let LiNo::Link { id, values } = parsed {
assert!(id.is_none());
assert!(values.is_empty());
}
}
#[test]
fn test_whitespace_only_test() {
let input = " \n \n ";
let result = parse_lino(input);
assert!(result.is_ok());
let parsed = result.unwrap();
assert!(parsed.is_link());
if let LiNo::Link { id, values } = parsed {
assert!(id.is_none());
assert!(values.is_empty());
}
}
#[test]
fn test_empty_links_test() {
let input = "()";
let result = parse_lino(input);
assert!(result.is_ok());
let input = "(:)";
let result = parse_lino(input);
assert!(result.is_err());
let input = "(id:)";
let result = parse_lino(input);
assert!(result.is_ok());
}
#[test]
fn test_invalid_input() {
let input = "(invalid";
let result = parse_lino(input);
assert!(result.is_err());
}