tests/testthat/test-url_build.R

test_that("test build basic url", {
  expected <- 'https://www.example.com'
  actual <- url_build(list(
    scheme = "https",
    host = "www.example.com",
    port = "",
    path = "",
    raw_path = "",
    query = "",
    fragment = ""
  ))
  expect_equal(actual, expected)
  expect_equal(url_build(url_parse(expected)), expected)
})


test_that("test build complex url", {
  expected <- "https://www.google.com/maps/place/Pennsylvania+Station/@40.7519848,-74.0015045,14.7z/data=!4m5!3m4!1s0x89c259ae15b2adcb:0x7955420634fd7eba!8m2!3d40.750568!4d-73.993519"
  actual <- url_build(list(
    scheme = "https",
    user = "",
    password = "",
    host = "www.google.com",
    port = "",
    path = "/maps/place/Pennsylvania+Station/@40.7519848,-74.0015045,14.7z/data=!4m5!3m4!1s0x89c259ae15b2adcb:0x7955420634fd7eba!8m2!3d40.750568!4d-73.993519",
    query = "",
    fragment = ""
  ))
  expect_equal(actual, expected)
  expect_equal(url_build(url_parse(expected)), expected)
})

test_that("test build with username and password", {
  expected <- "https://user_1:password_1@example.org:8080/dir/../api?q=1#frag"
  actual <- url_build(list(
    scheme = "https",
    user = "user_1",
    password = "password_1",
    host = "example.org",
    port = "8080",
    path = "/dir/../api",
    raw_query = "q=1",
    fragment = "frag"
  ))
  expect_equal(actual, expected)
  expect_equal(url_build(url_parse(expected)), expected)
})

test_that("test build encoded path", {
  expected <- 'https://www.example.com:8080/search%3D1%2B3'
  actual <- url_build(list(
    scheme = "https",
    user = "",
    password = "",
    host = "www.example.com",
    port = "8080",
    path = "/search%3D1%2B3",
    query = "",
    fragment = ""
  ))
  expect_equal(actual, expected)
  expect_equal(url_build(url_parse(expected)), expected)
})


test_that("test build non-ascci path", {
  expected <- "https://www.google.co.jp/search?q=%E3%83%89%E3%82%A4%E3%83%84"
  actual <- url_build(list(
    scheme = "https",
    host = "www.google.co.jp",
    port = "",
    path = "/search",
    query = "q=%E3%83%89%E3%82%A4%E3%83%84",
    fragment = ""
  ))
  expect_equal(actual, expected)
  expect_equal(url_build(url_parse(expected)), expected)
})

test_that("test build port types", {
  expected <- 'https://www.example.com:8080?var1=foo&var2=ba%20r&var3=baz%2Blarry'
  port <- list(8080, 8080L, "8080")
  url_components <- list(
    scheme = "https",
    host = "www.example.com",
    path = "",
    query = "var1=foo&var2=ba%20r&var3=baz%2Blarry",
    fragment = ""
  )
  expect_equal(url_build(url_parse(expected)), expected)

  for (pp in port) {
    url_components[["port"]] <- pp
    expect_equal(url_build(url_components), expected)
  }

  url_components[["port"]] <- list(8080)
  expect_error(url_build(url_components))
})

test_that("test build query types", {
  expected <- 'https://www.example.com:8080?var1=foo&var2=ba%20r&var3=baz%2Blarry'
  query <- list(list(var1 = "foo", var2 = "ba r", var3 = "baz+larry"), "var1=foo&var2=ba%20r&var3=baz%2Blarry")
  url_components <- list(
    scheme = "https",
    host = "www.example.com",
    port = 8080,
    path = "",
    fragment = ""
  )
  expect_equal(url_build(url_parse(expected)), expected)
  for (qq in query) {
    url_components[["query"]] <- qq
    expect_equal(url_build(url_components), expected)
  }

  url_components[["query"]] <- 123
  expect_error(url_build(url_components))
})

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.