// 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.Allocation; using osu.Framework.Extensions.ObjectExtensions; using osu.Framework.Graphics.Containers; using osu.Framework.Testing; using osu.Game.Tournament.Components; using osu.Game.Tournament.Models; using osu.Game.Tournament.Screens.MapPool; namespace osu.Game.Tournament.Tests.Screens { public partial class TestSceneMapPoolScreen : TournamentScreenTestScene { private MapPoolScreen screen = null!; [BackgroundDependencyLoader] private void load() { Add(screen = new MapPoolScreen { Width = 0.7f }); } [SetUp] public void SetUp() => Schedule(() => Ladder.SplitMapPoolByMods.Value = true); [Test] public void TestFewMaps() { AddStep("load few maps", () => { Ladder.CurrentMatch.Value.AsNonNull().Round.Value.AsNonNull().Beatmaps.Clear(); for (int i = 0; i < 8; i++) addBeatmap(); }); AddStep("reset match", () => { Ladder.CurrentMatch.Value = new TournamentMatch(); Ladder.CurrentMatch.Value = Ladder.Matches.First(); }); assertTwoWide(); } [Test] public void TestJustEnoughMaps() { AddStep("load just enough maps", () => { Ladder.CurrentMatch.Value.AsNonNull().Round.Value.AsNonNull().Beatmaps.Clear(); for (int i = 0; i < 18; i++) addBeatmap(); }); AddStep("reset match", () => { Ladder.CurrentMatch.Value = new TournamentMatch(); Ladder.CurrentMatch.Value = Ladder.Matches.First(); }); assertTwoWide(); } [Test] public void TestManyMaps() { AddStep("load many maps", () => { Ladder.CurrentMatch.Value.AsNonNull().Round.Value.AsNonNull().Beatmaps.Clear(); for (int i = 0; i < 19; i++) addBeatmap(); }); AddStep("reset match", () => { Ladder.CurrentMatch.Value = new TournamentMatch(); Ladder.CurrentMatch.Value = Ladder.Matches.First(); }); assertThreeWide(); } [Test] public void TestJustEnoughMods() { AddStep("load many maps", () => { Ladder.CurrentMatch.Value.AsNonNull().Round.Value.AsNonNull().Beatmaps.Clear(); for (int i = 0; i < 11; i++) addBeatmap(i > 4 ? Ruleset.Value.CreateInstance().AllMods.ElementAt(i).Acronym : "NM"); }); AddStep("reset match", () => { Ladder.CurrentMatch.Value = new TournamentMatch(); Ladder.CurrentMatch.Value = Ladder.Matches.First(); }); assertTwoWide(); } private void assertTwoWide() => AddAssert("ensure layout width is 2", () => screen.ChildrenOfType>>().First().Padding.Left > 0); private void assertThreeWide() => AddAssert("ensure layout width is 3", () => screen.ChildrenOfType>>().First().Padding.Left == 0); [Test] public void TestManyMods() { AddStep("load many maps", () => { Ladder.CurrentMatch.Value.AsNonNull().Round.Value.AsNonNull().Beatmaps.Clear(); for (int i = 0; i < 12; i++) addBeatmap(i > 4 ? Ruleset.Value.CreateInstance().AllMods.ElementAt(i).Acronym : "NM"); }); AddStep("reset match", () => { Ladder.CurrentMatch.Value = new TournamentMatch(); Ladder.CurrentMatch.Value = Ladder.Matches.First(); }); assertThreeWide(); } [Test] public void TestSplitMapPoolByMods() { AddStep("load many maps", () => { Ladder.CurrentMatch.Value.AsNonNull().Round.Value.AsNonNull().Beatmaps.Clear(); for (int i = 0; i < 12; i++) addBeatmap(i > 4 ? Ruleset.Value.CreateInstance().AllMods.ElementAt(i).Acronym : "NM"); }); AddStep("disable splitting map pool by mods", () => Ladder.SplitMapPoolByMods.Value = false); AddStep("reset match", () => { Ladder.CurrentMatch.Value = new TournamentMatch(); Ladder.CurrentMatch.Value = Ladder.Matches.First(); }); } private void addBeatmap(string mods = "NM") { Ladder.CurrentMatch.Value.AsNonNull().Round.Value.AsNonNull().Beatmaps.Add(new RoundBeatmap { Beatmap = CreateSampleBeatmap(), Mods = mods }); } } }