WIP: impl profile evaluation #7
@@ -1 +1,7 @@
|
||||
tests += {meson.current_source_dir() / 'read_all_profiles.rs': []}
|
||||
tests += {
|
||||
meson.current_source_dir() / 'read_mock_profile.rs': [
|
||||
meson.current_source_dir() / 'mockrepo',
|
||||
],
|
||||
}
|
||||
|
||||
|
||||
1
tests/profile/mockrepo/profiles/base/make.defaults
Normal file
1
tests/profile/mockrepo/profiles/base/make.defaults
Normal file
@@ -0,0 +1 @@
|
||||
USE="base"
|
||||
1
tests/profile/mockrepo/profiles/base/use.force
Normal file
1
tests/profile/mockrepo/profiles/base/use.force
Normal file
@@ -0,0 +1 @@
|
||||
base
|
||||
@@ -0,0 +1 @@
|
||||
app-editors/emacs gui
|
||||
@@ -0,0 +1 @@
|
||||
..
|
||||
@@ -0,0 +1 @@
|
||||
gui
|
||||
@@ -0,0 +1 @@
|
||||
USE="emacs"
|
||||
@@ -0,0 +1 @@
|
||||
app-editors/vim
|
||||
@@ -0,0 +1 @@
|
||||
app-editors/emacs default
|
||||
1
tests/profile/mockrepo/profiles/features/emacs/packages
Normal file
1
tests/profile/mockrepo/profiles/features/emacs/packages
Normal file
@@ -0,0 +1 @@
|
||||
*app-editors/emacs
|
||||
1
tests/profile/mockrepo/profiles/features/emacs/use.force
Normal file
1
tests/profile/mockrepo/profiles/features/emacs/use.force
Normal file
@@ -0,0 +1 @@
|
||||
default
|
||||
@@ -0,0 +1,2 @@
|
||||
USE="selinux"
|
||||
SELINUX_TYPE="sys.subj.portage"
|
||||
@@ -0,0 +1 @@
|
||||
*sec-policy/selinux-base
|
||||
@@ -0,0 +1 @@
|
||||
caps
|
||||
@@ -0,0 +1 @@
|
||||
jit
|
||||
@@ -0,0 +1 @@
|
||||
USE="-base"
|
||||
@@ -0,0 +1 @@
|
||||
app-editors/emacs -default
|
||||
3
tests/profile/mockrepo/profiles/gentoo-desktop/parent
Normal file
3
tests/profile/mockrepo/profiles/gentoo-desktop/parent
Normal file
@@ -0,0 +1,3 @@
|
||||
../base
|
||||
../features/selinux
|
||||
../features/emacs/gui
|
||||
1
tests/profile/mockrepo/profiles/gentoo-desktop/use.mask
Normal file
1
tests/profile/mockrepo/profiles/gentoo-desktop/use.mask
Normal file
@@ -0,0 +1 @@
|
||||
-jit
|
||||
1
tests/profile/mockrepo/profiles/repo_name
Normal file
1
tests/profile/mockrepo/profiles/repo_name
Normal file
@@ -0,0 +1 @@
|
||||
mockrepo
|
||||
71
tests/profile/read_mock_profile.rs
Normal file
71
tests/profile/read_mock_profile.rs
Normal file
@@ -0,0 +1,71 @@
|
||||
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 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());
|
||||
}
|
||||
Reference in New Issue
Block a user