using SheetMe.Core.Serialization;
namespace SheetMe.Core.Tests;
/// JSON 부 포맷 테스트 — 레거시 XML 과의 상호 변환 무손실성.
[TestClass]
public sealed class FormJsonTests
{
private static string SamplePath
=> Path.Combine(AppContext.BaseDirectory, "Assets", "sheetdesign_sample.xml");
/// XML → 모델 → JSON → 모델 → XML 전체 왕복 — 의미론 diff 0
[TestMethod]
public void FullRoundTrip_XmlToJsonToXml_NoSemanticDiff()
{
var original = File.ReadAllText(SamplePath);
var xmlSerializer = new LegacyXmlSerializer();
var jsonSerializer = new FormJsonSerializer();
var document = xmlSerializer.Read(original);
var json = jsonSerializer.Write(document);
var restored = jsonSerializer.Read(json);
var rewrittenXml = xmlSerializer.Write(restored);
var diffs = XmlSemanticDiff.Compare(original, rewrittenXml);
Assert.AreEqual(0, diffs.Count,
"XML→JSON→XML 왕복 의미론 diff 발생:\n" + string.Join("\n", diffs));
}
/// JSON 이중 직렬화 안정성 — 두 번째 출력이 첫 번째와 동일
[TestMethod]
public void JsonRoundTrip_IsStable()
{
var xmlSerializer = new LegacyXmlSerializer();
var jsonSerializer = new FormJsonSerializer();
var document = xmlSerializer.Read(File.ReadAllText(SamplePath));
var first = jsonSerializer.Write(document);
var second = jsonSerializer.Write(jsonSerializer.Read(first));
Assert.AreEqual(first, second, "JSON 왕복이 안정적이지 않습니다.");
}
}