tests/testthat/test-url-modify.R

test_that("test modify", {
  url <- 'https:/example.com'
  expected <- "https://user:pass@example_v2.com:8080/search?var1=bob&var2=1%2B2#frag"

  url_components <- list(
    url = url,
    scheme = "https",
    host = "example_v2.com",
    user = "user",
    password = "pass",
    path = "search",
    query = list(var1 = "bob", var2 = "1+2"),
    fragment = "frag"
  )
  port <- list(8080L, 8080, "8080")
  for (pp in port) {
    url_components[["port"]] <- pp
    expect_equal(do.call(url_modify, url_components), expected)
  }

  url_components[["query"]] <- "var1=bob&var2=1%2B2"
  expect_equal(do.call(url_modify, url_components), expected)

  url_components[["query"]] <- 123
  expect_error(do.call(url_modify, url_components))

  url_components[["port"]] <- list(123)
  url_components[["query"]] <- "var1=bob&var2=1%2B2"
  expect_error(do.call(url_modify, url_components))
})

test_that("test query unexpected type", {
  url <- 'https:/example.com'
  expect_error(
    url_modify(url, query = 1)
  )
})

test_that("test query unexpected type", {
  url <- 'https:/example.com'
  expect_error(
    url_modify(url, port = list(1))
  )
})

test_that("test modifing pipe", {
  url <- 'https://example.com'
  expected <- "https://user:pass@example_v2.com:8080/search?var1=bob&var2=1%2B2#frag"

  actual <- set_scheme(url, "https") |>
    set_user("user") |>
    set_password("pass") |>
    set_host("example_v2.com") |>
    set_path("search") |>
    set_query(list(var1 = "bob", var2 = "1+2")) |>
    set_fragment("frag")


  port <- list(8080L, 8080, "8080")
  for (pp in port) {
    expect_equal(set_port(actual, pp), expected)
  }
  actual <- set_port(actual, "8080")
  expect_equal(set_query(actual, "var1=bob&var2=1%2B2"), expected)

  expect_error(set_query(actual, 1))
  expect_error(set_port(actual, list(1)))
})

Try the urlparse package in your browser

Any scripts or data that you put into this service are public.

urlparse documentation built on April 15, 2025, 1:16 a.m.