레거시 서식생성기(VB.NET WinForms) 대체용 C#/.NET 10 WPF 디자이너. 기준선: 실DB 활성 디자인 1,271건 왕복 의미론 diff 0 / 예외 0, 단위 테스트 49/49. 이 커밋에 함께 포함된 자격증명 분리: - appsettings.json 을 __HOST__/__PASSWORD__ 플레이스홀더로 전환 - 실접속 정보는 appsettings.Development.json 으로 분리(.gitignore 제외, csproj Debug 조건부 복사라 Release 산출물에 실리지 않음) - ConfigLoader 를 환경변수 > Development > appsettings 순 레이어링으로 변경, 미치환 플레이스홀더는 '미설정'으로 간주 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
44 lines
1.6 KiB
C#
44 lines
1.6 KiB
C#
using SheetMe.Core.Serialization;
|
|
|
|
namespace SheetMe.Core.Tests;
|
|
|
|
/// <summary>JSON 부 포맷 테스트 — 레거시 XML 과의 상호 변환 무손실성.</summary>
|
|
[TestClass]
|
|
public sealed class FormJsonTests
|
|
{
|
|
private static string SamplePath
|
|
=> Path.Combine(AppContext.BaseDirectory, "Assets", "sheetdesign_sample.xml");
|
|
|
|
/// <summary>XML → 모델 → JSON → 모델 → XML 전체 왕복 — 의미론 diff 0</summary>
|
|
[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));
|
|
}
|
|
|
|
/// <summary>JSON 이중 직렬화 안정성 — 두 번째 출력이 첫 번째와 동일</summary>
|
|
[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 왕복이 안정적이지 않습니다.");
|
|
}
|
|
}
|