1pub use fallow_types::results::{
3 AnalysisResults, CircularDependency, DependencyLocation, DuplicateExport, ExportUsage,
4 ReferenceLocation, TypeOnlyDependency, UnlistedDependency, UnresolvedImport, UnusedDependency,
5 UnusedExport, UnusedFile, UnusedMember,
6};
7
8#[cfg(test)]
9mod tests {
10 use std::path::PathBuf;
11
12 use super::*;
13 use crate::extract::MemberKind;
14
15 #[test]
16 fn empty_results_no_issues() {
17 let results = AnalysisResults::default();
18 assert_eq!(results.total_issues(), 0);
19 assert!(!results.has_issues());
20 }
21
22 #[test]
23 fn results_with_unused_file() {
24 let mut results = AnalysisResults::default();
25 results.unused_files.push(UnusedFile {
26 path: PathBuf::from("test.ts"),
27 });
28 assert_eq!(results.total_issues(), 1);
29 assert!(results.has_issues());
30 }
31
32 #[test]
33 fn results_with_unused_export() {
34 let mut results = AnalysisResults::default();
35 results.unused_exports.push(UnusedExport {
36 path: PathBuf::from("test.ts"),
37 export_name: "foo".to_string(),
38 is_type_only: false,
39 line: 1,
40 col: 0,
41 span_start: 0,
42 is_re_export: false,
43 });
44 assert_eq!(results.total_issues(), 1);
45 assert!(results.has_issues());
46 }
47
48 #[test]
49 fn results_total_counts_all_types() {
50 let mut results = AnalysisResults::default();
51 results.unused_files.push(UnusedFile {
52 path: PathBuf::from("a.ts"),
53 });
54 results.unused_exports.push(UnusedExport {
55 path: PathBuf::from("b.ts"),
56 export_name: "x".to_string(),
57 is_type_only: false,
58 line: 1,
59 col: 0,
60 span_start: 0,
61 is_re_export: false,
62 });
63 results.unused_types.push(UnusedExport {
64 path: PathBuf::from("c.ts"),
65 export_name: "T".to_string(),
66 is_type_only: true,
67 line: 1,
68 col: 0,
69 span_start: 0,
70 is_re_export: false,
71 });
72 results.unused_dependencies.push(UnusedDependency {
73 package_name: "dep".to_string(),
74 location: DependencyLocation::Dependencies,
75 path: PathBuf::from("package.json"),
76 });
77 results.unused_dev_dependencies.push(UnusedDependency {
78 package_name: "dev".to_string(),
79 location: DependencyLocation::DevDependencies,
80 path: PathBuf::from("package.json"),
81 });
82 results.unused_enum_members.push(UnusedMember {
83 path: PathBuf::from("d.ts"),
84 parent_name: "E".to_string(),
85 member_name: "A".to_string(),
86 kind: MemberKind::EnumMember,
87 line: 1,
88 col: 0,
89 });
90 results.unused_class_members.push(UnusedMember {
91 path: PathBuf::from("e.ts"),
92 parent_name: "C".to_string(),
93 member_name: "m".to_string(),
94 kind: MemberKind::ClassMethod,
95 line: 1,
96 col: 0,
97 });
98 results.unresolved_imports.push(UnresolvedImport {
99 path: PathBuf::from("f.ts"),
100 specifier: "./missing".to_string(),
101 line: 1,
102 col: 0,
103 });
104 results.unlisted_dependencies.push(UnlistedDependency {
105 package_name: "unlisted".to_string(),
106 imported_from: vec![PathBuf::from("g.ts")],
107 });
108 results.duplicate_exports.push(DuplicateExport {
109 export_name: "dup".to_string(),
110 locations: vec![PathBuf::from("h.ts"), PathBuf::from("i.ts")],
111 });
112
113 assert_eq!(results.total_issues(), 10);
114 assert!(results.has_issues());
115 }
116}