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 왕복이 안정적이지 않습니다."); } }