Files
CydandClaude Fable 5 1ff0b16015 Phase 8A (2/2): RioJoy.Core multi-targets net48 + net40 (Windows XP flavor)
- TargetFrameworks net48;net40. net48 keeps x64 + ViGEm + System.IO.Ports
  package; net40 adds Microsoft.Bcl.Async + System.ValueTuple and uses the
  in-box SerialPort.
- Compat/TaskCompat bridges Task.Run/Delay/WhenAny/WhenAll (TaskEx on
  net40) and SemaphoreSlim.WaitAsync (net40 blocks briefly - trivial at
  9600 baud).
- IReadOnlyList/IReadOnlyDictionary -> IList/IDictionary throughout
  (net40 predates the IReadOnly* interfaces and the Bcl backport cannot
  make arrays implement them).
- HashCode.Combine replaced with a manual combine (Bcl.HashCode has no
  net40 build); Marshal.SizeOf<T> -> typeof form; ViGEmJoystickSink
  gated #if !NET40. HidFeederJoystickSink stays on both flavors - it
  will drive RioGamepadXP.sys on XP via the same contract.

Both TFMs build; 275 tests green on net48.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-11 20:41:58 -05:00

58 lines
1.8 KiB
C#

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()
{
IDictionary<string, string> 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"]);
}
}