Nothing
test_that("qgis_configure() returns FALSE with no QGIS", {
skip_if(has_qgis())
expect_false(
withr::with_options(
list(qgisprocess.path = "notacommandatall"),
qgis_configure(quiet = TRUE)
)
)
expect_false(
withr::with_envvar(
list(R_QGISPROCESS_PATH = "notacommandatall"),
qgis_configure(quiet = TRUE)
)
)
})
test_that("qgis_configure() works", {
skip_if_not(has_qgis())
expect_true(qgis_configure(quiet = TRUE))
})
test_that("qgis_configure() messages are OK", {
skip_if_not(has_qgis())
res_nonquiet_nocache <-
evaluate_promise(qgis_configure(quiet = FALSE))
res_nonquiet_cache <-
evaluate_promise(qgis_configure(use_cached_data = TRUE))
expect_true(res_nonquiet_nocache$result)
expect_true(res_nonquiet_cache$result)
expect_true(all(stringi::stri_detect_regex(
paste(res_nonquiet_nocache$messages, collapse = "\n"),
c(
"Success!",
"Now using 'qgis_process'",
"QGIS version is now set to",
"JSON for output serialization",
"JSON for input serialization",
"[0-9]+ out of [0-9]+ available processing provider plugins are enabled",
"You now have access to [0-9]+ algorithms from [0-9]+ QGIS processing providers",
"Saving configuration to",
"to inspect the cache environment"
)
)))
expect_true(all(stringi::stri_detect_regex(
paste(res_nonquiet_cache$messages, collapse = "\n"),
c(
"Checking configuration in cache file",
"Checking cached QGIS version",
"Checking cached QGIS plugins",
"Restoring configuration from",
"QGIS version:",
"JSON for output serialization",
"JSON for input serialization",
"[0-9]+ out of [0-9]+ available processing provider plugins are enabled",
"Having access to [0-9]+ algorithms from [0-9]+ QGIS processing providers",
"to inspect the cache environment"
)
)))
expect_message(
qgis_configure(use_cached_data = TRUE, quiet = TRUE),
"Success!"
)
})
test_that("qgis_configure() works OK if cache conditions unmet", {
skip_if_not(has_qgis())
version <- as.character(utils::packageVersion("qgisprocess"))
cache_data_file <- file.path(
rappdirs::user_cache_dir("R-qgisprocess"),
glue("cache-{version}.rds")
)
withr::defer(
saveRDS(
list(
path = qgis_path(),
version = qgis_version(),
algorithms = qgis_algorithms(),
plugins = qgis_plugins(),
use_json_output = qgis_using_json_output()
),
cache_data_file
)
)
unlink(cache_data_file)
expect_message(qgis_configure(use_cached_data = TRUE), "No cache found")
saveRDS(list(version = qgis_version()), cache_data_file)
expect_message(
qgis_configure(use_cached_data = TRUE),
"The cache does not contain all required elements"
)
expect_message(
withr::with_options(
list(qgisprocess.path = "wrong/path/to/qgis_process"),
qgis_configure(use_cached_data = TRUE)
),
"The user's qgisprocess.path option or the R_QGISPROCESS_PATH environment variable specify a different qgis_process path"
)
saveRDS(
list(
path = qgis_path(),
version = qgis_version(),
algorithms = "0",
plugins = qgis_plugins(),
use_json_output = qgis_using_json_output()
),
cache_data_file
)
expect_message(
qgis_configure(use_cached_data = TRUE),
"The cache does not contain all required data"
)
saveRDS(
list(
path = "wrong/path/to/qgis_process",
version = qgis_version(),
algorithms = qgis_algorithms(),
plugins = qgis_plugins(),
use_json_output = qgis_using_json_output()
),
cache_data_file
)
expect_message(
qgis_configure(use_cached_data = TRUE),
"is not available anymore"
)
saveRDS(
list(
path = qgis_path(),
version = "3.9999.9-Brussels",
algorithms = qgis_algorithms(),
plugins = qgis_plugins(),
use_json_output = qgis_using_json_output()
),
cache_data_file
)
expect_message(
qgis_configure(use_cached_data = TRUE),
"QGIS version change detected"
)
saveRDS(
list(
path = qgis_path(),
version = qgis_version(),
algorithms = qgis_algorithms(),
plugins = data.frame(name = "XXX", enabled = FALSE),
use_json_output = qgis_using_json_output()
),
cache_data_file
)
expect_message(
capture.output(qgis_configure(use_cached_data = TRUE)),
"Change detected in \\(enabled\\) QGIS processing provider plugins!"
)
})
test_that("qgis_configure() works OK if cache condition 'use_json_output' unmet", {
skip_if_not(has_qgis())
skip_if_not(
package_version(qgis_version(full = FALSE)) >= "3.23.0",
"This QGIS version does not support JSON input (needed for this test)."
)
version <- as.character(utils::packageVersion("qgisprocess"))
cache_data_file <- file.path(
rappdirs::user_cache_dir("R-qgisprocess"),
glue("cache-{version}.rds")
)
withr::defer(
saveRDS(
list(
path = qgis_path(),
version = qgis_version(),
algorithms = qgis_algorithms(),
plugins = qgis_plugins(),
use_json_output = qgis_using_json_output()
),
cache_data_file
)
)
# user setting 'use_json_output' FALSE will trigger reconfiguration if cached value was TRUE
withr::local_options(list(
qgisprocess.use_json_input = NULL,
qgisprocess.use_json_output = FALSE
))
saveRDS(
list(
path = qgis_path(),
version = qgis_version(),
algorithms = qgis_algorithms(),
plugins = qgis_plugins(),
use_json_output = TRUE
),
cache_data_file
)
expect_message(
capture.output(qgis_configure(use_cached_data = TRUE)),
"contradict the 'use_json_output' cache value"
)
expect_false(qgis_using_json_output())
expect_false(qgis_using_json_input())
# absence of user settings will honor the previously set cached value FALSE
withr::local_options(list(
qgisprocess.use_json_output = NULL
))
saveRDS(
list(
path = qgis_path(),
version = qgis_version(),
algorithms = qgis_algorithms(),
plugins = qgis_plugins(),
use_json_output = FALSE
),
cache_data_file
)
expect_no_message(
capture.output(qgis_configure(use_cached_data = TRUE)),
message = "contradict the 'use_json_output' cache value"
)
expect_false(qgis_using_json_output())
expect_false(qgis_using_json_input())
# user setting 'use_json_input' TRUE will trigger reconfiguration if cached value was FALSE
withr::local_options(list(
qgisprocess.use_json_input = TRUE # expectations below need JSON input to be supported!
))
saveRDS(
list(
path = qgis_path(),
version = qgis_version(),
algorithms = qgis_algorithms(),
plugins = qgis_plugins(),
use_json_output = FALSE
),
cache_data_file
)
expect_message(
capture.output(qgis_configure(use_cached_data = TRUE)),
"contradict the 'use_json_output' cache value"
)
expect_true(qgis_using_json_input())
expect_true(qgis_using_json_output())
})
test_that("qgis_configure() works OK with qgisprocess.detect_newer_qgis option or envvar", {
skip_if_not(has_qgis())
skip_if_not(is_windows() || is_macos())
version <- as.character(utils::packageVersion("qgisprocess"))
cache_data_file <- file.path(
rappdirs::user_cache_dir("R-qgisprocess"),
glue("cache-{version}.rds")
)
rlang::local_interactive()
withr::local_options(list(
qgisprocess.test_skip_path_availability_check = TRUE,
qgisprocess.detect_newer_qgis = TRUE
))
local_mocked_bindings(
qgis_detect_paths = function(...) c(
"C:/Program Files/QGIS 3.30.0/bin/qgis_process-qgis-ltr.bat",
"C:/Program Files/QGIS 3.28.6/bin/qgis_process-qgis-ltr.bat"
)
)
withr::defer(
saveRDS(
list(
path = qgis_path(),
version = qgis_version(),
algorithms = qgis_algorithms(),
plugins = qgis_plugins(),
use_json_output = qgis_using_json_output()
),
cache_data_file
)
)
# answering 'yes' triggers reconfiguration with newer version
withr::local_options(qgisprocess.test_try_new_qgis = "yes")
saveRDS(
list(
path = "C:/Program Files/QGIS 3.28.6/bin/qgis_process-qgis-ltr.bat",
version = "3.28.6-xxx",
algorithms = qgis_algorithms(),
plugins = qgis_plugins(),
use_json_output = qgis_using_json_output()
),
cache_data_file
)
expect_message(
capture.output(qgis_configure(use_cached_data = TRUE), type = "message"),
"A newer QGIS installation seems to be"
)
# answering 'no' triggers another message
withr::local_options(qgisprocess.test_try_new_qgis = "no")
saveRDS(
list(
path = "C:/Program Files/QGIS 3.28.6/bin/qgis_process-qgis-ltr.bat",
version = "3.28.6-xxx",
algorithms = qgis_algorithms(),
plugins = qgis_plugins(),
use_json_output = qgis_using_json_output()
),
cache_data_file
)
expect_message(
capture.output(qgis_configure(use_cached_data = TRUE), type = "message"),
"if you don't want to autodetect QGIS version updates"
)
# with newest version in place: not offering to switch
withr::local_options(qgisprocess.test_try_new_qgis = "yes")
saveRDS(
list(
path = "C:/Program Files/QGIS 3.30.0/bin/qgis_process-qgis-ltr.bat",
version = "3.30.0-xxx",
algorithms = qgis_algorithms(),
plugins = qgis_plugins(),
use_json_output = qgis_using_json_output()
),
cache_data_file
)
expect_no_message(
capture.output(qgis_configure(use_cached_data = TRUE), type = "message"),
message = "A newer QGIS installation seems to be"
)
# without the option: not offering to switch
withr::local_options(list(
qgisprocess.detect_newer_qgis = NULL,
qgisprocess.test_try_new_qgis = "yes"
))
saveRDS(
list(
path = "C:/Program Files/QGIS 3.28.6/bin/qgis_process-qgis-ltr.bat",
version = "3.28.6-xxx",
algorithms = qgis_algorithms(),
plugins = qgis_plugins(),
use_json_output = qgis_using_json_output()
),
cache_data_file
)
expect_no_message(
capture.output(qgis_configure(use_cached_data = TRUE), type = "message"),
message = "A newer QGIS installation seems to be"
)
# when not interactive: not offering to switch
rlang::local_interactive(value = FALSE)
withr::local_options(list(
qgisprocess.detect_newer_qgis = TRUE,
qgisprocess.test_try_new_qgis = "yes"
))
saveRDS(
list(
path = "C:/Program Files/QGIS 3.28.6/bin/qgis_process-qgis-ltr.bat",
version = "3.28.6-xxx",
algorithms = qgis_algorithms(),
plugins = qgis_plugins(),
use_json_output = qgis_using_json_output()
),
cache_data_file
)
expect_no_message(
capture.output(qgis_configure(use_cached_data = TRUE), type = "message"),
message = "A newer QGIS installation seems to be"
)
})
test_that("abort_query_version() works", {
lines <- c("aa", "bb")
expect_error(
abort_query_version(lines),
"Output did not contain expected version information and was:"
)
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.