///|
test "test_process_exec_success" {
  let host = detect_host_platform()
  let argv = match host {
    Windows => ["cmd.exe", "/c", "exit 0"]
    _ => ["true"]
  }
  match process_exec_argv(argv, timeout_ms=5000) {
    Ok(result) => assert_eq(result.exit_code, 0)
    Err(message) => fail("expected success, got: " + message)
  }
}

///|
test "test_process_exec_failure" {
  let host = detect_host_platform()
  let argv = match host {
    Windows => ["cmd.exe", "/c", "exit 1"]
    _ => ["false"]
  }
  match process_exec_argv(argv, timeout_ms=5000) {
    Ok(result) => assert_eq(result.exit_code, 1)
    Err(message) => fail("expected failure exit, got: " + message)
  }
}

///|
test "test_process_exec_cwd" {
  let host = detect_host_platform()
  // Skip on Windows because cmd.exe cwd handling differs
  if host == Windows {
    return
  }
  let tmp = process_tmp_dir()
  match process_exec_argv(["pwd"], cwd=tmp, timeout_ms=5000) {
    Ok(r) => assert_true(r.stdout.contains(tmp) || r.stdout.length() > 0)
    Err(message) => fail("expected pwd output, got: " + message)
  }
}

///|
test "test_process_exec_timeout" {
  let host = detect_host_platform()
  let argv = match host {
    Windows => ["cmd.exe", "/c", "ping -n 30 127.0.0.1"]
    _ => ["sleep", "5"]
  }
  match process_exec_argv(argv, timeout_ms=200) {
    Err(message) => assert_true(message.contains("timeout"))
    Ok(result) =>
      fail(
        "expected timeout, got success with exit_code=" +
        result.exit_code.to_string(),
      )
  }
}