use noyalib_lsp::format::full_document_edits;
#[test]
fn round_trip_canonical_inputs_return_empty() {
for input in [
"a: 1\nb: 2\n",
"a: 1\nb: 2\n",
"key:\n - one\n - two\n",
"{a: 1, b: 2}\n",
] {
let edits = full_document_edits(input).expect("parse + format");
assert!(
edits.is_empty(),
"byte-faithful CST → no edit for {input:?}"
);
}
}
#[test]
fn end_character_for_input_without_trailing_newline() {
let input = "a: 1";
let edits = full_document_edits(input);
assert!(edits.is_ok());
}
#[test]
fn end_line_calculation_for_multi_line() {
let input = "key1: value\nkey2: value\nkey3: value\n";
let edits = full_document_edits(input).expect("ok");
if let Some(e) = edits.first() {
let end_line = e["range"]["end"]["line"].as_u64().unwrap();
assert!(end_line >= 1, "multi-line doc must have end_line >= 1");
}
}
#[test]
fn empty_input_handled() {
let edits = full_document_edits("");
assert!(edits.is_ok());
}
#[test]
fn single_line_no_newline() {
let edits = full_document_edits("foo: bar");
assert!(edits.is_ok());
}
#[test]
fn already_canonical_returns_empty() {
let edits = full_document_edits("name: foo\nport: 8080\n").expect("ok");
assert!(edits.is_empty(), "canonical input → no edits");
}
#[test]
fn invalid_yaml_returns_error() {
let r = full_document_edits("a: [unclosed\n");
assert!(r.is_err());
}