diff --git a/src/HexManiac.Core/Models/Runs/TableStreamRun.cs b/src/HexManiac.Core/Models/Runs/TableStreamRun.cs index 57848110..f3dc5eb2 100644 --- a/src/HexManiac.Core/Models/Runs/TableStreamRun.cs +++ b/src/HexManiac.Core/Models/Runs/TableStreamRun.cs @@ -137,6 +137,12 @@ namespace HavenSoft.HexManiac.Core.Models.Runs { i--; } + // remove trailing ',' from tokens + for (int i = 0; i < tokens.Count; i++) { + if (!tokens[i].EndsWith(",")) continue; + tokens[i] = tokens[i].Substring(0, tokens[i].Length - 1); + } + return tokens; } diff --git a/src/HexManiac.Tests/StreamTests.cs b/src/HexManiac.Tests/StreamTests.cs index 0d64bf4e..22485e7e 100644 --- a/src/HexManiac.Tests/StreamTests.cs +++ b/src/HexManiac.Tests/StreamTests.cs @@ -1,5 +1,6 @@ using HavenSoft.HexManiac.Core; using HavenSoft.HexManiac.Core.Models; +using HavenSoft.HexManiac.Core.Models.Runs; using System.Linq; using Xunit; @@ -101,5 +102,19 @@ namespace HavenSoft.HexManiac.Tests { var content = Model.Copy(() => ViewPort.CurrentChange, 0, 8); Assert.Equal(@"^table`plm` 3 Ate, 4 Bumped, 5 Crossed, []", content); } + + [Fact] + public void StreamRunSerializeDeserializeIsSymmetric() { + CreateTextTable(HardcodeTablesModel.PokemonNameTable, 0x100, "Adam", "Bob", "Carl", "Dave"); + + ViewPort.Edit($"@00 00 00 01 01 02 02 03 03 FF FF @00 ^table[enum.{HardcodeTablesModel.PokemonNameTable} content.]!FFFF "); + var stream = (IStreamRun)Model.GetNextRun(0); + + var text = stream.SerializeRun(); + Model.ObserveRunWritten(ViewPort.CurrentChange, stream.DeserializeRun(text, ViewPort.CurrentChange)); + + var result = new byte[] { 0, 0, 1, 1, 2, 2, 3, 3, 255, 255 }; + Assert.All(Enumerable.Range(0, result.Length), i => Assert.Equal(Model[i], result[i])); + } } }