1pub mod packs;
2
3#[cfg(test)]
4mod test_util {
5    use configuration::Configuration;
6    use packs::parsing::ruby::zeitwerk::get_zeitwerk_constant_resolver;
7    use std::collections::{HashMap, HashSet};
8    use std::path::PathBuf;
9
10    use packs::configuration;
11
12    use crate::packs::configuration::from_raw;
13    use crate::packs::constant_resolver::ConstantResolver;
14    use crate::packs::pack::Pack;
15    use crate::packs::raw_configuration::RawConfiguration;
16    use crate::packs::walk_directory::WalkDirectoryResult;
17    use crate::packs::{self};
18
19    pub const SIMPLE_APP: &str = "tests/fixtures/simple_app";
20
21    pub fn get_absolute_root(fixture_name: &str) -> PathBuf {
22        PathBuf::from(fixture_name).canonicalize().unwrap()
23    }
24
25    pub fn get_zeitwerk_constant_resolver_for_fixture(
26        fixture_name: &str,
27    ) -> anyhow::Result<Box<dyn ConstantResolver>> {
28        let absolute_root = get_absolute_root(fixture_name);
29        let configuration = configuration::get(&absolute_root, &10)?;
30
31        Ok(get_zeitwerk_constant_resolver(
32            &configuration.pack_set,
33            &configuration.constant_resolver_configuration(),
34        ))
35    }
36
37    #[allow(clippy::derivable_impls)]
41    impl Default for Pack {
42        fn default() -> Self {
43            Self {
44                yml: Default::default(),
45                name: Default::default(),
46                relative_path: Default::default(),
47                dependencies: Default::default(),
48                ignored_dependencies: Default::default(),
49                ignored_private_constants: Default::default(),
50                private_constants: Default::default(),
51                package_todo: Default::default(),
52                visible_to: Default::default(),
53                public_folder: Default::default(),
54                layer: Default::default(),
55                enforce_dependencies: Default::default(),
56                enforce_privacy: Default::default(),
57                enforce_visibility: Default::default(),
58                enforce_folder_privacy: Default::default(),
59                enforce_folder_visibility: None,
60                enforce_layers: Default::default(),
61                client_keys: Default::default(),
62                owner: Default::default(),
63                enforcement_globs_ignore: Default::default(),
64            }
65        }
66    }
67
68    impl Default for Configuration {
69        fn default() -> Self {
70            let default_absolute_root = std::env::current_dir().unwrap();
71            let root_pack = Pack {
72                name: ".".to_owned(),
73                ..Pack::default()
74            };
75
76            let included_packs: HashSet<Pack> =
77                vec![root_pack].into_iter().collect();
78
79            let walk_directory_result = WalkDirectoryResult {
80                included_files: HashSet::new(),
81                included_packs,
82                owning_package_yml_for_file: HashMap::new(),
83            };
84            from_raw(
85                &default_absolute_root,
86                RawConfiguration::default(),
87                walk_directory_result,
88                &0,
89            )
90            .unwrap() }
92    }
93}