diff --git a/src/StreamShorts.Console/Commands/DefaultCommand.cs b/src/StreamShorts.Console/Commands/DefaultCommand.cs index c3f878b..60c6308 100644 --- a/src/StreamShorts.Console/Commands/DefaultCommand.cs +++ b/src/StreamShorts.Console/Commands/DefaultCommand.cs @@ -68,7 +68,7 @@ internal sealed class DefaultCommand( public override async Task ExecuteAsync(CommandContext context, Settings settings) { - _console.MarkupLine($"[blue]Processing stream:[/] {settings.Stream}"); + _console.MarkupLine($"[blue]Processing stream:[/] {settings.Stream.EscapeMarkup()}"); var videoStream = _fileSystem.File.OpenRead(settings.Stream); Stream? audioStream = null; @@ -147,7 +147,7 @@ internal sealed class DefaultCommand( }); var directoryUri = new Uri(outputDirectoryPath).AbsoluteUri; - var panel = new Panel($"[blue link={directoryUri}]{artifactsOutputDirectory}[/]") + var panel = new Panel($"[blue link={directoryUri}]{artifactsOutputDirectory.EscapeMarkup()}[/]") { Header = new PanelHeader($"[blue]Shorts created[/] [green]successfully![/]") }; diff --git a/tests/StreamShorts.Console.Tests/Unit/Commands/DefaultCommandTests.cs b/tests/StreamShorts.Console.Tests/Unit/Commands/DefaultCommandTests.cs new file mode 100644 index 0000000..a1d4071 --- /dev/null +++ b/tests/StreamShorts.Console.Tests/Unit/Commands/DefaultCommandTests.cs @@ -0,0 +1,21 @@ +namespace StreamShorts.Console.Tests.Unit.Commands; + +using Spectre.Console; + +public class DefaultCommandTests +{ + [Theory] + [InlineData("file[with]brackets.mp4", "file[[with]]brackets.mp4")] + [InlineData("normal-file.mp4", "normal-file.mp4")] + [InlineData("file_with_underscores.mp4", "file_with_underscores.mp4")] + [InlineData("file with spaces.mp4", "file with spaces.mp4")] + [InlineData("[brackets].mp4", "[[brackets]].mp4")] + public void EscapeMarkup_ShouldProperlyEscapeSquareBrackets(string input, string expected) + { + // Act + var result = input.EscapeMarkup(); + + // Assert + result.Should().Be(expected); + } +}