Merge pull request #20292 from peppy/fix-preix-matching-status

Fix song select status prefix matching no longer working
This commit is contained in:
Dan Balasescu 2022-09-14 13:53:03 +09:00 committed by GitHub
commit 024f7991ad
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 15 additions and 2 deletions

View File

@ -191,6 +191,16 @@ public void TestApplyDivisorQueries()
Assert.IsTrue(filterCriteria.BeatDivisor.IsUpperInclusive); Assert.IsTrue(filterCriteria.BeatDivisor.IsUpperInclusive);
} }
[Test]
public void TestPartialStatusMatch()
{
const string query = "status=r";
var filterCriteria = new FilterCriteria();
FilterQueryParser.ApplyQueries(filterCriteria, query);
Assert.AreEqual(BeatmapOnlineStatus.Ranked, filterCriteria.OnlineStatus.Min);
Assert.AreEqual(BeatmapOnlineStatus.Ranked, filterCriteria.OnlineStatus.Max);
}
[Test] [Test]
public void TestApplyStatusQueries() public void TestApplyStatusQueries()
{ {

View File

@ -122,14 +122,17 @@ private static bool tryParseInt(string value, out int result) =>
private static bool tryParseEnum<TEnum>(string value, out TEnum result) where TEnum : struct private static bool tryParseEnum<TEnum>(string value, out TEnum result) where TEnum : struct
{ {
if (Enum.TryParse(value, true, out result)) return true; // First try an exact match.
if (Enum.TryParse(value, true, out result))
return true;
// Then try a prefix match.
string? prefixMatch = Enum.GetNames(typeof(TEnum)).FirstOrDefault(name => name.StartsWith(value, true, CultureInfo.InvariantCulture)); string? prefixMatch = Enum.GetNames(typeof(TEnum)).FirstOrDefault(name => name.StartsWith(value, true, CultureInfo.InvariantCulture));
if (prefixMatch == null) if (prefixMatch == null)
return false; return false;
return Enum.TryParse(value, true, out result); return Enum.TryParse(prefixMatch, true, out result);
} }
private static GroupCollection? tryMatchRegex(string value, string regex) private static GroupCollection? tryMatchRegex(string value, string regex)