1pub mod files;
14pub mod shell;
15pub mod web;
16
17#[cfg(test)]
18mod tests {
19 use lash_core::ToolProvider;
20
21 fn all_manifests() -> Vec<lash_core::ToolManifest> {
22 let mut manifests = Vec::new();
23 manifests.extend(crate::files::edit_provider().tool_manifests());
24 manifests.extend(crate::files::write_provider().tool_manifests());
25 manifests.extend(crate::files::read_file_provider().tool_manifests());
26 manifests.extend(crate::files::glob_provider().tool_manifests());
27 manifests.extend(
28 crate::shell::shell_provider(crate::shell::StandardShell::new()).tool_manifests(),
29 );
30 manifests.extend(crate::web::fetch_url_provider("").tool_manifests());
31 manifests.extend(crate::web::web_search_provider("").tool_manifests());
32 manifests
33 }
34
35 #[cfg(not(feature = "lashlang"))]
36 #[test]
37 fn default_manifests_do_not_include_lashlang_bindings() {
38 for manifest in all_manifests() {
39 assert!(
40 manifest.bindings.is_empty(),
41 "{} unexpectedly had bindings: {:?}",
42 manifest.name,
43 manifest.bindings
44 );
45 }
46 }
47
48 #[cfg(feature = "lashlang")]
49 #[test]
50 fn lashlang_manifests_include_lashlang_bindings() {
51 for manifest in all_manifests() {
52 assert!(
53 manifest
54 .bindings
55 .contains_key(lash_lashlang_runtime::LASHLANG_TOOL_BINDING_KEY),
56 "{} did not include a lashlang binding",
57 manifest.name
58 );
59 }
60 }
61}