diff --git a/osu.Game.Tests/Visual/SongSelect/BeatmapCarouselV2TestScene.cs b/osu.Game.Tests/Visual/SongSelect/BeatmapCarouselV2TestScene.cs
index a55f79c42e..36226a13cc 100644
--- a/osu.Game.Tests/Visual/SongSelect/BeatmapCarouselV2TestScene.cs
+++ b/osu.Game.Tests/Visual/SongSelect/BeatmapCarouselV2TestScene.cs
@@ -17,7 +17,6 @@ using osu.Game.Database;
using osu.Game.Graphics;
using osu.Game.Graphics.Containers;
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;
@@ -54,16 +53,6 @@ namespace osu.Game.Tests.Visual.SongSelect
Scheduler.AddDelayed(updateStats, 100, true);
}
- [SetUpSteps]
- public virtual void SetUpSteps()
- {
- RemoveAllBeatmaps();
-
- CreateCarousel();
-
- SortBy(new FilterCriteria { Sort = SortMode.Title });
- }
-
protected void CreateCarousel()
{
AddStep("create components", () =>
@@ -200,12 +189,14 @@ namespace osu.Game.Tests.Visual.SongSelect
if (randomMetadata)
{
+ char randomCharacter = getRandomCharacter();
+
var metadata = new BeatmapMetadata
{
// Create random metadata, then we can check if sorting works based on these
- Artist = $"{getRandomCharacter()}ome Artist " + RNG.Next(0, 9),
- Title = $"{getRandomCharacter()}ome Song (set id {beatmapSetInfo.OnlineID:000}) {Guid.NewGuid()}",
- Author = { Username = $"{getRandomCharacter()}ome Guy " + RNG.Next(0, 9) },
+ Artist = $"{randomCharacter}ome Artist " + RNG.Next(0, 9),
+ Title = $"{randomCharacter}ome Song (set id {beatmapSetInfo.OnlineID:000}) {Guid.NewGuid()}",
+ Author = { Username = $"{randomCharacter}ome Guy " + RNG.Next(0, 9) },
};
foreach (var beatmap in beatmapSetInfo.Beatmaps)
@@ -216,10 +207,12 @@ namespace osu.Game.Tests.Visual.SongSelect
}
});
+ private static long randomCharPointer;
+
private static char getRandomCharacter()
{
const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz*";
- return chars[RNG.Next(chars.Length)];
+ return chars[(int)((randomCharPointer++ / 2) % chars.Length)];
}
protected void RemoveAllBeatmaps() => AddStep("clear all beatmaps", () => BeatmapSets.Clear());
diff --git a/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarouselV2Basics.cs b/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarouselV2.cs
similarity index 52%
rename from osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarouselV2Basics.cs
rename to osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarouselV2.cs
index 41ceff3183..3c5cf16e92 100644
--- a/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarouselV2Basics.cs
+++ b/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarouselV2.cs
@@ -2,102 +2,65 @@
// See the LICENCE file in the repository root for full licence text.
using System.Collections.Generic;
-using System.Linq;
using System.Threading.Tasks;
using NUnit.Framework;
-using osu.Framework.Graphics.Primitives;
-using osu.Framework.Testing;
using osu.Framework.Utils;
using osu.Game.Beatmaps;
using osu.Game.Screens.Select;
using osu.Game.Screens.Select.Filter;
-using osu.Game.Screens.SelectV2;
using osu.Game.Tests.Resources;
namespace osu.Game.Tests.Visual.SongSelect
{
///
- /// Currently covers adding and removing of items and scrolling.
- /// If we add more tests here, these two categories can likely be split out into separate scenes.
+ /// Covers common steps which can be used for manual testing.
///
[TestFixture]
- public partial class TestSceneBeatmapCarouselV2Basics : BeatmapCarouselV2TestScene
+ public partial class TestSceneBeatmapCarouselV2 : BeatmapCarouselV2TestScene
{
[Test]
+ [Explicit]
public void TestBasics()
{
- AddBeatmaps(10);
+ CreateCarousel();
+ RemoveAllBeatmaps();
+
AddBeatmaps(10, randomMetadata: true);
+ AddBeatmaps(10);
AddBeatmaps(1);
+ }
+
+ [Test]
+ [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 });
+ }
+
+ [Test]
+ [Explicit]
+ public void TestRemovals()
+ {
RemoveFirstBeatmap();
RemoveAllBeatmaps();
}
[Test]
- public void TestOffScreenLoading()
- {
- AddStep("disable masking", () => Scroll.Masking = false);
- AddStep("enable masking", () => Scroll.Masking = true);
- }
-
- [Test]
- public void TestAddRemoveOneByOne()
+ [Explicit]
+ public void TestAddRemoveRepeatedOps()
{
AddRepeatStep("add beatmaps", () => BeatmapSets.Add(TestResources.CreateTestBeatmapSetInfo(RNG.Next(1, 4))), 20);
AddRepeatStep("remove beatmaps", () => BeatmapSets.RemoveAt(RNG.Next(0, BeatmapSets.Count)), 20);
}
[Test]
- public void TestSorting()
+ [Explicit]
+ public void TestMasking()
{
- AddBeatmaps(10);
- SortBy(new FilterCriteria { Group = GroupMode.Difficulty, Sort = SortMode.Difficulty });
- SortBy(new FilterCriteria { Group = GroupMode.Artist, Sort = SortMode.Artist });
- SortBy(new FilterCriteria { Sort = SortMode.Artist });
- }
-
- [Test]
- public void TestScrollPositionMaintainedOnAddSecondSelected()
- {
- Quad positionBefore = default;
-
- AddBeatmaps(10);
- WaitForDrawablePanels();
-
- AddStep("select middle beatmap", () => Carousel.CurrentSelection = BeatmapSets.ElementAt(BeatmapSets.Count - 2));
- AddStep("scroll to selected item", () => Scroll.ScrollTo(Scroll.ChildrenOfType().Single(p => p.Selected.Value)));
-
- WaitForScrolling();
-
- AddStep("save selected screen position", () => positionBefore = Carousel.ChildrenOfType().FirstOrDefault(p => p.Selected.Value)!.ScreenSpaceDrawQuad);
-
- RemoveFirstBeatmap();
- WaitForSorting();
-
- AddAssert("select screen position unchanged", () => Carousel.ChildrenOfType().Single(p => p.Selected.Value).ScreenSpaceDrawQuad,
- () => Is.EqualTo(positionBefore));
- }
-
- [Test]
- public void TestScrollPositionMaintainedOnAddLastSelected()
- {
- Quad positionBefore = default;
-
- AddBeatmaps(10);
- WaitForDrawablePanels();
-
- AddStep("scroll to last item", () => Scroll.ScrollToEnd(false));
-
- AddStep("select last beatmap", () => Carousel.CurrentSelection = BeatmapSets.Last());
-
- WaitForScrolling();
-
- AddStep("save selected screen position", () => positionBefore = Carousel.ChildrenOfType().FirstOrDefault(p => p.Selected.Value)!.ScreenSpaceDrawQuad);
-
- RemoveFirstBeatmap();
- WaitForSorting();
- AddAssert("select screen position unchanged", () => Carousel.ChildrenOfType().Single(p => p.Selected.Value).ScreenSpaceDrawQuad,
- () => Is.EqualTo(positionBefore));
+ AddStep("disable masking", () => Scroll.Masking = false);
+ AddStep("enable masking", () => Scroll.Masking = true);
}
[Test]
diff --git a/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarouselV2GroupSelection.cs b/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarouselV2DifficultyGrouping.cs
similarity index 92%
rename from osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarouselV2GroupSelection.cs
rename to osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarouselV2DifficultyGrouping.cs
index f4d97be5a5..e861d8bf30 100644
--- a/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarouselV2GroupSelection.cs
+++ b/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarouselV2DifficultyGrouping.cs
@@ -12,23 +12,22 @@ using osu.Game.Screens.SelectV2;
namespace osu.Game.Tests.Visual.SongSelect
{
[TestFixture]
- public partial class TestSceneBeatmapCarouselV2GroupSelection : BeatmapCarouselV2TestScene
+ public partial class TestSceneBeatmapCarouselV2DifficultyGrouping : BeatmapCarouselV2TestScene
{
- public override void SetUpSteps()
+ [SetUpSteps]
+ public void SetUpSteps()
{
RemoveAllBeatmaps();
-
CreateCarousel();
-
SortBy(new FilterCriteria { Group = GroupMode.Difficulty, Sort = SortMode.Difficulty });
+
+ AddBeatmaps(10, 3);
+ WaitForDrawablePanels();
}
[Test]
public void TestOpenCloseGroupWithNoSelectionMouse()
{
- AddBeatmaps(10, 5);
- WaitForDrawablePanels();
-
AddAssert("no beatmaps visible", () => Carousel.ChildrenOfType().Count(p => p.Alpha > 0), () => Is.Zero);
CheckNoSelection();
@@ -44,9 +43,6 @@ namespace osu.Game.Tests.Visual.SongSelect
[Test]
public void TestOpenCloseGroupWithNoSelectionKeyboard()
{
- AddBeatmaps(10, 5);
- WaitForDrawablePanels();
-
AddAssert("no beatmaps visible", () => Carousel.ChildrenOfType().Count(p => p.Alpha > 0), () => Is.Zero);
CheckNoSelection();
@@ -67,9 +63,6 @@ namespace osu.Game.Tests.Visual.SongSelect
[Test]
public void TestCarouselRemembersSelection()
{
- AddBeatmaps(10);
- WaitForDrawablePanels();
-
SelectNextGroup();
object? selection = null;
@@ -107,9 +100,6 @@ namespace osu.Game.Tests.Visual.SongSelect
[Test]
public void TestGroupSelectionOnHeader()
{
- AddBeatmaps(10, 3);
- WaitForDrawablePanels();
-
SelectNextGroup();
WaitForGroupSelection(0, 0);
@@ -121,9 +111,6 @@ namespace osu.Game.Tests.Visual.SongSelect
[Test]
public void TestKeyboardSelection()
{
- AddBeatmaps(10, 3);
- WaitForDrawablePanels();
-
SelectNextPanel();
SelectNextPanel();
SelectNextPanel();
diff --git a/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarouselV2Selection.cs b/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarouselV2NoGrouping.cs
similarity index 94%
rename from osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarouselV2Selection.cs
rename to osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarouselV2NoGrouping.cs
index b087c252e4..82f35af0ec 100644
--- a/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarouselV2Selection.cs
+++ b/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarouselV2NoGrouping.cs
@@ -5,14 +5,24 @@ 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;
using osuTK.Input;
namespace osu.Game.Tests.Visual.SongSelect
{
[TestFixture]
- public partial class TestSceneBeatmapCarouselV2Selection : BeatmapCarouselV2TestScene
+ public partial class TestSceneBeatmapCarouselV2NoGrouping : BeatmapCarouselV2TestScene
{
+ [SetUpSteps]
+ public void SetUpSteps()
+ {
+ RemoveAllBeatmaps();
+ CreateCarousel();
+ SortBy(new FilterCriteria { Sort = SortMode.Title });
+ }
+
///
/// Keyboard selection via up and down arrows doesn't actually change the selection until
/// the select key is pressed.
diff --git a/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarouselV2Scrolling.cs b/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarouselV2Scrolling.cs
new file mode 100644
index 0000000000..1d5d8e2a2d
--- /dev/null
+++ b/osu.Game.Tests/Visual/SongSelect/TestSceneBeatmapCarouselV2Scrolling.cs
@@ -0,0 +1,65 @@
+// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence.
+// See the LICENCE file in the repository root for full licence text.
+
+using System.Linq;
+using NUnit.Framework;
+using osu.Framework.Graphics.Primitives;
+using osu.Framework.Testing;
+using osu.Game.Screens.Select;
+using osu.Game.Screens.SelectV2;
+
+namespace osu.Game.Tests.Visual.SongSelect
+{
+ [TestFixture]
+ public partial class TestSceneBeatmapCarouselV2Scrolling : BeatmapCarouselV2TestScene
+ {
+ [SetUpSteps]
+ public void SetUpSteps()
+ {
+ RemoveAllBeatmaps();
+ CreateCarousel();
+ SortBy(new FilterCriteria());
+
+ AddBeatmaps(10);
+ WaitForDrawablePanels();
+ }
+
+ [Test]
+ public void TestScrollPositionMaintainedOnAddSecondSelected()
+ {
+ Quad positionBefore = default;
+
+ AddStep("select middle beatmap", () => Carousel.CurrentSelection = BeatmapSets.ElementAt(BeatmapSets.Count - 2));
+ AddStep("scroll to selected item", () => Scroll.ScrollTo(Scroll.ChildrenOfType().Single(p => p.Selected.Value)));
+
+ WaitForScrolling();
+
+ AddStep("save selected screen position", () => positionBefore = Carousel.ChildrenOfType().FirstOrDefault(p => p.Selected.Value)!.ScreenSpaceDrawQuad);
+
+ RemoveFirstBeatmap();
+ WaitForSorting();
+
+ AddAssert("select screen position unchanged", () => Carousel.ChildrenOfType().Single(p => p.Selected.Value).ScreenSpaceDrawQuad,
+ () => Is.EqualTo(positionBefore));
+ }
+
+ [Test]
+ public void TestScrollPositionMaintainedOnAddLastSelected()
+ {
+ Quad positionBefore = default;
+
+ AddStep("scroll to last item", () => Scroll.ScrollToEnd(false));
+
+ AddStep("select last beatmap", () => Carousel.CurrentSelection = BeatmapSets.Last());
+
+ WaitForScrolling();
+
+ AddStep("save selected screen position", () => positionBefore = Carousel.ChildrenOfType().FirstOrDefault(p => p.Selected.Value)!.ScreenSpaceDrawQuad);
+
+ RemoveFirstBeatmap();
+ WaitForSorting();
+ AddAssert("select screen position unchanged", () => Carousel.ChildrenOfType().Single(p => p.Selected.Value).ScreenSpaceDrawQuad,
+ () => Is.EqualTo(positionBefore));
+ }
+ }
+}