CounterDroneBackend/test/unit/CounterDrone.Core.Tests/MarkdownRendererTests.cs
tian 8bcf4cf675 VERSION 0.12.0 — PDF 导出 + 报告模板架构 + 对接文档 V2.0
- PdfSharpCore 1.3.64 引入(纯托管,Unity IL2CPP 兼容,+9 DLL)
- ReportData 结构化模型 + MarkdownRenderer + StandardPdfTemplate
- IReportService.ExportReport(id, format) 按需导出 PDF/MD
- 仿真后自动生成 MD 到 reports 目录,PDF 按需调用
- CJK 字体嵌入(SimHei),IPathProvider + GetFontPath
- ReportGenerator 重构为构建 ReportData,去掉 emoji
- check_unity_build.ps1 修复 -quit 参数缺失导致超时
- 对接文档 V2.0:坐标系/3D 可视化/完整枚举/Manager 签名/模型字段
- 262 测试全部通过
2026-06-20 11:57:38 +08:00

114 lines
3.9 KiB
C#

using System.Collections.Generic;
using CounterDrone.Core.Reporting;
using Xunit;
namespace CounterDrone.Core.Tests
{
public class MarkdownRendererTests
{
[Fact]
public void Render_BasicStructure()
{
var data = new ReportData
{
Title = "测试报告",
Header = new List<MetaItem>
{
new() { Label = "任务名称", Value = "测试任务" },
new() { Label = "仿真耗时", Value = "10.0 秒" },
},
Sections = new List<ReportSection>
{
new()
{
Title = "一、仿真结果",
Blocks = new List<ReportBlock>
{
new KeyValueBlock
{
LabelHeader = "统计项",
Items = new List<MetaItem>
{
new() { Label = "无人机总数", Value = "3" },
new() { Label = "被摧毁", Value = "3" },
},
},
new TextBlock { Text = "对抗结果:✅ 成功拦截", Bold = true },
},
},
},
};
var md = new MarkdownRenderer().Render(data);
Assert.Contains("# 测试报告", md);
Assert.Contains("| 任务名称 | 测试任务 |", md);
Assert.Contains("## 一、仿真结果", md);
Assert.Contains("| 统计项 | 值 |", md);
Assert.Contains("| 无人机总数 | 3 |", md);
Assert.Contains("**对抗结果:✅ 成功拦截**", md);
}
[Fact]
public void Render_TableBlock_WithCaption()
{
var data = new ReportData
{
Title = "测试",
Sections = new List<ReportSection>
{
new()
{
Title = "五、我方部署",
Blocks = new List<ReportBlock>
{
new TableBlock
{
Caption = "发射平台",
Headers = new[] { "#", "类型", "位置" },
Rows = new List<string[]>
{
new[] { "#1", "地基", "(100, 0, 50)" },
new[] { "#2", "空基", "(200, 500, 50)" },
},
},
},
},
},
};
var md = new MarkdownRenderer().Render(data);
Assert.Contains("### 发射平台", md);
Assert.Contains("| # | 类型 | 位置 |", md);
Assert.Contains("| #1 | 地基 | (100, 0, 50) |", md);
Assert.Contains("| #2 | 空基 | (200, 500, 50) |", md);
}
[Fact]
public void Render_TextBlock_Multiline()
{
var data = new ReportData
{
Title = "测试",
Sections = new List<ReportSection>
{
new()
{
Title = "七、时间线",
Blocks = new List<ReportBlock>
{
new TextBlock { Text = "- 第一行\n- 第二行" },
},
},
},
};
var md = new MarkdownRenderer().Render(data);
Assert.Contains("- 第一行", md);
Assert.Contains("- 第二行", md);
}
}
}