Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,10 @@ dotnet test Chsword.Excel2Object.Tests # 不指定框架,逐个运行
应让其类型如实反映(例如把内部模型的属性定为非空),并在真正可能为空的入口处校验。注意 `string.IsNullOrEmpty`
在较早的目标框架上没有 `NotNullWhen` 标注,需显式判空才能各框架一致。

测试项目引用了 `SkiaSharp` 与 `SkiaSharp.NativeAssets.Linux.NoDependencies`:流式导出走 NPOI 的 SXSSF,后者
把行刷出内存时要用它测量字符宽度,而 NPOI 把该依赖标为不随包传递。库本身不引用它,使用方亦须自行引用,
故不可将其加入 `Chsword.Excel2Object.csproj`。

各目标框架须使用同一语言版本(`LangVersion`):否则低版本框架会退回较早的 C#,同一份测试代码可能
在一处编译通过、在另一处失败。

Expand Down
5 changes: 5 additions & 0 deletions Chsword.Excel2Object.Tests/Chsword.Excel2Object.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,11 @@
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Newtonsoft.Json" Version="13.0.4" />
<!-- 流式导出走 NPOI 的 SXSSF,后者把行刷出内存时要用 SkiaSharp 量字符宽度。NPOI 把 SkiaSharp
标为不随包传递的依赖,故此处与使用方一样自行引用;Linux 上的本机库另需 NativeAssets 包,
Windows 与 macOS 的由 SkiaSharp 自带。 -->
<PackageReference Include="SkiaSharp" Version="3.119.2" />
<PackageReference Include="SkiaSharp.NativeAssets.Linux.NoDependencies" Version="3.119.2" />
</ItemGroup>

<ItemGroup>
Expand Down
521 changes: 521 additions & 0 deletions Chsword.Excel2Object.Tests/StreamingExportTest.cs

Large diffs are not rendered by default.

39 changes: 39 additions & 0 deletions Chsword.Excel2Object.Tests/TestTempDirectory.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
using System;
using System.IO;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace Chsword.Excel2Object.Tests;

/// <summary>
/// 把临时目录改指到本进程自己的目录。流式导出会把刷出内存的行写进临时目录下的 <c>poifiles</c>,
/// 而 NPOI 只在首次使用时解析一次该目录,各目标框架的测试进程又是并行跑的:共用系统临时目录,
/// 「导出结束后临时文件已删除」这类断言就会数到别的进程头上。
/// </summary>
[TestClass]
public static class TestTempDirectory
{
private static string? _dir;

[AssemblyInitialize]
public static void Redirect(TestContext context)
{
_dir = Path.Combine(Path.GetTempPath(), "e2o-tests-" + Guid.NewGuid().ToString("N"));
Directory.CreateDirectory(_dir);
foreach (var name in new[] {"TMPDIR", "TMP", "TEMP"}) Environment.SetEnvironmentVariable(name, _dir);
}

[AssemblyCleanup]
public static void Remove()
{
if (_dir == null) return;

try
{
Directory.Delete(_dir, true);
}
catch (IOException)
{
// 清理失败不必连累测试结论
}
}
}
2 changes: 1 addition & 1 deletion Chsword.Excel2Object/Chsword.Excel2Object.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Product>Chsword.Excel2Object Library</Product>
<Authors>Zou Jian</Authors>
<Version>2.9.1</Version>
<Version>2.10.0</Version>
<Copyright>Copyright ? 2014-2025</Copyright>
<PackageProjectUrl>https://github.com/chsword/Excel2Object/</PackageProjectUrl>
<PackageReadmeFile>README.md</PackageReadmeFile>
Expand Down
Loading