Coverage for tests/unit_tests/commands/test_apio_packages.py: 100%
52 statements
« prev ^ index » next coverage.py v7.16.1, created at 2026-09-23 03:53 +0000
« prev ^ index » next coverage.py v7.16.1, created at 2026-09-23 03:53 +0000
1"""Test for the "apio packages" command."""
3from os import listdir, rename
4from tests.conftest import ApioRunner
5from apio.commands.apio import apio_top_cli as apio
6from apio.common.apio_console import cunstyle
9def test_packages(apio_runner: ApioRunner):
10 """Test "apio packages" with different parameters"""
12 with apio_runner.in_sandbox() as sb:
14 # -- Execute "apio packages"
15 result = sb.invoke_apio_cmd(apio, ["packages"])
16 sb.assert_result_ok(result)
17 assert "Subcommands:" in result.output
18 assert "apio packages install" in cunstyle(result.output)
19 assert "apio packages list" in cunstyle(result.output)
20 assert result.output != cunstyle(result.output) # Colored.
23def test_packages_list(apio_runner: ApioRunner):
24 """Test "apio packages" with different parameters"""
26 with apio_runner.in_sandbox() as sb:
28 # -- Execute "apio packages list"
29 result = sb.invoke_apio_cmd(apio, ["packages", "list"])
30 sb.assert_result_ok(result)
33def test_packages_install(apio_runner: ApioRunner):
34 """Tests listing, installation and uninstallation of packages."""
36 with apio_runner.in_sandbox() as sb:
38 # -- Run 'apio packages list'
39 result = sb.invoke_apio_cmd(apio, ["packages", "list"])
40 sb.assert_result_ok(result)
41 assert "definitions" in result.output
42 assert "oss-cad-suite" in result.output
44 # -- Run 'apio packages install'.
45 # -- Both 'definitions' and 'oss-cad-suite' should exist, and
46 # -- possibly others, depending on the platform.
47 result = sb.invoke_apio_cmd(apio, ["packages", "install"])
48 sb.assert_result_ok(result)
49 assert "All Apio packages are installed OK" in result.output
50 assert listdir(sb.packages_dir / "definitions/examples/alhambra-ii")
51 assert listdir(sb.packages_dir / "oss-cad-suite/bin")
53 # -- Delete a file from the definitions package, we will use it as an
54 # -- indicator for the reinstallation of the package.
55 marker_file = (
56 sb.packages_dir / "definitions/examples/alhambra-ii/ledon/ledon.v"
57 )
58 assert marker_file.is_file()
59 marker_file.unlink()
60 assert not marker_file.exists()
62 # -- Run 'apio packages install'.
63 # -- This should not do anything since it's considered to be installed.
64 result = sb.invoke_apio_cmd(apio, ["packages", "install"])
65 sb.assert_result_ok(result)
66 assert "Package 'definitions' installed" not in result.output
67 assert not marker_file.exists()
69 # -- Run 'apio packages install --force'
70 # -- This should recover the file.
71 result = sb.invoke_apio_cmd(apio, ["packages", "install", "--force"])
72 sb.assert_result_ok(result)
73 assert "Package 'definitions' installed" in result.output
74 assert marker_file.is_file()
76 # -- Break the definitions package by renaming it. This also creates an
77 # -- orphan dir.
78 definitions_package_dir = sb.packages_dir / "definitions"
79 bad_package_dir = sb.packages_dir / "unknown-package"
80 rename(definitions_package_dir, bad_package_dir)
81 assert not definitions_package_dir.exists()
82 assert bad_package_dir.is_dir()
84 # -- Run 'apio packages install'. This should fix everything.
85 result = sb.invoke_apio_cmd(apio, ["packages", "install"])
86 sb.assert_result_ok(result)
87 assert "Uninstalling broken package 'definitions'" in result.output
88 assert (
89 "Deleting unknown package dir 'unknown-package'" in result.output
90 )
91 assert "Package 'definitions' installed successfully" in result.output
92 assert definitions_package_dir.is_dir()
93 assert marker_file.exists()
94 assert not bad_package_dir.exists()