///|
test "cli: option lookup finds an existing value" {
  let args = ["parse", "--range", "bytes=0-9"]
  match option_value(args, "--range") {
    Some(value) => assert_eq(value, "bytes=0-9")
    None => fail("expected option value")
  }
  assert_eq(
    normalize_args(["range-tool", "parse", "--range", "bytes=0-9"])[0],
    "parse",
  )
  assert_eq(
    normalize_args(["node", "range-tool.js", "resolve", "--length", "10"])[0],
    "resolve",
  )
}

///|
test "cli: required reports a missing option" {
  match required(["parse"], "--range") {
    Err(error) => assert_eq(error, "missing option --range")
    Ok(_) => fail("expected missing option")
  }
}

///|
test "cli: Int64 parser accepts representation lengths" {
  match parse_i64("9223372036854775807") {
    Ok(value) => assert_eq(value, @int64.MAX_VALUE)
    Err(_) => fail("expected Int64")
  }
}

///|
test "cli: Int64 parser rejects malformed values" {
  match parse_i64("1KiB") {
    Err(error) => assert_eq(error, "invalid Int64: 1KiB")
    Ok(_) => fail("expected malformed Int64")
  }
}

///|
test "cli: if-range kind name distinguishes validators" {
  assert_eq(if_range_kind_name(@range.EntityTag("\"x\"")), "EntityTag")
  assert_eq(if_range_kind_name(@range.HttpDate(0L)), "HttpDate")
}

///|
test "cli: has_flag detects a present flag" {
  assert_true(has_flag(["audit", "--details"], "--details"))
  assert_false(has_flag(["audit"], "--details"))
  assert_false(has_flag(["--detail"], "--details"))
}

///|
test "cli: audit details renders every finding with kind and context" {
  let request = @range.parse_range("bytes=0-0,1-1,2-2,3-3").unwrap()
  let report = @range.audit_range_request(
    request,
    raw_input="bytes=0-0,1-1,2-2,3-3",
    representation_length=100L,
  )
  let json = findings_json(report.findings())
  assert_eq(
    json, "[{\"kind\":\"ManySmallRanges\",\"context\":\"request contains at least four ranges of 16 bytes or fewer\"},{\"kind\":\"AdjacentRanges\",\"context\":\"resolved ranges are adjacent and may be coalesced\"}]",
  )
}

///|
test "cli: if-range normalization survives argument prefixes" {
  assert_eq(
    normalize_args(["range-tool", "if-range", "--value", "\"x\""])[0],
    "if-range",
  )
}