using SheetMe.Core.Serialization; namespace SheetMe.Core.Tests; /// /// FarPoint Spread XML 파서 테스트. /// 합성 샘플 기반(테스트 DB 의 실물 2건은 셀 없는 기본 골격) — 셀 있는 실서식 확보 시 재검증. /// [TestClass] public sealed class FarPointSpreadParserTests { private const string SyntheticXml = """ 40 60 80 120 평가 항목 보행 3점 """; /// 합성 샘플 — 축 크기/기본값/스팬/셀 추출 [TestMethod] public void Parse_Synthetic_ExtractsAll() { var grid = FarPointSpreadParser.Parse(SyntheticXml); Assert.IsNotNull(grid); Assert.AreEqual(24, grid!.DefaultRowHeight, "defaultSize 어트리뷰트"); Assert.AreEqual(80, grid.DefaultColWidth, "index=-1 Item 기본값"); Assert.AreEqual(40, grid.RowHeightOf(0)); Assert.AreEqual(24, grid.RowHeightOf(1), "미지정 행은 기본값"); Assert.AreEqual(60, grid.RowHeightOf(2)); Assert.AreEqual(120, grid.ColWidthOf(1)); Assert.AreEqual(80, grid.ColWidthOf(0)); Assert.AreEqual(1, grid.Spans.Count); Assert.AreEqual(2, grid.Spans[0].ColSpan); Assert.AreEqual(3, grid.Cells.Count); Assert.AreEqual("평가 항목", grid.Cells[0].Text); Assert.AreEqual(1, grid.Cells[2].Row); Assert.AreEqual(1, grid.Cells[2].Col); } /// 실물 기본 골격(S999) — 예외 없이 파싱, 기본 크기 유지 [TestMethod] public void Parse_EmptySkeleton_Succeeds() { const string skeleton = """ """; var grid = FarPointSpreadParser.Parse(skeleton); Assert.IsNotNull(grid); Assert.AreEqual(20, grid!.DefaultRowHeight); Assert.AreEqual(62, grid.DefaultColWidth); Assert.AreEqual(0, grid.Cells.Count); } /// 손상 입력 — null 반환(자리표시 렌더 유지) [TestMethod] public void Parse_Invalid_ReturnsNull() { Assert.IsNull(FarPointSpreadParser.Parse("not xml at all <")); } }