根据 ElementTree.md 的要求,已实现完整的单元测试覆盖以下场景:
-
testStyleInheritance_Font - 测试 font 属性继承
- 验证子元素继承父元素的字体
-
testStyleInheritance_Color - 测试 color 属性继承
- 验证子元素继承父元素的颜色
-
testStyleInheritance_TextDecoration - 测试 textDecoration 属性继承
- 验证子元素继承父元素的文本装饰(下划线、删除线)
-
testStyleInheritance_FontStyle - 测试 fontStyle 属性继承
- 验证子元素继承父元素的字体样式(普通、斜体)
-
testStyleInheritance_ChildOverridesParent - 测试子元素覆盖父元素属性
- 验证子元素自身的属性优先级高于继承的属性
-
testStyleInheritance_MultiLevel - 测试多级继承
- 验证三层嵌套结构中的属性继承链
- 验证不同层级的属性覆盖机制
-
testStyleInheritance_NonInheritableProperties - 测试不可继承属性
- 验证 margin、padding、backgroundColor 等属性不会被继承
- 符合 CSS 规范
-
testAddChild_SingleChild - 测试添加单个子元素
- 验证子元素正确添加到 children 数组
- 验证父子关系正确建立
-
testAddChild_MultipleChildren - 测试添加多个子元素
- 验证多个子元素按顺序添加
- 验证所有父子关系正确建立
-
testRemoveChild_ExistingChild - 测试删除已存在的子元素
- 验证子元素从 children 数组中移除
- 验证父子关系正确解除
-
testRemoveChild_NonExistingChild - 测试删除不存在的子元素
- 验证删除不存在的子元素不会产生副作用
-
testRemoveAllChildren - 测试删除所有子元素
- 验证所有子元素被移除
- 验证所有父子关系被解除
-
testAddChild_NestedHierarchy - 测试嵌套层级结构
- 验证多层嵌套的父子关系正确建立
-
testLeafElement_CannotAddChildren - 测试叶子节点不能添加子元素
- 文档说明叶子元素(Text、Attachment)不应有子元素
-
testElementTree_TextContent - 测试获取全部文本内容
- 验证 textContent() 返回所有文本元素的拼接
-
testElementTree_ElementCount - 测试元素计数
- 验证 elementCount 返回树中所有元素的数量
-
testElementTree_Depth - 测试树深度
- 验证 depth 返回正确的树深度
-
testElementTree_FindAll - 测试查找所有匹配元素
- 验证 findAll() 返回所有符合条件的元素
-
testElementTree_FindFirst - 测试查找第一个匹配元素
- 验证 findFirst() 返回第一个符合条件的元素
-
testElementTree_AllTextElements - 测试获取所有文本元素
- 验证 allTextElements() 只返回 TextElement 类型
-
testElementTree_AllAttachmentElements - 测试获取所有附件元素
- 验证 allAttachmentElements() 只返回 AttachmentElement 类型
-
testStyle_MarginConvenience - 测试 margin() 便捷方法
- 验证一次性设置所有 margin
-
testStyle_PaddingConvenience - 测试 padding() 便捷方法
- 验证一次性设置所有 padding
-
testStyle_HorizontalMargin - 测试水平 margin 计算
- 验证 horizontalMargin 返回 left + right 总和
-
testStyle_VerticalPadding - 测试垂直 padding 计算
- 验证 verticalPadding 返回 top + bottom 总和
- 总测试用例数: 24
- Style 继承相关: 7 个
- Element 操作相关: 7 个
- ElementTree 查询相关: 6 个
- Style 工具方法: 4 个
所有测试使用 Given-When-Then 模式编写:
func testStyleInheritance_Font() {
// Given: Parent with font
let parentStyle = Style()
parentStyle.font = UIFont.systemFont(ofSize: 20)
let parent = BlockElement(style: parentStyle)
// When: Child without font
let childStyle = Style()
let child = TextElement(text: "Test", style: childStyle)
parent.addChild(child)
// Then: Child inherits parent's font
let resolvedStyle = child.resolvedStyle
XCTAssertNotNil(resolvedStyle.font)
XCTAssertEqual(resolvedStyle.font?.pointSize, 20)
}- 打开
RichViewDemo.xcworkspace - 选择
RichViewDemoscheme - 按
Cmd+U运行所有测试 - 或右键点击
RichViewDemoTests类,选择 "Run Tests"
xcodebuild test \
-workspace RichViewDemo.xcworkspace \
-scheme RichViewDemo \
-destination 'platform=iOS Simulator,name=iPhone 16' \
-only-testing:RichViewDemoTests/RichViewDemoTests- 测试文件: RichViewDemoTests/RichViewDemoTests.swift
- 被测代码:
RichView/RichView/src/*.swift
✅ Style 继承机制(符合 CSS 规范) ✅ 可继承属性:font, color, textDecoration, fontStyle ✅ 不可继承属性:margin, padding, backgroundColor, border 等 ✅ Element 父子关系管理 ✅ ElementTree 树遍历和查询 ✅ 多层级嵌套结构
测试代码完全符合 ElementTree.md 中的要求:
- ✅ Style的属性继承生效
- ✅ Element 的添加、删除子元素生效