1
0
Fork 0
Everything2Everything/src/Everything2Everything.Tests/DataProviderTests.cs
Yun Chan d49ee6365f feat: 순수 .NET Provider 3종 (Data/Vector/ImageOptim) + Loss 분류 정확화
검증 가능한 순수 .NET 변환기를 우선 추가. 외부 도구 불필요, 실제 동작까지 테스트로 검증.

- DataProvider: csv<->json, csv<->xlsx 원자 엣지 (json<->xlsx는 그래프가 csv 경유 자동 합성). CsvHelper/ClosedXML
- VectorProvider: svg->png/pdf (svg->기타이미지는 png 경유 합성). Svg.Skia
- ImageOptimProvider: 동일포맷 재압축 self-edge (jpg/png/webp/tiff/bmp)
- Loss 분류 정확화: OCR·문서/HTML->이미지=Rasterize, ->pdf=Recode (멀티홉 이상경로 svg->pdf->docx->jpg 차단)
- 그래프 합성/실동작 테스트 9개 추가 (총 23개 통과)
- DocumentFormat.OpenXml 3.1.0->최신 (ClosedXML 호환)
2026-06-01 13:09:27 +09:00

68 lines
2.5 KiB
C#

using System.IO;
using System.Threading;
using System.Threading.Tasks;
using Everything2Everything.Core;
using Everything2Everything.Core.Converters;
using Everything2Everything.Core.Providers;
using Xunit;
namespace Everything2Everything.Tests;
public class DataProviderTests
{
private static string TempDir()
{
var d = Path.Combine(Path.GetTempPath(), "e2e_test_" + System.Guid.NewGuid().ToString("N"));
Directory.CreateDirectory(d);
return d;
}
[Fact]
public async Task Csv_To_Json_To_Csv_Roundtrip()
{
var dir = TempDir();
var csv = Path.Combine(dir, "t.csv");
await File.WriteAllTextAsync(csv, "name,age\nAlice,30\nBob,25\n");
var p = new DataProvider();
var r1 = await p.ConvertAsync(csv, dir, ".json", new ConvertOptions(), null, CancellationToken.None);
Assert.Equal(ConvertStatus.Success, r1.Status);
var json = await File.ReadAllTextAsync(r1.OutputPaths[0]);
Assert.Contains("Alice", json);
Assert.Contains("30", json);
var r2 = await p.ConvertAsync(r1.OutputPaths[0], dir, ".csv", new ConvertOptions(), null, CancellationToken.None);
Assert.Equal(ConvertStatus.Success, r2.Status);
var csv2 = await File.ReadAllTextAsync(r2.OutputPaths[0]);
Assert.Contains("Alice", csv2);
Assert.Contains("age", csv2);
}
[Fact]
public async Task Csv_To_Xlsx_To_Csv_Roundtrip()
{
var dir = TempDir();
var csv = Path.Combine(dir, "t.csv");
await File.WriteAllTextAsync(csv, "a,b\n1,x\n2,y\n");
var p = new DataProvider();
var r1 = await p.ConvertAsync(csv, dir, ".xlsx", new ConvertOptions(), null, CancellationToken.None);
Assert.Equal(ConvertStatus.Success, r1.Status);
Assert.True(new FileInfo(r1.OutputPaths[0]).Length > 0);
var r2 = await p.ConvertAsync(r1.OutputPaths[0], dir, ".csv", new ConvertOptions(), null, CancellationToken.None);
Assert.Equal(ConvertStatus.Success, r2.Status);
var csv2 = await File.ReadAllTextAsync(r2.OutputPaths[0]);
Assert.Contains("a", csv2);
Assert.Contains("x", csv2);
}
[Fact]
public void DefaultGraph_JsonToXlsx_ComposedViaCsv()
{
var graph = Everything2EverythingBootstrap.CreateDefault().Providers.Graph;
var path = graph.FindBestPath(".json", ".xlsx", maxHops: 3);
Assert.NotNull(path);
Assert.Equal(2, path!.Count); // json→csv→xlsx 자동 합성
}
}