test_that("url_absolute", { expect_equal( url_absolute(c(".", "..", "/", "/x"), "http://hadley.nz/a/b/c/d"), c("http://hadley.nz/a/b/c/", "http://hadley.nz/a/b/", "http://hadley.nz/", "http://hadley.nz/x") ) expect_error( url_absolute(c(".", "..", "/", "/x"), c("http://hadley.nz/a/b/c/d", "http://foo.bar")), "Base URL must be length 1" ) }) test_that("url_relative", { # The behavior of libxml2 with relative paths is fragile so we skip this test skip("libxml2-dependent") expect_equal( url_relative("http://hadley.nz/a/c", "http://hadley.nz"), "/a/c" ) expect_equal( url_relative("http://hadley.nz/a/c", "http://hadley.nz/"), "a/c" ) expect_equal( url_relative("http://hadley.nz/a/c", "http://hadley.nz/a/b"), "c" ) expect_equal( url_relative("http://hadley.nz/a/c", "http://hadley.nz/a/b/"), "../c" ) expect_error( url_relative("http://hadley.nz/a/c", c("http://hadley.nz/a/b/c/d", "http://foo.bar")), "Base URL must be length 1" ) }) test_that("url_parse", { expect_equal( url_parse("http://had.co.nz/"), data.frame( scheme = "http", server = "had.co.nz", port = NA_integer_, user = "", path = "/", query = "", fragment = "", stringsAsFactors = FALSE ) ) expect_equal( url_parse("http://had.co.nz:1234/"), data.frame( scheme = "http", server = "had.co.nz", port = 1234L, user = "", path = "/", query = "", fragment = "", stringsAsFactors = FALSE ) ) expect_equal( url_parse("http://had.co.nz:1234/?a=1&b=2"), data.frame( scheme = "http", server = "had.co.nz", port = 1234L, user = "", path = "/", query = "a=1&b=2", fragment = "", stringsAsFactors = FALSE ) ) expect_equal( url_parse("http://had.co.nz:1234/?a=1&b=2#def"), data.frame( scheme = "http", server = "had.co.nz", port = 1234L, user = "", path = "/", query = "a=1&b=2", fragment = "def", stringsAsFactors = FALSE ) ) }) test_that("url_escape", { expect_error( url_escape("a b c", reserved = c("a", "b")), "`reserved` must be character vector of length 1" ) expect_equal( url_escape("a b c"), "a%20b%20c" ) expect_equal( url_escape("a b c", " "), "a b c" ) expect_equal( url_unescape("a%20b%2fc"), "a b/c" ) expect_equal( url_unescape("%C2%B5"), "\u00B5" ) })