Coverage for tests / unit_tests / commands / test_apio_packages.py: 100%
52 statements
« prev ^ index » next coverage.py v7.13.0, created at 2025-12-24 01:53 +0000
« prev ^ index » next coverage.py v7.13.0, created at 2025-12-24 01: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 update" in cunstyle(result.output)
19 assert "apio packages list" in cunstyle(result.output)
20 assert result.output != cunstyle(result.output) # Colored.
22 # -- Execute "apio packages list"
23 result = sb.invoke_apio_cmd(apio, ["packages", "list"])
24 sb.assert_result_ok(result)
27def test_packages_slow(apio_runner: ApioRunner):
28 """Tests listing, installation and uninstallation of packages."""
30 with apio_runner.in_sandbox() as sb:
32 # -- Run 'apio packages list'
33 result = sb.invoke_apio_cmd(apio, ["packages", "list"])
34 sb.assert_result_ok(result)
35 assert "definitions" in result.output
36 assert "examples" in result.output
37 assert "oss-cad-suite" in result.output
39 # -- Run 'apio packages update'.
40 # -- Both 'examples' and 'oss-cad-suite' should exist, and
41 # -- possibly others, depending on the platform.
42 result = sb.invoke_apio_cmd(apio, ["packages", "update"])
43 sb.assert_result_ok(result)
44 assert "All Apio packages are installed OK" in result.output
45 assert listdir(sb.packages_dir / "definitions")
46 assert listdir(sb.packages_dir / "examples/alhambra-ii")
47 assert listdir(sb.packages_dir / "oss-cad-suite/bin")
49 # -- Delete a file from the examples package, we will use it as an
50 # -- indicator for the reinstallation of the package.
51 marker_file = sb.packages_dir / "examples/alhambra-ii/ledon/ledon.v"
52 assert marker_file.is_file()
53 marker_file.unlink()
54 assert not marker_file.exists()
56 # -- Run 'apio packages update'.
57 # -- This should not do anything since it's considered to be installed.
58 result = sb.invoke_apio_cmd(apio, ["packages", "update"])
59 sb.assert_result_ok(result)
60 assert "Package 'examples' installed" not in result.output
61 assert not marker_file.exists()
63 # -- Run 'apio packages update --force'
64 # -- This should recover the file.
65 result = sb.invoke_apio_cmd(apio, ["packages", "update", "--force"])
66 sb.assert_result_ok(result)
67 assert "Package 'examples' installed" in result.output
68 assert marker_file.is_file()
70 # -- Break the examples package by renaming it. This also creates an
71 # -- orphan dir.
72 example_package_dir = sb.packages_dir / "examples"
73 bad_package_dir = sb.packages_dir / "unknown-package"
74 rename(example_package_dir, bad_package_dir)
75 assert not example_package_dir.exists()
76 assert bad_package_dir.is_dir()
78 # -- Run 'apio packages update'. This should fix everything.
79 result = sb.invoke_apio_cmd(apio, ["packages", "update"])
80 sb.assert_result_ok(result)
81 assert "Uninstalling broken package 'examples'" in result.output
82 assert (
83 "Deleting unknown package dir 'unknown-package'" in result.output
84 )
85 assert "Package 'examples' installed successfully" in result.output
86 assert example_package_dir.is_dir()
87 assert marker_file.exists()
88 assert not bad_package_dir.exists()