///|
test "serializer uses canonical field names" {
  let f = unwrap_file(
    parse_robots("user-agent: Bot\ndisallow: /x\nallow: /x/public\n"),
  )
  assert_str_eq(
    serialize_robots(f),
    "User-agent: bot\nDisallow: /x\nAllow: /x/public\n",
  )
}

///|
test "serializer separates groups with blank line" {
  let f = unwrap_file(
    parse_robots("User-agent: a\nDisallow: /a\nUser-agent: b\nDisallow: /b\n"),
  )
  assert_true(serialize_robots(f).contains("\n\nUser-agent: b"))
}

///|
test "serializer writes sitemap after groups" {
  let f = unwrap_file(
    parse_robots("Sitemap: https://e.test/s.xml\nUser-agent: *\nAllow: /\n"),
  )
  assert_true(serialize_robots(f).contains("Sitemap: https://e.test/s.xml"))
}

///|
test "serializer round trips semantic model" {
  let f1 = unwrap_file(
    parse_robots("User-agent: A\nDisallow: /x\n\nUser-agent: B\nAllow: /y\n"),
  )
  let f2 = unwrap_file(parse_robots(serialize_robots(f1)))
  assert_int_eq(f1.group_count(), f2.group_count())
  assert_int_eq(f1.rule_count(), f2.rule_count())
}

///|
test "stats text includes rules count" {
  let f = unwrap_file(parse_robots("User-agent: *\nAllow: /\n"))
  assert_true(stats_to_text(f).contains("rules: 1"))
}