feat: 实现模板库metadata和跨域字体引用系统
实现了统一的metadata结构和字体作用域系统,支持文档和模板库之间的单向字体引用。 主要变更: - 模板库必须包含metadata字段(包括size、fonts、fonts_default) - 实现文档和模板库的size一致性校验 - 实现字体作用域系统(文档可引用模板库字体,反之不可) - 实现跨域循环引用检测 - 实现fonts_default级联规则(模板库→文档→系统默认) - 添加错误代码常量(SIZE_MISMATCH、FONT_NOT_FOUND等) - 更新文档和开发者指南 测试覆盖: - 新增33个测试(单元测试20个,集成测试13个) - 所有457个测试通过 Breaking Changes: - 模板库文件必须包含metadata字段 - 模板库metadata.size为必填字段 - 文档和模板库的size必须一致 Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
64
tests/unit/test_loaders/test_yaml_loader_metadata.py
Normal file
64
tests/unit/test_loaders/test_yaml_loader_metadata.py
Normal file
@@ -0,0 +1,64 @@
|
||||
"""
|
||||
YAML Loader metadata 验证测试
|
||||
"""
|
||||
|
||||
import pytest
|
||||
from loaders.yaml_loader import validate_metadata, YAMLError
|
||||
|
||||
|
||||
class TestValidateMetadata:
|
||||
"""validate_metadata 函数测试类"""
|
||||
|
||||
def test_valid_metadata_16_9(self):
|
||||
"""测试有效的 16:9 metadata"""
|
||||
metadata = {
|
||||
"size": "16:9",
|
||||
"description": "测试文档"
|
||||
}
|
||||
# 应该不抛出异常
|
||||
validate_metadata(metadata, "test.yaml", context="文档")
|
||||
|
||||
def test_valid_metadata_4_3(self):
|
||||
"""测试有效的 4:3 metadata"""
|
||||
metadata = {
|
||||
"size": "4:3",
|
||||
"version": "1.0",
|
||||
"author": "测试作者"
|
||||
}
|
||||
# 应该不抛出异常
|
||||
validate_metadata(metadata, "test.yaml", context="模板库")
|
||||
|
||||
def test_metadata_missing_size(self):
|
||||
"""测试 metadata 缺少 size 字段"""
|
||||
metadata = {
|
||||
"description": "测试文档"
|
||||
}
|
||||
with pytest.raises(YAMLError, match="metadata 缺少必填字段 'size'"):
|
||||
validate_metadata(metadata, "test.yaml", context="文档")
|
||||
|
||||
def test_metadata_invalid_size(self):
|
||||
"""测试 metadata size 值无效"""
|
||||
metadata = {
|
||||
"size": "21:9"
|
||||
}
|
||||
with pytest.raises(YAMLError, match="metadata.size 必须是 '16:9' 或 '4:3'"):
|
||||
validate_metadata(metadata, "test.yaml", context="文档")
|
||||
|
||||
def test_metadata_not_dict(self):
|
||||
"""测试 metadata 不是字典"""
|
||||
metadata = "invalid"
|
||||
with pytest.raises(YAMLError, match="metadata 必须是字典对象"):
|
||||
validate_metadata(metadata, "test.yaml", context="文档")
|
||||
|
||||
def test_metadata_with_optional_fields(self):
|
||||
"""测试 metadata 包含可选字段"""
|
||||
metadata = {
|
||||
"size": "16:9",
|
||||
"version": "1.0",
|
||||
"author": "作者",
|
||||
"description": "描述",
|
||||
"fonts": {},
|
||||
"fonts_default": "@body"
|
||||
}
|
||||
# 应该不抛出异常
|
||||
validate_metadata(metadata, "test.yaml", context="文档")
|
||||
Reference in New Issue
Block a user