diff --git a/tests/profile/meson.build b/tests/profile/meson.build index 2a2a541..47ab3bb 100644 --- a/tests/profile/meson.build +++ b/tests/profile/meson.build @@ -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', + ], +} + diff --git a/tests/profile/mockrepo/profiles/base/make.defaults b/tests/profile/mockrepo/profiles/base/make.defaults new file mode 100644 index 0000000..7e93612 --- /dev/null +++ b/tests/profile/mockrepo/profiles/base/make.defaults @@ -0,0 +1 @@ +USE="base" \ No newline at end of file diff --git a/tests/profile/mockrepo/profiles/base/use.force b/tests/profile/mockrepo/profiles/base/use.force new file mode 100644 index 0000000..8681f8b --- /dev/null +++ b/tests/profile/mockrepo/profiles/base/use.force @@ -0,0 +1 @@ +base \ No newline at end of file diff --git a/tests/profile/mockrepo/profiles/features/emacs/gui/package.use b/tests/profile/mockrepo/profiles/features/emacs/gui/package.use new file mode 100644 index 0000000..71f6be2 --- /dev/null +++ b/tests/profile/mockrepo/profiles/features/emacs/gui/package.use @@ -0,0 +1 @@ +app-editors/emacs gui \ No newline at end of file diff --git a/tests/profile/mockrepo/profiles/features/emacs/gui/parent b/tests/profile/mockrepo/profiles/features/emacs/gui/parent new file mode 100644 index 0000000..a96aa0e --- /dev/null +++ b/tests/profile/mockrepo/profiles/features/emacs/gui/parent @@ -0,0 +1 @@ +.. \ No newline at end of file diff --git a/tests/profile/mockrepo/profiles/features/emacs/gui/use.force b/tests/profile/mockrepo/profiles/features/emacs/gui/use.force new file mode 100644 index 0000000..f9242d2 --- /dev/null +++ b/tests/profile/mockrepo/profiles/features/emacs/gui/use.force @@ -0,0 +1 @@ +gui \ No newline at end of file diff --git a/tests/profile/mockrepo/profiles/features/emacs/make.defaults b/tests/profile/mockrepo/profiles/features/emacs/make.defaults new file mode 100644 index 0000000..76bbc0a --- /dev/null +++ b/tests/profile/mockrepo/profiles/features/emacs/make.defaults @@ -0,0 +1 @@ +USE="emacs" \ No newline at end of file diff --git a/tests/profile/mockrepo/profiles/features/emacs/package.mask b/tests/profile/mockrepo/profiles/features/emacs/package.mask new file mode 100644 index 0000000..11ca885 --- /dev/null +++ b/tests/profile/mockrepo/profiles/features/emacs/package.mask @@ -0,0 +1 @@ +app-editors/vim \ No newline at end of file diff --git a/tests/profile/mockrepo/profiles/features/emacs/package.use b/tests/profile/mockrepo/profiles/features/emacs/package.use new file mode 100644 index 0000000..ca6f712 --- /dev/null +++ b/tests/profile/mockrepo/profiles/features/emacs/package.use @@ -0,0 +1 @@ +app-editors/emacs default \ No newline at end of file diff --git a/tests/profile/mockrepo/profiles/features/emacs/packages b/tests/profile/mockrepo/profiles/features/emacs/packages new file mode 100644 index 0000000..2f4b446 --- /dev/null +++ b/tests/profile/mockrepo/profiles/features/emacs/packages @@ -0,0 +1 @@ +*app-editors/emacs \ No newline at end of file diff --git a/tests/profile/mockrepo/profiles/features/emacs/use.force b/tests/profile/mockrepo/profiles/features/emacs/use.force new file mode 100644 index 0000000..331d858 --- /dev/null +++ b/tests/profile/mockrepo/profiles/features/emacs/use.force @@ -0,0 +1 @@ +default \ No newline at end of file diff --git a/tests/profile/mockrepo/profiles/features/selinux/make.defaults b/tests/profile/mockrepo/profiles/features/selinux/make.defaults new file mode 100644 index 0000000..6abe718 --- /dev/null +++ b/tests/profile/mockrepo/profiles/features/selinux/make.defaults @@ -0,0 +1,2 @@ +USE="selinux" +SELINUX_TYPE="sys.subj.portage" \ No newline at end of file diff --git a/tests/profile/mockrepo/profiles/features/selinux/packages b/tests/profile/mockrepo/profiles/features/selinux/packages new file mode 100644 index 0000000..920d332 --- /dev/null +++ b/tests/profile/mockrepo/profiles/features/selinux/packages @@ -0,0 +1 @@ +*sec-policy/selinux-base \ No newline at end of file diff --git a/tests/profile/mockrepo/profiles/features/selinux/use.force b/tests/profile/mockrepo/profiles/features/selinux/use.force new file mode 100644 index 0000000..767c305 --- /dev/null +++ b/tests/profile/mockrepo/profiles/features/selinux/use.force @@ -0,0 +1 @@ +caps \ No newline at end of file diff --git a/tests/profile/mockrepo/profiles/features/selinux/use.mask b/tests/profile/mockrepo/profiles/features/selinux/use.mask new file mode 100644 index 0000000..ce02645 --- /dev/null +++ b/tests/profile/mockrepo/profiles/features/selinux/use.mask @@ -0,0 +1 @@ +jit \ No newline at end of file diff --git a/tests/profile/mockrepo/profiles/gentoo-desktop/make.defaults b/tests/profile/mockrepo/profiles/gentoo-desktop/make.defaults new file mode 100644 index 0000000..f767bd0 --- /dev/null +++ b/tests/profile/mockrepo/profiles/gentoo-desktop/make.defaults @@ -0,0 +1 @@ +USE="-base" \ No newline at end of file diff --git a/tests/profile/mockrepo/profiles/gentoo-desktop/package.use b/tests/profile/mockrepo/profiles/gentoo-desktop/package.use new file mode 100644 index 0000000..39a006d --- /dev/null +++ b/tests/profile/mockrepo/profiles/gentoo-desktop/package.use @@ -0,0 +1 @@ +app-editors/emacs -default \ No newline at end of file diff --git a/tests/profile/mockrepo/profiles/gentoo-desktop/parent b/tests/profile/mockrepo/profiles/gentoo-desktop/parent new file mode 100644 index 0000000..eebec22 --- /dev/null +++ b/tests/profile/mockrepo/profiles/gentoo-desktop/parent @@ -0,0 +1,3 @@ +../base +../features/selinux +../features/emacs/gui \ No newline at end of file diff --git a/tests/profile/mockrepo/profiles/gentoo-desktop/use.mask b/tests/profile/mockrepo/profiles/gentoo-desktop/use.mask new file mode 100644 index 0000000..7fff956 --- /dev/null +++ b/tests/profile/mockrepo/profiles/gentoo-desktop/use.mask @@ -0,0 +1 @@ +-jit \ No newline at end of file diff --git a/tests/profile/mockrepo/profiles/repo_name b/tests/profile/mockrepo/profiles/repo_name new file mode 100644 index 0000000..e1c92af --- /dev/null +++ b/tests/profile/mockrepo/profiles/repo_name @@ -0,0 +1 @@ +mockrepo \ No newline at end of file diff --git a/tests/profile/read_mock_profile.rs b/tests/profile/read_mock_profile.rs new file mode 100644 index 0000000..82c3c1c --- /dev/null +++ b/tests/profile/read_mock_profile.rs @@ -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::>(); + + assert_eq!(r#use, vec!["emacs", "selinux",]); + + let packages = profile + .packages() + .iter() + .map(Atom::to_string) + .sorted() + .collect::>(); + + assert_eq!( + packages, + vec!["app-editors/emacs", "sec-policy/selinux-base"] + ); + + let packages_mask = profile + .package_mask() + .iter() + .map(Atom::to_string) + .sorted() + .collect::>(); + + 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::>(); + + assert_eq!(emacs_use, vec!["gui"]); + + let use_force = profile + .use_force() + .iter() + .map(UseFlag::to_string) + .sorted() + .collect::>(); + + assert_eq!(use_force, vec!["base", "caps", "default", "gui"]); + + assert!(profile.use_mask().is_empty()); +}