///|
test "limits default parses normal input" {
  match
    parse_robots_with_limits("User-agent: *\nAllow: /\n", Limits::default()) {
    Ok(_) => ()
    Err(e) => fail(e.to_display())
  }
}

///|
test "limits strict preset is smaller than permissive" {
  assert_true(
    Limits::strict().max_input_bytes() < Limits::permissive().max_input_bytes(),
  )
}

///|
test "limits reject input bytes" {
  let limits = Limits::custom(5, 100, 10, 10, 10, 10, 10)
  expect_err_kind(
    parse_robots_with_limits("User-agent: *\n", limits),
    LimitExceeded,
  )
}

///|
test "limits reject too many lines" {
  let limits = Limits::custom(1000, 1, 10, 10, 10, 10, 100)
  expect_err_kind(
    parse_robots_with_limits("User-agent: *\nAllow: /\n", limits),
    LimitExceeded,
  )
}

///|
test "limits reject too many groups" {
  let limits = Limits::custom(1000, 100, 1, 10, 10, 10, 100)
  expect_err_kind(
    parse_robots_with_limits(
      "User-agent: a\nAllow: /\nUser-agent: b\nAllow: /\n", limits,
    ),
    LimitExceeded,
  )
}

///|
test "limits reject too many user agents" {
  let limits = Limits::custom(1000, 100, 10, 1, 10, 10, 100)
  expect_err_kind(
    parse_robots_with_limits("User-agent: a\nUser-agent: b\nAllow: /\n", limits),
    LimitExceeded,
  )
}

///|
test "limits reject too many rules" {
  let limits = Limits::custom(1000, 100, 10, 10, 1, 10, 100)
  expect_err_kind(
    parse_robots_with_limits("User-agent: *\nAllow: /a\nAllow: /b\n", limits),
    LimitExceeded,
  )
}

///|
test "limits reject long pattern" {
  let limits = Limits::custom(1000, 100, 10, 10, 10, 2, 100)
  expect_err_kind(
    parse_robots_with_limits("User-agent: *\nAllow: /abc\n", limits),
    LimitExceeded,
  )
}

///|
test "limits reject long record" {
  let limits = Limits::custom(1000, 100, 10, 10, 10, 100, 5)
  expect_err_kind(
    parse_robots_with_limits("User-agent: *\n", limits),
    LimitExceeded,
  )
}