|
6 | 6 |
|
7 | 7 | use crate::chapter_detect::ChapterBoundary; |
8 | 8 | use crate::glossary::GlossaryCandidate; |
9 | | -use crate::note_filter::{FilterStats, FilteredItem, MergedItem, NoteFilterResult, PurifyEnv}; |
| 9 | +use crate::note_filter::{FilterStats, NoteFilterResult}; |
10 | 10 | use crate::outline::OutlineEntry; |
11 | 11 | use crate::purify_config::PurifyConfig; |
12 | 12 | use crate::structure_note::{render_note_structure, NoteStructureConfig}; |
13 | | -use crate::types::{SessionScreen, SessionSegment}; |
| 13 | +use crate::types::SessionSegment; |
14 | 14 |
|
15 | 15 | /// 构造会话段(净化后保留段形态)。 |
16 | 16 | fn seg(id: i64, start_ms: u64, end_ms: u64, text: &str) -> SessionSegment { |
@@ -310,6 +310,28 @@ fn empty_glossary_produces_no_block() { |
310 | 310 | assert_eq!(stats.glossary_terms, 0); |
311 | 311 | } |
312 | 312 |
|
| 313 | +#[test] |
| 314 | +fn glossary_max_terms_zero_disables_block() { |
| 315 | + // Arrange:上限 0 = 不输出词汇表块(审查修复语义——原 .max(1) 会输出 1 条) |
| 316 | + let mut result = base_result(vec![seg(1, 0, 5_000, "内容")]); |
| 317 | + let mut config = default_config(); |
| 318 | + config.glossary_max_terms = 0; |
| 319 | + |
| 320 | + // Act |
| 321 | + let stats = render_note_structure( |
| 322 | + &mut result, |
| 323 | + &[], |
| 324 | + &[], |
| 325 | + &[term("T1", 1, 0, 1.0)], |
| 326 | + &config, |
| 327 | + ); |
| 328 | + |
| 329 | + // Assert:无词汇表块、统计 0 |
| 330 | + assert!(!result.markdown.contains("词汇表")); |
| 331 | + assert!(!result.markdown.contains("T1")); |
| 332 | + assert_eq!(stats.glossary_terms, 0); |
| 333 | +} |
| 334 | + |
313 | 335 | // ── 零回归护栏(REQ-179)────────────────────────────────────── |
314 | 336 |
|
315 | 337 | #[test] |
@@ -391,26 +413,3 @@ fn structure_config_roundtrips_json() { |
391 | 413 | assert!(parsed.structure.chapter_headings); |
392 | 414 | assert!(parsed.structure.glossary_block); |
393 | 415 | } |
394 | | - |
395 | | -// ── 辅助:PurifyEnv 构造器(防 unused 警告——下游接线将使用)──── |
396 | | -#[allow(dead_code)] |
397 | | -fn env() -> PurifyEnv { |
398 | | - PurifyEnv { |
399 | | - config: PurifyConfig::default(), |
400 | | - symbol: crate::symbol_normalize::SymbolNormalizeConfig::default(), |
401 | | - corrections: crate::ocr_correction::OcrCorrectionTable::default(), |
402 | | - } |
403 | | -} |
404 | | - |
405 | | -// 防 unused:SessionScreen 引用占位(结构渲染不消费屏对象,接线层用) |
406 | | -#[allow(dead_code)] |
407 | | -fn _screen_placeholder() -> Vec<SessionScreen> { |
408 | | - Vec::new() |
409 | | -} |
410 | | - |
411 | | -// 防 unused:MergedItem/FilteredItem 字段完整性验证(与 FilterStats 同批序列化) |
412 | | -#[allow(dead_code)] |
413 | | -fn _payload_placeholder() { |
414 | | - let _ = MergedItem { segment_id: 1, into_segment_id: 2, text: "".into(), start_ms: 0 }; |
415 | | - let _ = FilteredItem { segment_id: 1, reason: crate::note_filter::FilterReason::Fragment, text: "".into(), start_ms: 0 }; |
416 | | -} |
0 commit comments