summaryrefslogtreecommitdiff
path: root/tests/profile/read_mock_profile.rs
blob: 440dce23b7464858fcf24bad05fdcbc852d05fe2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
use std::env::args;

use gentoo_utils::{atom::Atom, repo::Repo, useflag::UseFlag};
use itertools::Itertools;

fn main() {
    let repo_path = args()
        .nth(1)
        .expect("expected path to mockrepo as first argument");
    let repo = Repo::new(&repo_path).expect("failed to read repo");

    let global_package_mask = repo
        .package_mask()
        .iter()
        .map(Atom::to_string)
        .sorted()
        .collect::<Vec<_>>();

    assert_eq!(global_package_mask, vec!["app-editors/vim"]);

    assert_eq!(
        repo.arch_list()
            .iter()
            .map(|arch| arch.get())
            .collect::<Vec<_>>(),
        vec!["amd64", "aarch64"]
    );

    let profile = repo
        .evaluate_profile("gentoo-desktop")
        .expect("failed to evaluate profile");

    let r#use = profile.make_defaults()["USE"]
        .split_ascii_whitespace()
        .sorted()
        .collect::<Vec<_>>();

    assert_eq!(r#use, vec!["emacs", "selinux",]);

    let packages = profile
        .packages()
        .iter()
        .map(Atom::to_string)
        .sorted()
        .collect::<Vec<_>>();

    assert_eq!(
        packages,
        vec!["app-editors/emacs", "sec-policy/selinux-base"]
    );

    let packages_mask = profile
        .package_mask()
        .iter()
        .map(Atom::to_string)
        .sorted()
        .collect::<Vec<_>>();

    assert_eq!(packages_mask, vec!["app-editors/vim"]);

    let emacs_use = profile
        .package_use()
        .iter()
        .find_map(|(atom, flags)| {
            if atom.clone().into_cp().to_string() == "app-editors/emacs" {
                Some(flags)
            } else {
                None
            }
        })
        .unwrap()
        .iter()
        .map(UseFlag::to_string)
        .sorted()
        .collect::<Vec<_>>();

    assert_eq!(emacs_use, vec!["gui"]);

    let use_force = profile
        .use_force()
        .iter()
        .map(UseFlag::to_string)
        .sorted()
        .collect::<Vec<_>>();

    assert_eq!(use_force, vec!["base", "caps", "default", "gui"]);

    assert!(profile.use_mask().is_empty());
}