1//! This invokes `rextendr::document()` within `tests/extendrtests`.
2//!
3//! It uses the vendored `rextendr` in the repository as the source package.
4//!
5//! 1. Ensure that `git submodule update --init` was invoked once, as to setup
6//! the vendored `rextendr` package.
7//! 2. `devtools` must be installed on system.
8//!
9//!
10//! The idea here is to be able to develop `rextendr` alongside `extendr`,
11//! as well as ease the development of extendr.
12//!
13use std::error::Error;
1415use crate::extendrtests::with_absolute_path::{swap_extendr_api_path, R_FOLDER_PATH};
16use xshell::{cmd, Shell};
1718pub(crate) fn run(shell: &Shell) -> Result<(), Box<dyn Error>> {
19let _document_handle = swap_extendr_api_path(shell)?;
2021 run_rextendr_document(shell)
22}
2324fn run_rextendr_document(shell: &Shell) -> Result<(), Box<dyn Error>> {
25let _r_path = shell.push_dir(R_FOLDER_PATH);
2627let rextendr_submodule = std::path::Path::new(".../../rextendr");
28let rextendr_submodule = matches!(rextendr_submodule.try_exists(), Ok(true));
29if rextendr_submodule {
30println!("Loading vendored `{{rextendr}}`");
31cmd!(shell, "Rscript")
32 .args([
33"-e",
34r#"requireNamespace("devtools")"#,
35"-e",
36r#"devtools::load_all("../../rextendr")"#,
37"-e",
38r#"rextendr::document()"#,
39 ])
40 .run()?;
41 } else {
42// check if rextendr is installed and use that instead
43println!("Using installed `{{rextendr}}`");
44cmd!(shell, "Rscript")
45 .args([
46"-e",
47r#"requireNamespace("rextendr")"#,
48"-e",
49r#"rextendr::document()"#,
50 ])
51 .run()?;
52 }
5354Ok(())
55}