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

1"""Test for the "apio packages" command.""" 

2 

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 

7 

8 

9def test_packages(apio_runner: ApioRunner): 

10 """Test "apio packages" with different parameters""" 

11 

12 with apio_runner.in_sandbox() as sb: 

13 

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. 

21 

22 

23def test_packages_list(apio_runner: ApioRunner): 

24 """Test "apio packages" with different parameters""" 

25 

26 with apio_runner.in_sandbox() as sb: 

27 

28 # -- Execute "apio packages list" 

29 result = sb.invoke_apio_cmd(apio, ["packages", "list"]) 

30 sb.assert_result_ok(result) 

31 

32 

33def test_packages_install(apio_runner: ApioRunner): 

34 """Tests listing, installation and uninstallation of packages.""" 

35 

36 with apio_runner.in_sandbox() as sb: 

37 

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 

43 

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") 

52 

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() 

61 

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() 

68 

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() 

75 

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() 

83 

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()