Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
SimStadt
simstadtpy
Commits
f1d1d929
Commit
f1d1d929
authored
May 24, 2026
by
Eric Duminil
Browse files
Removing stuff
parent
6d4cd584
Changes
1
Hide whitespace changes
Inline
Side-by-side
tests/test_install.py
View file @
f1d1d929
"""Tests for the simstadt --install command."""
"""Tests for the simstadt --install command."""
import
io
import
sys
import
sys
import
zipfile
from
pathlib
import
Path
from
pathlib
import
Path
from
unittest.mock
import
MagicMock
,
patch
from
unittest.mock
import
MagicMock
,
patch
import
pytest
import
pytest
from
simstadt.cli
import
app
,
build_parser
from
simstadt.cli
import
app
from
simstadt.install
import
_get_java_version
,
_parse_simstadt_name
from
simstadt.install
import
_get_java_version
,
_parse_simstadt_name
########################
def
_make_test_zip
(
version
=
"0.14.0-SNAPSHOT"
,
branch
=
"develop"
,
rev
=
"4431e10"
,
date
=
"20260520"
):
# Get SimStadt name #
manifest
=
f
"Implementation-Version:
{
version
}
(
{
branch
}
, rev.
{
rev
}
,
{
date
}
\n
)
\n
"
########################
jar_buf
=
io
.
BytesIO
()
with
zipfile
.
ZipFile
(
jar_buf
,
"w"
)
as
jar
:
jar
.
writestr
(
"META-INF/MANIFEST.MF"
,
manifest
)
zip_buf
=
io
.
BytesIO
()
with
zipfile
.
ZipFile
(
zip_buf
,
"w"
)
as
zf
:
zf
.
writestr
(
f
"lib/simstadt-desktop-
{
version
}
.jar"
,
jar_buf
.
getvalue
())
info
=
zipfile
.
ZipInfo
(
"SimStadt.sh"
)
info
.
external_attr
=
0o755
<<
16
zf
.
writestr
(
info
,
"#!/bin/bash
\n
"
)
return
zip_buf
.
getvalue
()
# ---------------------------------------------------------------------------
# _parse_simstadt_name
# ---------------------------------------------------------------------------
def
test_parse_simstadt_name
():
def
test_parse_simstadt_name
():
manifest
=
"Implementation-Version: 0.14.0-SNAPSHOT (develop, rev. 4431e10, 20260520
\n
)
\n
"
manifest
=
(
assert
_parse_simstadt_name
(
manifest
)
==
"SimStadt2_0.14.0-SNAPSHOT_develop_20260520_4431e10"
"Implementation-Version: 0.14.0-SNAPSHOT (develop, rev. 4431e10, 20260520
\n
)
\n
"
)
assert
(
_parse_simstadt_name
(
manifest
)
==
"SimStadt2_0.14.0-SNAPSHOT_develop_20260520_4431e10"
)
def
test_parse_simstadt_name_invalid
():
def
test_parse_simstadt_name_invalid
():
...
@@ -41,14 +29,16 @@ def test_parse_simstadt_name_invalid():
...
@@ -41,14 +29,16 @@ def test_parse_simstadt_name_invalid():
_parse_simstadt_name
(
"Manifest-Version: 1.0
\n
Created-By: Maven
\n
"
)
_parse_simstadt_name
(
"Manifest-Version: 1.0
\n
Created-By: Maven
\n
"
)
#
---------------------------------------------------------------------------
#
#######################
#
_get_j
ava
_v
ersion
#
Test J
ava
V
ersion
#
#
---------------------------------------------------------------------------
#
#######################
def
test_get_java_version_17
():
def
test_get_java_version_17
():
with
patch
(
"simstadt.install.subprocess.run"
)
as
mock_run
:
with
patch
(
"simstadt.install.subprocess.run"
)
as
mock_run
:
mock_run
.
return_value
=
MagicMock
(
stderr
=
'openjdk version "17.0.3" 2023-04-18
\n
'
)
mock_run
.
return_value
=
MagicMock
(
stderr
=
'openjdk version "17.0.3" 2023-04-18
\n
'
)
assert
_get_java_version
()
==
17
assert
_get_java_version
()
==
17
...
@@ -69,95 +59,6 @@ def test_get_java_version_unrecognised_output():
...
@@ -69,95 +59,6 @@ def test_get_java_version_unrecognised_output():
assert
_get_java_version
()
is
None
assert
_get_java_version
()
is
None
# ---------------------------------------------------------------------------
# cmd_install
# ---------------------------------------------------------------------------
def
test_install_new_version
(
monkeypatch
,
capsys
,
tmp_path
):
desktop
=
tmp_path
/
"Desktop"
desktop
.
mkdir
()
zip_bytes
=
_make_test_zip
()
def
mock_urlretrieve
(
url
,
dest
):
Path
(
dest
).
write_bytes
(
zip_bytes
)
monkeypatch
.
setattr
(
"urllib.request.urlretrieve"
,
mock_urlretrieve
)
monkeypatch
.
setattr
(
"simstadt.install._get_java_version"
,
lambda
:
17
)
monkeypatch
.
setattr
(
Path
,
"home"
,
lambda
:
tmp_path
)
monkeypatch
.
setattr
(
sys
,
"argv"
,
[
"simstadt"
,
"--install"
])
app
()
out
,
_
=
capsys
.
readouterr
()
assert
"Installed:"
in
out
dest
=
desktop
/
"SimStadt2_0.14.0-SNAPSHOT_develop_20260520_4431e10"
assert
dest
.
is_dir
()
sh
=
dest
/
"SimStadt.sh"
assert
sh
.
exists
()
assert
sh
.
stat
().
st_mode
&
0o111
# executable bits preserved from ZIP
def
test_install_already_installed
(
monkeypatch
,
capsys
,
tmp_path
):
desktop
=
tmp_path
/
"Desktop"
desktop
.
mkdir
()
(
desktop
/
"SimStadt2_0.14.0-SNAPSHOT_develop_20260520_4431e10"
).
mkdir
()
zip_bytes
=
_make_test_zip
()
def
mock_urlretrieve
(
url
,
dest
):
Path
(
dest
).
write_bytes
(
zip_bytes
)
monkeypatch
.
setattr
(
"urllib.request.urlretrieve"
,
mock_urlretrieve
)
monkeypatch
.
setattr
(
Path
,
"home"
,
lambda
:
tmp_path
)
monkeypatch
.
setattr
(
sys
,
"argv"
,
[
"simstadt"
,
"--install"
])
app
()
out
,
_
=
capsys
.
readouterr
()
assert
"Already installed"
in
out
def
test_install_warns_missing_java
(
monkeypatch
,
capsys
,
tmp_path
):
desktop
=
tmp_path
/
"Desktop"
desktop
.
mkdir
()
zip_bytes
=
_make_test_zip
()
def
mock_urlretrieve
(
url
,
dest
):
Path
(
dest
).
write_bytes
(
zip_bytes
)
monkeypatch
.
setattr
(
"urllib.request.urlretrieve"
,
mock_urlretrieve
)
monkeypatch
.
setattr
(
"simstadt.install._get_java_version"
,
lambda
:
None
)
monkeypatch
.
setattr
(
Path
,
"home"
,
lambda
:
tmp_path
)
monkeypatch
.
setattr
(
sys
,
"argv"
,
[
"simstadt"
,
"--install"
])
app
()
_
,
err
=
capsys
.
readouterr
()
assert
"Java not found"
in
err
assert
"bell-sw.com"
in
err
def
test_install_warns_old_java
(
monkeypatch
,
capsys
,
tmp_path
):
desktop
=
tmp_path
/
"Desktop"
desktop
.
mkdir
()
zip_bytes
=
_make_test_zip
()
def
mock_urlretrieve
(
url
,
dest
):
Path
(
dest
).
write_bytes
(
zip_bytes
)
monkeypatch
.
setattr
(
"urllib.request.urlretrieve"
,
mock_urlretrieve
)
monkeypatch
.
setattr
(
"simstadt.install._get_java_version"
,
lambda
:
11
)
monkeypatch
.
setattr
(
Path
,
"home"
,
lambda
:
tmp_path
)
monkeypatch
.
setattr
(
sys
,
"argv"
,
[
"simstadt"
,
"--install"
])
app
()
_
,
err
=
capsys
.
readouterr
()
assert
"Java 11"
in
err
assert
"bell-sw.com"
in
err
def
test_install_parser_flag
():
args
=
build_parser
().
parse_args
([
"--install"
])
assert
args
.
install
is
True
def
test_install_no_desktop
(
monkeypatch
,
capsys
,
tmp_path
):
def
test_install_no_desktop
(
monkeypatch
,
capsys
,
tmp_path
):
monkeypatch
.
setattr
(
Path
,
"home"
,
lambda
:
tmp_path
)
monkeypatch
.
setattr
(
Path
,
"home"
,
lambda
:
tmp_path
)
monkeypatch
.
setattr
(
sys
,
"argv"
,
[
"simstadt"
,
"--install"
])
monkeypatch
.
setattr
(
sys
,
"argv"
,
[
"simstadt"
,
"--install"
])
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment