workspacer_workspace/
get_crates.rs1crate::ix!();
3
4impl<P,H:CrateHandleInterface<P>> NumCrates for Workspace<P,H>
5where for<'async_trait> P: From<PathBuf> + AsRef<Path> + Send + Sync + 'async_trait
6{
7 fn n_crates(&self) -> usize {
8 self.crates().len()
9 }
10}
11
12#[cfg(test)]
13mod test_num_crates_and_get_crates {
14 use super::*;
15
16 #[traced_test]
17 async fn test_empty_workspace_has_zero_crates() {
18 let path = create_mock_workspace(vec![]).await.expect("Failed to create empty workspace");
20 let ws = Workspace::<PathBuf, CrateHandle>::new(&path).await
24 .expect("Should build an empty workspace object");
25
26 assert_eq!(ws.n_crates(), 0, "No crates => n_crates==0");
28 assert!(ws.crates().is_empty(), "crates() slice should be empty");
29 }
30
31 #[traced_test]
32 async fn test_workspace_with_single_crate() {
33 let path = create_mock_workspace(vec![
35 CrateConfig::new("single_crate").with_src_files()
36 ]).await.expect("Failed to create single-crate workspace");
37
38 let ws = Workspace::<PathBuf,CrateHandle>::new(&path).await
40 .expect("Should parse workspace with 1 crate");
41
42 assert_eq!(ws.n_crates(), 1, "Expected exactly 1 crate");
43 assert_eq!(ws.crates().len(), 1, "crates() slice should have length 1");
44 let the_crate = &ws.crates()[0];
46 let crate_path = the_crate.lock().await.root_dir_path_buf();
47 println!("Single crate path = {}", crate_path.display());
48 }
49
50 #[traced_test]
51 async fn test_workspace_with_multiple_crates() {
52 let path = create_mock_workspace(vec![
53 CrateConfig::new("crateAlpha").with_src_files(),
54 CrateConfig::new("crateBeta").with_test_files(),
55 ]).await.expect("Failed to create multi-crate workspace");
56
57 let ws = Workspace::<PathBuf,CrateHandle>::new(&path).await
58 .expect("Should parse multi-crate workspace");
59
60 assert_eq!(ws.n_crates(), 2, "Two crates => n_crates()==2");
61 let slice = ws.crates();
62 assert_eq!(slice.len(), 2, "crates() slice length=2");
63 }
64}