From 540cfc92da1ea3f54961420c494907e5bc99c46e Mon Sep 17 00:00:00 2001 From: Salman Alshamrani Date: Mon, 5 May 2025 09:46:41 +0300 Subject: [PATCH] Support mutating existing active filter criteria in carousel tests Allows maintaining sorting mode while modifying other filter criterias, thus simplifying some tests. --- .../SongSelectV2/BeatmapCarouselTestScene.cs | 17 ++++++++++++++++- .../SongSelectV2/TestSceneBeatmapCarousel.cs | 12 ++++++++---- .../TestSceneBeatmapCarouselArtistGrouping.cs | 5 +++-- ...estSceneBeatmapCarouselDifficultyGrouping.cs | 5 +++-- .../TestSceneBeatmapCarouselNoGrouping.cs | 3 --- .../TestSceneBeatmapCarouselScrolling.cs | 5 +++-- 6 files changed, 33 insertions(+), 14 deletions(-) diff --git a/osu.Game.Tests/Visual/SongSelectV2/BeatmapCarouselTestScene.cs b/osu.Game.Tests/Visual/SongSelectV2/BeatmapCarouselTestScene.cs index a11e4063a2..39f6c2230b 100644 --- a/osu.Game.Tests/Visual/SongSelectV2/BeatmapCarouselTestScene.cs +++ b/osu.Game.Tests/Visual/SongSelectV2/BeatmapCarouselTestScene.cs @@ -20,6 +20,7 @@ using osu.Game.Graphics.Carousel; using osu.Game.Graphics.Containers; using osu.Game.Overlays; using osu.Game.Screens.Select; +using osu.Game.Screens.Select.Filter; using osu.Game.Screens.SelectV2; using osu.Game.Tests.Beatmaps; using osu.Game.Tests.Resources; @@ -127,9 +128,23 @@ namespace osu.Game.Tests.Visual.SongSelectV2 }, }; }); + + // Prefer title sorting so that order of carousel panels match order of BeatmapSets bindable. + SortBy(SortMode.Title); } - protected void SortBy(FilterCriteria criteria) => AddStep($"sort:{criteria.Sort} group:{criteria.Group}", () => Carousel.Filter(criteria)); + protected void SortBy(SortMode mode) => ApplyToFilter($"sort by {mode.ToString().ToLowerInvariant()}", c => c.Sort = mode); + protected void GroupBy(GroupMode mode) => ApplyToFilter($"group by {mode.ToString().ToLowerInvariant()}", c => c.Group = mode); + + protected void ApplyToFilter(string description, Action? apply) + { + AddStep(description, () => + { + var criteria = Carousel.Criteria; + apply?.Invoke(criteria); + Carousel.Filter(criteria); + }); + } protected void WaitForDrawablePanels() => AddUntilStep("drawable panels loaded", () => Carousel.ChildrenOfType().Count(), () => Is.GreaterThan(0)); protected void WaitForFiltering() => AddUntilStep("filtering finished", () => Carousel.IsFiltering, () => Is.False); diff --git a/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarousel.cs b/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarousel.cs index 5fd921645b..870225edb3 100644 --- a/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarousel.cs +++ b/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarousel.cs @@ -6,7 +6,6 @@ using System.Threading.Tasks; using NUnit.Framework; using osu.Framework.Utils; using osu.Game.Beatmaps; -using osu.Game.Screens.Select; using osu.Game.Screens.Select.Filter; using osu.Game.Tests.Resources; @@ -34,9 +33,14 @@ namespace osu.Game.Tests.Visual.SongSelectV2 [Explicit] public void TestSorting() { - SortBy(new FilterCriteria { Sort = SortMode.Artist }); - SortBy(new FilterCriteria { Group = GroupMode.Difficulty, Sort = SortMode.Difficulty }); - SortBy(new FilterCriteria { Group = GroupMode.Artist, Sort = SortMode.Artist }); + SortBy(SortMode.Artist); + GroupBy(GroupMode.All); + + SortBy(SortMode.Difficulty); + GroupBy(GroupMode.Difficulty); + + SortBy(SortMode.Artist); + GroupBy(GroupMode.Artist); } [Test] diff --git a/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarouselArtistGrouping.cs b/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarouselArtistGrouping.cs index f0caa796b6..84769f2cee 100644 --- a/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarouselArtistGrouping.cs +++ b/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarouselArtistGrouping.cs @@ -5,7 +5,6 @@ using System.Linq; using NUnit.Framework; using osu.Framework.Testing; using osu.Game.Beatmaps; -using osu.Game.Screens.Select; using osu.Game.Screens.Select.Filter; using osu.Game.Screens.SelectV2; @@ -19,7 +18,9 @@ namespace osu.Game.Tests.Visual.SongSelectV2 { RemoveAllBeatmaps(); CreateCarousel(); - SortBy(new FilterCriteria { Group = GroupMode.Artist, Sort = SortMode.Artist }); + + SortBy(SortMode.Artist); + GroupBy(GroupMode.Artist); AddBeatmaps(10, 3, true); WaitForDrawablePanels(); diff --git a/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarouselDifficultyGrouping.cs b/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarouselDifficultyGrouping.cs index a4cdf8abcb..37fb95ce86 100644 --- a/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarouselDifficultyGrouping.cs +++ b/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarouselDifficultyGrouping.cs @@ -6,7 +6,6 @@ using NUnit.Framework; using osu.Framework.Testing; using osu.Game.Beatmaps; using osu.Game.Graphics.Carousel; -using osu.Game.Screens.Select; using osu.Game.Screens.Select.Filter; using osu.Game.Screens.SelectV2; using osuTK; @@ -21,7 +20,9 @@ namespace osu.Game.Tests.Visual.SongSelectV2 { RemoveAllBeatmaps(); CreateCarousel(); - SortBy(new FilterCriteria { Group = GroupMode.Difficulty, Sort = SortMode.Difficulty }); + + SortBy(SortMode.Difficulty); + GroupBy(GroupMode.Difficulty); AddBeatmaps(10, 3); WaitForDrawablePanels(); diff --git a/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarouselNoGrouping.cs b/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarouselNoGrouping.cs index ac02d7a3a9..cdd55f0f0c 100644 --- a/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarouselNoGrouping.cs +++ b/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarouselNoGrouping.cs @@ -6,8 +6,6 @@ using NUnit.Framework; using osu.Framework.Testing; using osu.Game.Beatmaps; using osu.Game.Graphics.Carousel; -using osu.Game.Screens.Select; -using osu.Game.Screens.Select.Filter; using osu.Game.Screens.SelectV2; using osuTK; using osuTK.Input; @@ -22,7 +20,6 @@ namespace osu.Game.Tests.Visual.SongSelectV2 { RemoveAllBeatmaps(); CreateCarousel(); - SortBy(new FilterCriteria { Sort = SortMode.Title }); } /// diff --git a/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarouselScrolling.cs b/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarouselScrolling.cs index 93b0332ac4..f5574d2789 100644 --- a/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarouselScrolling.cs +++ b/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarouselScrolling.cs @@ -5,7 +5,7 @@ using System.Linq; using NUnit.Framework; using osu.Framework.Graphics.Primitives; using osu.Framework.Testing; -using osu.Game.Screens.Select; +using osu.Game.Screens.Select.Filter; using osu.Game.Screens.SelectV2; namespace osu.Game.Tests.Visual.SongSelectV2 @@ -18,7 +18,8 @@ namespace osu.Game.Tests.Visual.SongSelectV2 { RemoveAllBeatmaps(); CreateCarousel(); - SortBy(new FilterCriteria()); + + SortBy(SortMode.Artist); AddBeatmaps(10); WaitForDrawablePanels();