refactor: P0-P5 全面架构重构
P1 thiserror 类型化错误: 新增 core/src/error.rs QrError 枚举, 全链 String -> QrError, 包括 EmptyInput/InvalidVersion/DataTooLong/DecodeFail 等 8 种变体 P2 text_builder Tauri 统一: 新增 build_qr_text Tauri command, 删除前端 qrText.ts, 所有 mode 组件改为 invoke 调用 Rust 端构建文本 P3 QrConfig 颜色字段移除: 从 QrConfig/QrCode 移除 fg_color/bg_color, 改为 to_svg/to_image_bytes 参数传递 P4 前端 4 项合并: Context 拆分为 StateContext+DispatchContext (H10), 新建 useModeForm 通用 hook (M11), VCardMode grid-cols-2 网格布局 (M13), persistHistory/loadHistory 迁至 utils/storage.ts (L9) P5 算法优化: MaskedView 懒计算替代 8 次 Matrix 克隆 (H9), encoding_rs 精确 Kanji Shift JIS 映射 (H12) 验证: cargo check+clippy 通过, 81+24+7 全部测试通过
This commit is contained in:
@@ -193,11 +193,11 @@ fn test_format_info_written() {
|
||||
#[test]
|
||||
fn test_svg_valid_structure() {
|
||||
let qr = QrCode::encode("HELLO", QrConfig::default()).unwrap();
|
||||
let svg = qr.to_svg(None);
|
||||
let svg = qr.to_svg(None, None, None);
|
||||
// SVG 应有正确的结构
|
||||
assert!(svg.starts_with("<svg"), "SVG 应以 <svg 开头");
|
||||
assert!(svg.contains("rect"), "SVG 应包含 rect 元素");
|
||||
assert!(svg.contains("fill=\"black\""), "SVG 暗模块应是黑色");
|
||||
assert!(svg.contains("fill=\"#000000\""), "SVG 暗模块应是黑色");
|
||||
assert!(
|
||||
svg.ends_with("</svg>\n") || svg.ends_with("</svg>"),
|
||||
"SVG 应以 </svg> 结尾"
|
||||
@@ -208,7 +208,6 @@ fn test_svg_valid_structure() {
|
||||
fn test_quiet_zone_is_white() {
|
||||
let qr = QrCode::encode("HELLO", QrConfig::default()).unwrap();
|
||||
let m = qr.modules();
|
||||
let s = qr.size() as usize;
|
||||
// 左上角分隔符区域 (7,0..7) 和 (0..7,7) 应为白色
|
||||
for i in 0..8usize {
|
||||
assert!(!m[7][i], "定位分隔符 (7,{}) 应为白色", i);
|
||||
@@ -313,10 +312,10 @@ fn test_empty_input_fails() {
|
||||
#[test]
|
||||
fn test_svg_output() {
|
||||
let qr = QrCode::encode("TEST", QrConfig::default()).unwrap();
|
||||
let svg = qr.to_svg(None);
|
||||
let svg = qr.to_svg(None, None, None);
|
||||
assert!(svg.contains("<svg"));
|
||||
assert!(svg.contains("</svg>"));
|
||||
assert!(svg.contains("fill=\"black\""));
|
||||
assert!(svg.contains("fill=\"#000000\""));
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -356,7 +355,7 @@ fn test_margin_is_included_in_dimensions() {
|
||||
let qr = QrCode::encode("MARGIN TEST", config).unwrap();
|
||||
|
||||
// SVG 的总宽度应该包含 margin
|
||||
let svg = qr.to_svg(None);
|
||||
let svg = qr.to_svg(None, None, None);
|
||||
let matrix_size = qr.size() as u32;
|
||||
let expected_total = matrix_size + 2 * 2u32;
|
||||
assert!(svg.contains(&format!("width=\"{}\"", expected_total)));
|
||||
|
||||
Reference in New Issue
Block a user