From 75697ced2eafc30fb29fe98085f787b54bc0e6e1 Mon Sep 17 00:00:00 2001 From: Yashwanth Anantharaju Date: Thu, 16 Apr 2026 15:26:45 +0000 Subject: [PATCH] test: add WellKnownRegularExpressions unit tests for SHA-256 Add dedicated test class covering: - 40-char SHA-1 match (regression guard) - 64-char SHA-256 match (new behavior) - 63/65-char boundary rejection - Mixed-case matching (IgnoreCase) - SHA1 and CommitHash keys return same regex instance - Unknown key returns null Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../L0/Sdk/WellKnownRegularExpressionsL0.cs | 100 ++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 src/Test/L0/Sdk/WellKnownRegularExpressionsL0.cs diff --git a/src/Test/L0/Sdk/WellKnownRegularExpressionsL0.cs b/src/Test/L0/Sdk/WellKnownRegularExpressionsL0.cs new file mode 100644 index 000000000..ffd3846bd --- /dev/null +++ b/src/Test/L0/Sdk/WellKnownRegularExpressionsL0.cs @@ -0,0 +1,100 @@ +using GitHub.DistributedTask.Pipelines.Expressions; +using Xunit; + +namespace GitHub.Runner.Common.Tests.Sdk +{ + public sealed class WellKnownRegularExpressionsL0 + { + [Fact] + [Trait("Level", "L0")] + [Trait("Category", "Sdk")] + public void SHA1_Key_Returns_CommitHash_Regex() + { + var regex = WellKnownRegularExpressions.GetRegex(WellKnownRegularExpressions.SHA1); + + Assert.NotNull(regex); + } + + [Fact] + [Trait("Level", "L0")] + [Trait("Category", "Sdk")] + public void CommitHash_Key_Returns_CommitHash_Regex() + { + var regex = WellKnownRegularExpressions.GetRegex(WellKnownRegularExpressions.CommitHash); + + Assert.NotNull(regex); + } + + [Fact] + [Trait("Level", "L0")] + [Trait("Category", "Sdk")] + public void SHA1_And_CommitHash_Return_Same_Regex() + { + var sha1Regex = WellKnownRegularExpressions.GetRegex(WellKnownRegularExpressions.SHA1); + var commitHashRegex = WellKnownRegularExpressions.GetRegex(WellKnownRegularExpressions.CommitHash); + + Assert.Same(sha1Regex, commitHashRegex); + } + + [Fact] + [Trait("Level", "L0")] + [Trait("Category", "Sdk")] + public void Matches_40_Char_Hex() + { + var regex = WellKnownRegularExpressions.GetRegex(WellKnownRegularExpressions.CommitHash); + + Assert.Matches(regex.Value, new string((char)97, 40)); + } + + [Fact] + [Trait("Level", "L0")] + [Trait("Category", "Sdk")] + public void Matches_64_Char_Hex() + { + var regex = WellKnownRegularExpressions.GetRegex(WellKnownRegularExpressions.CommitHash); + + Assert.Matches(regex.Value, new string((char)97, 64)); + } + + [Fact] + [Trait("Level", "L0")] + [Trait("Category", "Sdk")] + public void Does_Not_Match_63_Char_Hex() + { + var regex = WellKnownRegularExpressions.GetRegex(WellKnownRegularExpressions.CommitHash); + + Assert.DoesNotMatch(regex.Value, new string((char)97, 63)); + } + + [Fact] + [Trait("Level", "L0")] + [Trait("Category", "Sdk")] + public void Does_Not_Match_65_Char_Hex() + { + var regex = WellKnownRegularExpressions.GetRegex(WellKnownRegularExpressions.CommitHash); + + Assert.DoesNotMatch(regex.Value, new string((char)97, 65)); + } + + [Fact] + [Trait("Level", "L0")] + [Trait("Category", "Sdk")] + public void Matches_Mixed_Case_64_Char() + { + var regex = WellKnownRegularExpressions.GetRegex(WellKnownRegularExpressions.CommitHash); + var value = new string((char)65, 32) + new string((char)98, 32); + + Assert.Matches(regex.Value, value); + } + + [Fact] + [Trait("Level", "L0")] + [Trait("Category", "Sdk")] + public void Unknown_Key_Returns_Null() + { + var regex = WellKnownRegularExpressions.GetRegex("UnknownType"); + + Assert.Null(regex); + } + } +}