yerba 0.9.0

YAML Editing and Refactoring with Better Accuracy
mod support;
use support::parse;

fn value(source: &str) -> String {
  parse(source).get("k").unwrap()
}

#[test]
fn test_a_wrapped_double_quoted_scalar_folds_to_a_space() {
  assert_eq!(value("k: \"a\n  b\"\n"), "a b");
  assert_eq!(value("k: \"a\n  b\n  c\"\n"), "a b c");
}

#[test]
fn test_a_blank_line_in_a_double_quoted_scalar_reads_as_a_newline() {
  assert_eq!(value("k: \"a\n\n  b\"\n"), "a\nb");
  assert_eq!(value("k: \"a\n\n\n  b\"\n"), "a\n\nb");
}

#[test]
fn test_an_escaped_break_joins_the_lines_with_nothing() {
  assert_eq!(value("k: \"a \\\n  b\"\n"), "a b");
  assert_eq!(value("k: \"ab\\\n  cd\"\n"), "abcd");
}

#[test]
fn test_an_escaped_newline_is_not_folded() {
  assert_eq!(value("k: \"a\\nb\"\n"), "a\nb");
  assert_eq!(value("k: \"a\\nb\n  c\"\n"), "a\nb c");
}

#[test]
fn test_folding_keeps_whitespace_at_the_edges_of_the_scalar() {
  assert_eq!(value("k: \"  a\n  b\"\n"), "  a b");
  assert_eq!(value("k: \"a\n  b  \"\n"), "a b  ");
}

#[test]
fn test_a_wrapped_single_quoted_scalar_folds() {
  assert_eq!(value("k: 'a\n  b'\n"), "a b");
  assert_eq!(value("k: 'a\n\n  b'\n"), "a\nb");
  assert_eq!(value("k: 'a''b\n  c'\n"), "a'b c");
}

#[test]
fn test_a_wrapped_plain_scalar_folds() {
  assert_eq!(value("k: a\n  b\n"), "a b");
}

#[test]
fn test_a_literal_block_scalar_keeps_its_breaks() {
  assert_eq!(value("k: |-\n  a\n  b\n"), "a\nb");
}

#[test]
fn test_a_folded_block_scalar_folds_its_breaks() {
  assert_eq!(value("k: >-\n  a\n  b\n"), "a b");
}

#[test]
fn test_a_wrapped_value_survives_being_written_back() {
  let mut document = parse("k: \"a\n  b\"\n");
  let read = document.get("k").unwrap();

  document.set("k", &read).unwrap();

  assert_eq!(document.to_string(), "k: \"a b\"\n");
  assert_eq!(parse(&document.to_string()).get("k").unwrap(), read);
}

#[test]
fn test_an_escape_in_a_wrapped_value_survives_being_written_back() {
  let mut document = parse("k: \"a \\U0001F971 b\n  c\"\n");
  let read = document.get("k").unwrap();

  assert_eq!(read, "a 🥱 b c");

  document.set("k", &read).unwrap();

  assert_eq!(parse(&document.to_string()).get("k").unwrap(), read);
}