Skip to content

Commit 7a193cc

Browse files
committed
Extract jvm_version parsing into a testable helper function
Split the version-string-to-tuple conversion out of jvm_version() into _jvm_version_str_to_tuple() and add unit tests.
1 parent 4f16009 commit 7a193cc

2 files changed

Lines changed: 22 additions & 3 deletions

File tree

src/scyjava/_jvm.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -130,11 +130,15 @@ def jvm_version() -> tuple[int, ...]:
130130
except subprocess.CalledProcessError as e:
131131
raise RuntimeError("System call to java failed") from e
132132

133-
output = output.replace("\n", " ").replace("\r", "")
134-
m = re.match('.* version "([^"]*)"', output)
133+
return _jvm_version_str_to_tuple(output, java)
134+
135+
136+
def _jvm_version_str_to_tuple(java_version_output: str, java: str) -> tuple[int, ...]:
137+
java_version_output = java_version_output.replace("\n", " ").replace("\r", "")
138+
m = re.match('.* version "([^"]*)"', java_version_output)
135139
if not m:
136140
raise RuntimeError(
137-
f"Inscrutable java command output:\n$ {java} -version\n{output}"
141+
f"Inscrutable java command output:\n$ {java} -version\n{java_version_output}"
138142
)
139143

140144
v = m.group(1)

tests/test_jvm_version.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
"""
2+
Tests for functions in _versions submodule.
3+
"""
4+
5+
from scyjava._jvm import _jvm_version_str_to_tuple
6+
7+
8+
def test_jvm_version():
9+
assert _jvm_version_str_to_tuple(' version "17.0.1"', "java") == (17, 0, 1)
10+
assert _jvm_version_str_to_tuple(' version "17.0.18-internal"', "java") == (
11+
17, 0, 18)
12+
assert _jvm_version_str_to_tuple(' version "11.0.9.1-internal"', "java") == (
13+
11, 0, 9, 1)
14+
assert _jvm_version_str_to_tuple(' version "1.8.0_312"', "java") == (1, 8, 0)
15+
assert _jvm_version_str_to_tuple(' version "25"', "java") == (25,)

0 commit comments

Comments
 (0)