test_that("we can read a shapefile using st_read", {
nc <- st_read(system.file("shape/nc.shp", package = "sf"), "nc", crs = 4267, quiet = TRUE)
expect_s3_class(nc, c("sf", "data.frame"), exact = TRUE)
expect_equal(dim(nc), c(100, 15))
})
test_that("we can read shapefiles with a query string", {
nc <- st_read(system.file("shape/nc.shp", package="sf"), "nc", crs = 4267, quiet = TRUE)
nc_all <- st_read(system.file("shape/nc.shp", package="sf"), query = "select * from nc", crs = 4267, quiet = TRUE)
nc_some <- st_read(system.file("shape/nc.shp", package="sf"), query = "select * from nc where SID79 > 50", crs = 4267, quiet = TRUE)
})
test_that("st_read.default gives error messages", {
expect_error(st_read(), "dsn should specify a data source or filename")
expect_error(st_read(NULL), "no st_read method available for objects of class NULL")
})
test_that("st_write.sf gives error messages on unknown dsn", {
expect_error(st_write(st_sf(st_sfc(st_point())), NULL), "no st_write method available for dsn of class NULL")
})
test_that("stringsAsFactors = FALSE produces a data.frame with no factors", {
nc <- st_read(system.file("shape/nc.shp", package="sf"), "nc", crs = 4267,
stringsAsFactors = FALSE, quiet = TRUE)
expect_false(any(sapply(nc, class) == "factor"))
})
test_that("stringsAsFactors = TRUE produces a data.frame with factors", {
nc <- st_read(system.file("shape/nc.shp", package="sf"), "nc", crs = 4267,
stringsAsFactors = TRUE, quiet = TRUE)
expect_true(any(sapply(nc, class) == "factor"))
})
test_that("drivers extensions are all lowercase", {
expect_equal(names(extension_map), tolower(names(extension_map)))
expect_equal(names(prefix_map), tolower(names(prefix_map)))
})
test_that("guess_driver is strict", {
expect_error(guess_driver(c("PG:xyz", "x.shp")), "length")
expect_error(guess_driver(1), "character")
})
test_that("guess_driver works on extensions", {
# for repeatability, this is how I turned the list to tests
# `^"(\w+)" = ("[\w\s]+"),?`
# to `expect_equal(guess_driver("nc.\1"), c("\1" = \2))`
expect_equal(guess_driver("nc.bna"), c("bna" = "BNA"))
expect_equal(guess_driver("nc.csv"), c("csv" = "CSV"))
expect_equal(guess_driver("nc.e00"), c("e00" = "AVCE00"))
expect_equal(guess_driver("nc.gdb"), c("gdb" = "OpenFileGDB"))
expect_equal(guess_driver("nc.geojson"), c("geojson" = "GeoJSON"))
expect_equal(guess_driver("nc.gml"), c("gml" = "GML"))
expect_equal(guess_driver("nc.gmt"), c("gmt" = "GMT"))
expect_equal(guess_driver("nc.gpkg"), c("gpkg" = "GPKG"))
expect_equal(guess_driver("nc.gps"), c("gps" = "GPSBabel"))
expect_equal(guess_driver("nc.gtm"), c("gtm" = "GPSTrackMaker"))
expect_equal(guess_driver("nc.gxt"), c("gxt" = "Geoconcept"))
expect_equal(guess_driver("nc.kml"), c("kml" = "KML"))
expect_equal(guess_driver("nc.jml"), c("jml" = "JML"))
expect_equal(guess_driver("nc.map"), c("map" = "WAsP"))
expect_equal(guess_driver("nc.mdb"), c("mdb" = "Geomedia"))
expect_equal(guess_driver("nc.nc"), c("nc" = "netCDF"))
expect_equal(guess_driver("nc.ods"), c("ods" = "ODS"))
expect_equal(guess_driver("nc.osm"), c("osm" = "OSM"))
expect_equal(guess_driver("nc.pbf"), c("pbf" = "OSM"))
expect_equal(guess_driver("nc.shp"), c("shp" = "ESRI Shapefile"))
expect_equal(guess_driver("nc.sqlite"), c("sqlite" = "SQLite"))
expect_equal(guess_driver("nc.vdv"), c("vdv" = "VDV"))
expect_equal(guess_driver("nc.xls"), c("xls" = "xls"))
expect_equal(guess_driver("nc.xlsx"), c("xlsx" = "XLSX"))
# unsuported
expect_equal(guess_driver("nc.notsupported"), NA)
})
test_that("guess_driver works on suffixes", {
# for repeatability, this is how I turned the list to tests
# `^"(\w+)" = ("[\w\s]+"),?`
# to `expect_equal(guess_driver("nc.\1"), c("\1" = \2))`
expect_equal(guess_driver("couchdb:nc"), c("couchdb" = "CouchDB"))
expect_equal(guess_driver("db2odbc:nc"), c("db2odbc" = "DB2ODBC"))
expect_equal(guess_driver("dods:nc"), c("dods" = "DODS"))
expect_equal(guess_driver("gft:nc"), c("gft" = "GFT"))
expect_equal(guess_driver("mssql:nc"), c("mssql" = "MSSQLSpatial"))
expect_equal(guess_driver("mysql:nc"), c("mysql" = "MySQL"))
expect_equal(guess_driver("oci:nc"), c("oci" = "OCI"))
expect_equal(guess_driver("odbc:nc"), c("odbc" = "ODBC"))
expect_equal(guess_driver("pg:nc"), c("pg" = "PostgreSQL"))
expect_equal(guess_driver("sde:nc"), c("sde" = "SDE"))
# upper case
expect_equal(guess_driver("CouchDB:nc"), c("couchdb" = "CouchDB"))
expect_equal(guess_driver("db2ODBC:nc"), c("db2odbc" = "DB2ODBC"))
expect_equal(guess_driver("DODS:nc"), c("dods" = "DODS"))
expect_equal(guess_driver("GFT:nc"), c("gft" = "GFT"))
expect_equal(guess_driver("MSSQL:nc"), c("mssql" = "MSSQLSpatial"))
expect_equal(guess_driver("MYSQL:nc"), c("mysql" = "MySQL"))
expect_equal(guess_driver("OCI:nc"), c("oci" = "OCI"))
expect_equal(guess_driver("ODBC:nc"), c("odbc" = "ODBC"))
expect_equal(guess_driver("PG:nc"), c("pg" = "PostgreSQL"))
expect_equal(guess_driver("SDE:nc"), c("sde" = "SDE"))
# unsuported
expect_equal(guess_driver("notsupported:nc"), NA)
})
test_that("weird names are supported", {
expect_equal(guess_driver("pg:nc.shp"), c("pg" = "PostgreSQL"))
expect_equal(guess_driver("pg:nc.shp.e00"), c("pg" = "PostgreSQL"))
expect_equal(guess_driver("nc.shp.e00"), c("e00" = "AVCE00"))
expect_equal(guess_driver("couchdb:shp"), c("couchdb" = "CouchDB"))
expect_equal(guess_driver("notsupported:nc.shp"), NA)
expect_equal(guess_driver("notsupported"), NA)
})
test_that("driver utils work", {
expect_true(is_driver_available("shp", data.frame(name = c("x", "y", "shp"))))
expect_true(is_driver_available("shp", data.frame(name = c("shp"))))
expect_false(is_driver_available("shp", data.frame(name = c("x", "y", "z"))))
expect_false(is_driver_available("shp", data.frame(name = c("x", "y", "z"))))
expect_error(is_driver_can("shp", data.frame(name = c("x", "y", "shp")), operation = "nothing"))
expect_error(is_driver_can("shp", data.frame(name = c("x", "y")), operation = "nothing"))
expect_true(is_driver_can("shp", data.frame(name = c("x", "y", "shp"), write = rep(TRUE, 3)), operation = "write"))
expect_false(is_driver_can("shp", data.frame(name = c("x", "y", "shp"), write = c(TRUE, TRUE, FALSE)), operation = "write"))
})
test_that("guess_driver_can_write", {
expect_error(guess_driver_can_write("x.e00", NA), "Could not guess")
expect_error(guess_driver_can_write("x.not", c("nothing" = "nothing")), "not available")
expect_equal(guess_driver_can_write("x.csv"), c("csv" = "CSV"))
expect_equal(guess_driver_can_write("c:/x.csv"), c("csv" = "CSV"))
expect_error(guess_driver_can_write("x.unsuported"), "Could not guess driver")
expect_error(guess_driver_can_write("unsuported:x"), "Could not guess driver")
})
test_that("driver operations", {
# These tests are driver specifics to GDAL version and OS.
expect_error(guess_driver_can_write("x.e00"), "cannot write")
# expect_error(guess_driver_can_write("x.gdb"), "cannot write") -> no longer the case when GDAL >= 3.6.0
expect_equal(guess_driver_can_write("x.geojson"), c("geojson" = "GeoJSON"))
expect_equal(guess_driver_can_write("x.csv"), c("csv" = "CSV"))
expect_equal(guess_driver_can_write("x.gml"), c("gml" = "GML"))
})
test_that("guess driver on windows with backslashes (#127)", {
expect_identical(guess_driver("c:\\Temp\\this.shp"),
guess_driver("c:/Temp/this.shp"))
})
test_that("the first layer is selected with a warning", {
skip_on_os("mac")
expect_warning(st_read(system.file("osm/overpass.osm", package="sf"), quiet = TRUE),
"automatically selected the first layer")
expect_error(st_read(system.file("osm/overpass.osm", package="sf"), "foo", quiet = TRUE),
"Opening layer failed")
})
test_that("we get a warning when not specifying one of multiple layers", {
skip_if_not("OSM" %in% st_drivers()$name && Sys.info()['sysname'] != "Darwin")
Sys.setenv(OSM_USE_CUSTOM_INDEXING="NO")
osm = system.file("osm/overpass.osm", package="sf")
expect_warning(st_read(osm, quiet = TRUE),
"automatically selected the first layer in a data source containing more than one.")
})
test_that("reading non-spatial table works", {
skip_if_not(sf_extSoftVersion()[["GDAL"]] >= "2.2.0") # error on OSX for 2.1.3
expect_warning(st_read(system.file("gpkg/nospatial.gpkg", package = "sf")),
"no simple feature geometries present")
expect_warning(
expect_s3_class(st_read(system.file("gpkg/nospatial.gpkg", package = "sf")),
"data.frame"),
"no simple feature geometries"
)
# expect_warning(
# expect_s3_class(read_sf(system.file("gpkg/nospatial.gpkg", package = "sf")),
# "tbl_df"),
# "no simple feature geometries"
# )
})
test_that("Missing data sources have useful error message (#967)", {
# write temporary file
x <- tempfile(fileext = ".kml")
cat("empty", file = x)
expect_error(st_read(tempfile(fileext = ".csv")), "The file doesn't seem to exist.")
expect_error(st_read("PG:host=wrong"), "Check connection parameters.")
expect_error(st_read(x), "The source could be corrupt or not supported.")
expect_error(st_read(""), "not an empty string.")
# delete temp file
file.remove(x)
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.