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/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.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/parent b/tests/profile/mockrepo/profiles/features/emacs/parent new file mode 100644 index 0000000..ec3f86c --- /dev/null +++ b/tests/profile/mockrepo/profiles/features/emacs/parent @@ -0,0 +1 @@ +../../base \ 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/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..2332c72 --- /dev/null +++ b/tests/profile/read_mock_profile.rs @@ -0,0 +1,58 @@ +use std::env; + +use gentoo_utils::{atom::Atom, repo::Repo, useflag::UseFlag}; +use itertools::Itertools; + +fn main() { + let repo_path = env::args().nth(1).expect("expected path to mock repo"); + let repo = Repo::new(&repo_path).expect("failed to open repo"); + let profile = repo + .evaluate_profile("features/emacs/gui") + .expect("failed to evaluate profile"); + + assert_eq!( + profile.make_defaults()["USE"] + .split_ascii_whitespace() + .sorted() + .collect::>(), + vec!["base", "emacs"] + ); + + assert_eq!( + profile + .packages() + .iter() + .map(Atom::to_string) + .collect::>(), + vec!["app-editors/emacs"] + ); + + let emacs_package_use = profile + .package_use() + .iter() + .find_map(|(atom, flags)| { + if atom.clone().into_cp().to_string() == "app-editors/emacs" { + Some(flags) + } else { + None + } + }) + .expect("failed to read package.use settings for app-editors/emacs"); + + assert_eq!( + emacs_package_use + .iter() + .map(UseFlag::to_string) + .collect::>(), + vec!["default", "gui"] + ); + + assert_eq!( + profile + .use_force() + .iter() + .map(UseFlag::to_string) + .collect::>(), + vec!["default", "gui"] + ); +}