@@ -35,6 +35,86 @@ test_that("._java_version_check_rjava_impl_original prefers callr", {
3535 expect_equal(state $ captured_libpath , .libPaths())
3636})
3737
38+ test_that(" ._java_version_check_rjava_impl_original returns FALSE without java_home" , {
39+ expect_false(rJavaEnv ::: ._java_version_check_rjava_impl_original(NULL ))
40+ expect_false(rJavaEnv ::: ._java_version_check_rjava_impl_original(" " ))
41+ })
42+
43+ test_that(" ._java_version_check_rjava_impl_original falls back when callr errors" , {
44+ skip_if_not_installed(" callr" )
45+ state <- new.env(parent = emptyenv())
46+ state $ captured_env <- NULL
47+
48+ local_mocked_bindings(
49+ r = function (... ) stop(" callr failed" ),
50+ .package = " callr"
51+ )
52+
53+ local_mocked_bindings(
54+ java_subprocess_env = function (java_home , rjava = FALSE ) {
55+ state $ captured_env <- c(
56+ JAVA_HOME = java_home ,
57+ PATH = paste0(java_home , " /bin" )
58+ )
59+ state $ captured_env
60+ },
61+ .package = " rJavaEnv"
62+ )
63+
64+ local_mocked_bindings(
65+ system2 = function (command , args , stdout , stderr , timeout , env ) {
66+ state $ captured_env <- env
67+ c(
68+ " rJava and other rJava/Java-based packages will use Java version: \" 17.0.9\" "
69+ )
70+ },
71+ .package = " base"
72+ )
73+
74+ result <- rJavaEnv ::: ._java_version_check_rjava_impl_original(
75+ java_home = " /mock/java"
76+ )
77+
78+ expect_equal(result $ major_version , " 17" )
79+ expect_equal(state $ captured_env [[" JAVA_HOME" ]], " /mock/java" )
80+ })
81+
82+ test_that(" ._java_version_check_rjava_impl_original falls back when callr output is unusable" , {
83+ skip_if_not_installed(" callr" )
84+
85+ local_mocked_bindings(
86+ r = function (... ) {
87+ list (
88+ java_version = " not-a-version" ,
89+ output = " rJava and other rJava/Java-based packages will use Java version: \" not-a-version\" "
90+ )
91+ },
92+ .package = " callr"
93+ )
94+
95+ local_mocked_bindings(
96+ java_subprocess_env = function (java_home , rjava = FALSE ) {
97+ c(JAVA_HOME = java_home , PATH = paste0(java_home , " /bin" ))
98+ },
99+ .package = " rJavaEnv"
100+ )
101+
102+ local_mocked_bindings(
103+ system2 = function (... ) {
104+ c(
105+ " rJava and other rJava/Java-based packages will use Java version: \" 25.0.2\" "
106+ )
107+ },
108+ .package = " base"
109+ )
110+
111+ result <- rJavaEnv ::: ._java_version_check_rjava_impl_original(
112+ java_home = " /mock/java"
113+ )
114+
115+ expect_equal(result $ major_version , " 25" )
116+ })
117+
38118test_that(" ._java_version_check_rjava_impl_original falls back to Rscript" , {
39119 mock_paths <- c(
40120 " /usr/lib/R/library" ,
@@ -92,3 +172,49 @@ test_that("._java_version_check_rjava_impl_original falls back to Rscript", {
92172 expect_true(grepl(" /home/user/R/x86_64-pc-linux-gnu-library/4.5" , script_text ))
93173 expect_false(any(grepl(" get_libjvm_path <- function" , state $ captured_script )))
94174})
175+
176+ test_that(" ._java_version_check_rjava_impl_original returns FALSE on bad subprocess output" , {
177+ local_mocked_bindings(
178+ requireNamespace = function (pkg , quietly = TRUE ) FALSE ,
179+ .package = " base"
180+ )
181+
182+ local_mocked_bindings(
183+ java_subprocess_env = function (java_home , rjava = FALSE ) {
184+ c(JAVA_HOME = java_home , PATH = paste0(java_home , " /bin" ))
185+ },
186+ .package = " rJavaEnv"
187+ )
188+
189+ local_mocked_bindings(
190+ system2 = function (... ) character (0 ),
191+ .package = " base"
192+ )
193+
194+ expect_false(
195+ rJavaEnv ::: ._java_version_check_rjava_impl_original(java_home = " /mock/java" )
196+ )
197+ })
198+
199+ test_that(" ._java_version_check_rjava_impl_original returns FALSE on subprocess error text" , {
200+ local_mocked_bindings(
201+ requireNamespace = function (pkg , quietly = TRUE ) FALSE ,
202+ .package = " base"
203+ )
204+
205+ local_mocked_bindings(
206+ java_subprocess_env = function (java_home , rjava = FALSE ) {
207+ c(JAVA_HOME = java_home , PATH = paste0(java_home , " /bin" ))
208+ },
209+ .package = " rJavaEnv"
210+ )
211+
212+ local_mocked_bindings(
213+ system2 = function (... ) " Error checking Java version: JVM init failed" ,
214+ .package = " base"
215+ )
216+
217+ expect_false(
218+ rJavaEnv ::: ._java_version_check_rjava_impl_original(java_home = " /mock/java" )
219+ )
220+ })
0 commit comments