From e7c9ac880cabf3fa98e0515e4fab5c4d66287039 Mon Sep 17 00:00:00 2001 From: Nate Bross Date: Fri, 15 May 2026 08:57:36 -0500 Subject: [PATCH] fix: escape clip name in TableClipStrategy.DefaultXml --- src/SharpFM.Model/ClipTypes/TableClipStrategy.cs | 3 ++- .../ClipTypes/TableClipStrategyTests.cs | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/SharpFM.Model/ClipTypes/TableClipStrategy.cs b/src/SharpFM.Model/ClipTypes/TableClipStrategy.cs index 1dab800..2e25f52 100644 --- a/src/SharpFM.Model/ClipTypes/TableClipStrategy.cs +++ b/src/SharpFM.Model/ClipTypes/TableClipStrategy.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using SharpFM.Model.Parsing; using SharpFM.Model.Schema; +using SharpFM.Model.Scripting; namespace SharpFM.Model.ClipTypes; @@ -63,6 +64,6 @@ public ClipParseResult Parse(string xml) public string DefaultXml(string clipName) => _wrapsBaseTable - ? $"" + ? $"" : ""; } diff --git a/tests/SharpFM.Tests/ClipTypes/TableClipStrategyTests.cs b/tests/SharpFM.Tests/ClipTypes/TableClipStrategyTests.cs index 292f5aa..73e5ca7 100644 --- a/tests/SharpFM.Tests/ClipTypes/TableClipStrategyTests.cs +++ b/tests/SharpFM.Tests/ClipTypes/TableClipStrategyTests.cs @@ -69,4 +69,19 @@ public void DefaultXml_ProducesParseableSnippet() var result = TableClipStrategy.Table.Parse(seed); Assert.IsType(result); } + + [Theory] + [InlineData("My \"favorite\" stuff")] + [InlineData("A & B")] + [InlineData("")] + public void Table_DefaultXml_EscapesPunctuationInName(string clipName) + { + var seed = TableClipStrategy.Table.DefaultXml(clipName); + + var result = TableClipStrategy.Table.Parse(seed); + + var success = Assert.IsType(result); + var model = Assert.IsType(success.Model); + Assert.Equal(clipName, model.Table.Name); + } }