From b133b7eb98c8007044c813fc2c6d9c9e010476ae Mon Sep 17 00:00:00 2001 From: Martijn Laarman Date: Tue, 3 Dec 2024 16:10:06 +0100 Subject: [PATCH 1/2] Relax version directive argument, allow for major.minor format --- .../Myst/Directives/VersionBlock.cs | 7 +++-- .../Directives/VersionTests.cs | 29 +++++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/src/Elastic.Markdown/Myst/Directives/VersionBlock.cs b/src/Elastic.Markdown/Myst/Directives/VersionBlock.cs index ad225e7e7..c3a213809 100644 --- a/src/Elastic.Markdown/Myst/Directives/VersionBlock.cs +++ b/src/Elastic.Markdown/Myst/Directives/VersionBlock.cs @@ -3,6 +3,7 @@ // See the LICENSE file in the project root for more information using Elastic.Markdown.Helpers; +using static System.StringSplitOptions; namespace Elastic.Markdown.Myst.Directives; @@ -17,7 +18,7 @@ public class VersionBlock(DirectiveBlockParser parser, string directive, Diction public override void FinalizeAndValidate(ParserContext context) { - var tokens = Arguments?.Split(" ", 2, StringSplitOptions.RemoveEmptyEntries) ?? []; + var tokens = Arguments?.Split(" ", 2, RemoveEmptyEntries) ?? []; if (tokens.Length < 1) { EmitError(context, $"{directive} needs exactly 2 arguments: "); @@ -26,7 +27,9 @@ public override void FinalizeAndValidate(ParserContext context) if (!SemVersion.TryParse(tokens[0], out var version)) { - EmitError(context, $"{tokens[0]} is not a valid version"); + var numbers = tokens[0].Split('.', RemoveEmptyEntries); + if (numbers.Length != 2 || !SemVersion.TryParse($"{numbers[0]}.{numbers[1]}", out version)) + EmitError(context, $"'{tokens[0]}' is not a valid version"); return; } diff --git a/tests/Elastic.Markdown.Tests/Directives/VersionTests.cs b/tests/Elastic.Markdown.Tests/Directives/VersionTests.cs index 8e0573ec4..e3d3a1419 100644 --- a/tests/Elastic.Markdown.Tests/Directives/VersionTests.cs +++ b/tests/Elastic.Markdown.Tests/Directives/VersionTests.cs @@ -50,3 +50,32 @@ public class VersionDeprectatedTests(ITestOutputHelper output) : VersionTests(ou [Fact] public void SetsTitle() => Block!.Title.Should().Be("Deprecated (1.0.1-beta1): more information"); } + +public abstract class VersionValidationTests(ITestOutputHelper output, string version) : DirectiveTest<VersionBlock>(output, +$$""" +```{versionchanged} {{version}} more information +Version brief summary +``` +A regular paragraph. +""" +); + +public class SimpleVersion(ITestOutputHelper output) : VersionValidationTests(output, "7.17") +{ + [Fact] + public void SetsVersion() => Block!.Version.Should().Be(new SemVersion(7, 17, 0)); +} + +public class MajorVersionOnly(ITestOutputHelper output) : VersionValidationTests(output, "8") +{ + [Fact] + public void HasError() => Collector.Diagnostics.Should().HaveCount(1) + .And.Contain(d => d.Message.Contains("'8' is not a valid version")); +} + +public class BranchVersion(ITestOutputHelper output) : VersionValidationTests(output, "8.x") +{ + [Fact] + public void HasError() => Collector.Diagnostics.Should().HaveCount(1) + .And.Contain(d => d.Message.Contains("'8.x' is not a valid version")); +} From fada00ebd5d09758c84dd8bdd1d6c6dee0c3cee5 Mon Sep 17 00:00:00 2001 From: Martijn Laarman <Mpdreamz@gmail.com> Date: Tue, 3 Dec 2024 16:17:12 +0100 Subject: [PATCH 2/2] Fix failing test --- src/Elastic.Markdown/Myst/Directives/VersionBlock.cs | 3 +-- tests/Elastic.Markdown.Tests/Directives/VersionTests.cs | 5 ++++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/Elastic.Markdown/Myst/Directives/VersionBlock.cs b/src/Elastic.Markdown/Myst/Directives/VersionBlock.cs index c3a213809..9fda232a1 100644 --- a/src/Elastic.Markdown/Myst/Directives/VersionBlock.cs +++ b/src/Elastic.Markdown/Myst/Directives/VersionBlock.cs @@ -28,9 +28,8 @@ public override void FinalizeAndValidate(ParserContext context) if (!SemVersion.TryParse(tokens[0], out var version)) { var numbers = tokens[0].Split('.', RemoveEmptyEntries); - if (numbers.Length != 2 || !SemVersion.TryParse($"{numbers[0]}.{numbers[1]}", out version)) + if (numbers.Length != 2 || !SemVersion.TryParse($"{numbers[0]}.{numbers[1]}.0", out version)) EmitError(context, $"'{tokens[0]}' is not a valid version"); - return; } Version = version; diff --git a/tests/Elastic.Markdown.Tests/Directives/VersionTests.cs b/tests/Elastic.Markdown.Tests/Directives/VersionTests.cs index e3d3a1419..f5fc59cda 100644 --- a/tests/Elastic.Markdown.Tests/Directives/VersionTests.cs +++ b/tests/Elastic.Markdown.Tests/Directives/VersionTests.cs @@ -54,7 +54,7 @@ public class VersionDeprectatedTests(ITestOutputHelper output) : VersionTests(ou public abstract class VersionValidationTests(ITestOutputHelper output, string version) : DirectiveTest<VersionBlock>(output, $$""" ```{versionchanged} {{version}} more information -Version brief summary +Version brief summary ``` A regular paragraph. """ @@ -64,6 +64,9 @@ public class SimpleVersion(ITestOutputHelper output) : VersionValidationTests(ou { [Fact] public void SetsVersion() => Block!.Version.Should().Be(new SemVersion(7, 17, 0)); + + [Fact] + public void HasNoError() => Collector.Diagnostics.Should().BeEmpty(); } public class MajorVersionOnly(ITestOutputHelper output) : VersionValidationTests(output, "8")