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 <"));
}
}