Skip to content

Commit 62d82b2

Browse files
committed
test: add tests for splitter, context, sanitizer quality improvements
- Update test helpers for Arc<String> diffs and HashMap content API - Add splitter tests: diff-shape clustering, symbol dependency merge, category separation, scored support file assignment, sub-split - Add context tests: primary change detection, metadata breaking signals, symbol tri-state, evidence flags, subject budget - Add sanitizer tests: subject specificity validator, generic verb+noun detection, CommitValidator rule 6
1 parent 513b890 commit 62d82b2

5 files changed

Lines changed: 740 additions & 25 deletions

File tree

tests/analyzer.rs

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22
//
33
// SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0
44

5-
use std::path::{Path, PathBuf};
5+
use std::collections::HashMap;
6+
use std::path::PathBuf;
7+
use std::sync::Arc;
68

79
use commitbee::domain::{ChangeStatus, FileCategory, FileChange, SymbolKind};
810
use commitbee::services::analyzer::{AnalyzerService, DiffHunk};
@@ -13,7 +15,7 @@ fn make_file_change(path: &str, diff: &str, additions: usize, deletions: usize)
1315
FileChange {
1416
path: PathBuf::from(path),
1517
status: ChangeStatus::Added,
16-
diff: diff.to_string(),
18+
diff: Arc::new(diff.to_string()),
1719
additions,
1820
deletions,
1921
category: FileCategory::from_path(&PathBuf::from(path)),
@@ -159,11 +161,11 @@ fn extract_symbols_rust_function() {
159161

160162
let staged = "pub fn my_function() {\n println!(\"hello\");\n}\n";
161163

162-
let staged_content = |_: &Path| -> Option<String> { Some(staged.to_string()) };
163-
let head_content = |_: &Path| -> Option<String> { None };
164+
let staged_map = HashMap::from([(PathBuf::from("src/new_module.rs"), staged.to_string())]);
165+
let head_map = HashMap::new();
164166

165-
let mut analyzer = AnalyzerService::new().expect("AnalyzerService::new() should succeed");
166-
let symbols = analyzer.extract_symbols(&[change], &staged_content, &head_content);
167+
let analyzer = AnalyzerService::new().expect("AnalyzerService::new() should succeed");
168+
let symbols = analyzer.extract_symbols(&[change], &staged_map, &head_map);
167169

168170
assert!(
169171
!symbols.is_empty(),
@@ -187,11 +189,11 @@ fn extract_symbols_rust_struct() {
187189

188190
let staged = "pub struct MyConfig {\n pub name: String,\n pub value: i32,\n}\n";
189191

190-
let staged_content = |_: &Path| -> Option<String> { Some(staged.to_string()) };
191-
let head_content = |_: &Path| -> Option<String> { None };
192+
let staged_map = HashMap::from([(PathBuf::from("src/config_types.rs"), staged.to_string())]);
193+
let head_map = HashMap::new();
192194

193-
let mut analyzer = AnalyzerService::new().expect("AnalyzerService::new() should succeed");
194-
let symbols = analyzer.extract_symbols(&[change], &staged_content, &head_content);
195+
let analyzer = AnalyzerService::new().expect("AnalyzerService::new() should succeed");
196+
let symbols = analyzer.extract_symbols(&[change], &staged_map, &head_map);
195197

196198
assert!(
197199
!symbols.is_empty(),
@@ -213,12 +215,14 @@ fn extract_symbols_no_grammar() {
213215
let diff = "@@ -0,0 +1,2 @@\n+some data\n+more data\n";
214216
let change = make_file_change("data/file.xyz", diff, 2, 0);
215217

216-
let staged_content =
217-
|_: &Path| -> Option<String> { Some("some data\nmore data\n".to_string()) };
218-
let head_content = |_: &Path| -> Option<String> { None };
218+
let staged_map = HashMap::from([(
219+
PathBuf::from("data/file.xyz"),
220+
"some data\nmore data\n".to_string(),
221+
)]);
222+
let head_map = HashMap::new();
219223

220-
let mut analyzer = AnalyzerService::new().expect("AnalyzerService::new() should succeed");
221-
let symbols = analyzer.extract_symbols(&[change], &staged_content, &head_content);
224+
let analyzer = AnalyzerService::new().expect("AnalyzerService::new() should succeed");
225+
let symbols = analyzer.extract_symbols(&[change], &staged_map, &head_map);
222226

223227
assert!(
224228
symbols.is_empty(),
@@ -233,11 +237,14 @@ fn extract_symbols_binary_skipped() {
233237
let mut change = make_file_change("src/binary_mod.rs", diff, 1, 0);
234238
change.is_binary = true;
235239

236-
let staged_content = |_: &Path| -> Option<String> { Some("pub fn hidden() {}\n".to_string()) };
237-
let head_content = |_: &Path| -> Option<String> { None };
240+
let staged_map = HashMap::from([(
241+
PathBuf::from("src/binary_mod.rs"),
242+
"pub fn hidden() {}\n".to_string(),
243+
)]);
244+
let head_map = HashMap::new();
238245

239-
let mut analyzer = AnalyzerService::new().expect("AnalyzerService::new() should succeed");
240-
let symbols = analyzer.extract_symbols(&[change], &staged_content, &head_content);
246+
let analyzer = AnalyzerService::new().expect("AnalyzerService::new() should succeed");
247+
let symbols = analyzer.extract_symbols(&[change], &staged_map, &head_map);
241248

242249
assert!(
243250
symbols.is_empty(),

0 commit comments

Comments
 (0)