using RioJoy.Core.Overlay; using Xunit; namespace RioJoy.Core.Tests.Overlay; public class GoobieDataImporterTests { private const string Sample = """ ; a comment, ignored ( a-00 b-00 b-01 b-02 ) ( "tag" "FIRE" "" "GEAR UP" ) """; [Fact] public void Parse_ReadsFieldsAndRow() { GoobieDataImporter.Sheet sheet = GoobieDataImporter.Parse(Sample); Assert.Equal(new[] { "a-00", "b-00", "b-01", "b-02" }, sheet.Fields); Assert.Single(sheet.Rows); Assert.Equal("tag", sheet.Rows[0]["a-00"]); Assert.Equal("FIRE", sheet.Rows[0]["b-00"]); Assert.Equal("GEAR UP", sheet.Rows[0]["b-02"]); // quoted strings keep spaces } [Fact] public void LabelsForRow_DropsEmptyValues() { IReadOnlyDictionary labels = GoobieDataImporter.LabelsForRow(GoobieDataImporter.Parse(Sample)); Assert.True(labels.ContainsKey("b-00")); Assert.False(labels.ContainsKey("b-01")); // empty string dropped Assert.Equal(3, labels.Count); // a-00, b-00, b-02 } [Fact] public void Parse_Field0_IsTheRowFileTag() { GoobieDataImporter.Sheet sheet = GoobieDataImporter.Parse(Sample); Assert.Equal("a-00", sheet.Fields[0]); Assert.Equal("tag", sheet.Rows[0][sheet.Fields[0]]); } [Fact] public void Loads_RealTestDataFile() { GoobieDataImporter.Sheet sheet = GoobieDataImporter.Load(TestRepo.CustomBackground("TEST.data")); Assert.Equal("a-00", sheet.Fields[0]); Assert.NotEmpty(sheet.Rows); // Header: ( a-00 b-00 b-01 ... ) Row0: ( "defalt" "LSDI" "ZOOM" ... ) Assert.Equal("defalt", sheet.Rows[0]["a-00"]); Assert.Equal("LSDI", sheet.Rows[0]["b-00"]); Assert.Equal("ZOOM", sheet.Rows[0]["b-01"]); } }