1
0
mirror of https://github.com/ppy/osu.git synced 2024-12-31 00:42:55 +08:00
osu-lazer/osu.Game.Tests/Visual/TestCaseBeatmapInfoWedge.cs

180 lines
6.5 KiB
C#
Raw Normal View History

// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
// See the LICENCE file in the repository root for full licence text.
2018-04-13 17:19:50 +08:00
using System.Collections.Generic;
using System.Linq;
using JetBrains.Annotations;
2018-04-13 17:19:50 +08:00
using NUnit.Framework;
2018-11-20 15:51:59 +08:00
using osuTK;
2018-04-13 17:19:50 +08:00
using osu.Framework.Allocation;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osu.Game.Beatmaps;
using osu.Game.Graphics.Sprites;
using osu.Game.Rulesets;
using osu.Game.Rulesets.Catch;
using osu.Game.Rulesets.Mania;
2018-04-13 17:19:50 +08:00
using osu.Game.Rulesets.Objects;
using osu.Game.Rulesets.Objects.Types;
2018-04-13 17:19:50 +08:00
using osu.Game.Rulesets.Osu;
using osu.Game.Rulesets.Taiko;
2018-04-13 17:19:50 +08:00
using osu.Game.Screens.Select;
using osu.Game.Tests.Beatmaps;
namespace osu.Game.Tests.Visual
{
[TestFixture]
public class TestCaseBeatmapInfoWedge : OsuTestCase
{
private RulesetStore rulesets;
private TestBeatmapInfoWedge infoWedge;
2018-04-19 19:44:38 +08:00
private readonly List<IBeatmap> beatmaps = new List<IBeatmap>();
2018-04-13 17:19:50 +08:00
[BackgroundDependencyLoader]
private void load(RulesetStore rulesets)
2018-04-13 17:19:50 +08:00
{
this.rulesets = rulesets;
}
protected override void LoadComplete()
{
base.LoadComplete();
Add(infoWedge = new TestBeatmapInfoWedge
{
Size = new Vector2(0.5f, 245),
RelativeSizeAxes = Axes.X,
Margin = new MarginPadding { Top = 20 }
});
AddStep("show", () =>
{
infoWedge.State = Visibility.Visible;
2019-02-21 17:56:34 +08:00
infoWedge.Beatmap = Beatmap.Value;
2018-04-13 17:19:50 +08:00
});
// select part is redundant, but wait for load isn't
selectBeatmap(Beatmap.Value.Beatmap);
2019-03-19 16:24:26 +08:00
AddWaitStep("wait for select", 3);
2018-04-13 17:19:50 +08:00
AddStep("hide", () => { infoWedge.State = Visibility.Hidden; });
2019-03-19 16:24:26 +08:00
AddWaitStep("wait for hide", 3);
2018-04-13 17:19:50 +08:00
AddStep("show", () => { infoWedge.State = Visibility.Visible; });
foreach (var rulesetInfo in rulesets.AvailableRulesets)
{
2018-06-26 17:59:13 +08:00
var instance = rulesetInfo.CreateInstance();
2018-04-24 01:07:16 +08:00
var testBeatmap = createTestBeatmap(rulesetInfo);
2018-04-24 01:07:16 +08:00
beatmaps.Add(testBeatmap);
2018-04-13 17:19:50 +08:00
2018-06-26 17:59:13 +08:00
AddStep("set ruleset", () => Ruleset.Value = rulesetInfo);
2018-04-24 01:07:16 +08:00
selectBeatmap(testBeatmap);
2018-04-13 17:19:50 +08:00
2018-06-26 17:59:13 +08:00
testBeatmapLabels(instance);
2018-04-13 17:19:50 +08:00
// TODO: adjust cases once more info is shown for other gamemodes
2018-06-26 17:59:13 +08:00
switch (instance)
2018-04-13 17:19:50 +08:00
{
case OsuRuleset _:
testInfoLabels(5);
break;
case TaikoRuleset _:
2018-04-13 17:19:50 +08:00
testInfoLabels(5);
break;
case CatchRuleset _:
testInfoLabels(5);
break;
case ManiaRuleset _:
testInfoLabels(4);
break;
2018-04-13 17:19:50 +08:00
default:
testInfoLabels(2);
break;
}
}
testNullBeatmap();
}
private void testBeatmapLabels(Ruleset ruleset)
2018-04-13 17:19:50 +08:00
{
AddAssert("check version", () => infoWedge.Info.VersionLabel.Text == $"{ruleset.ShortName}Version");
AddAssert("check title", () => infoWedge.Info.TitleLabel.Text == $"{ruleset.ShortName}Source — {ruleset.ShortName}Title");
AddAssert("check artist", () => infoWedge.Info.ArtistLabel.Text == $"{ruleset.ShortName}Artist");
AddAssert("check author", () => infoWedge.Info.MapperContainer.Children.OfType<OsuSpriteText>().Any(s => s.Text == $"{ruleset.ShortName}Author"));
}
private void testInfoLabels(int expectedCount)
{
AddAssert("check info labels exists", () => infoWedge.Info.InfoLabelContainer.Children.Any());
AddAssert("check info labels count", () => infoWedge.Info.InfoLabelContainer.Children.Count == expectedCount);
2018-04-13 17:19:50 +08:00
}
private void testNullBeatmap()
{
selectBeatmap(null);
2018-04-13 17:19:50 +08:00
AddAssert("check empty version", () => string.IsNullOrEmpty(infoWedge.Info.VersionLabel.Text));
AddAssert("check default title", () => infoWedge.Info.TitleLabel.Text == Beatmap.Default.BeatmapInfo.Metadata.Title);
AddAssert("check default artist", () => infoWedge.Info.ArtistLabel.Text == Beatmap.Default.BeatmapInfo.Metadata.Artist);
2018-04-13 17:19:50 +08:00
AddAssert("check empty author", () => !infoWedge.Info.MapperContainer.Children.Any());
AddAssert("check no info labels", () => !infoWedge.Info.InfoLabelContainer.Children.Any());
2018-04-13 17:19:50 +08:00
}
private void selectBeatmap([CanBeNull] IBeatmap b)
2018-04-13 17:19:50 +08:00
{
2018-04-23 19:50:16 +08:00
BeatmapInfoWedge.BufferedWedgeInfo infoBefore = null;
2018-04-13 17:19:50 +08:00
AddStep($"select {b?.Metadata.Title ?? "null"} beatmap", () =>
2018-04-13 17:19:50 +08:00
{
2018-04-23 19:50:16 +08:00
infoBefore = infoWedge.Info;
infoWedge.Beatmap = Beatmap.Value = b == null ? Beatmap.Default : new TestWorkingBeatmap(b);
2018-04-13 17:19:50 +08:00
});
2019-03-19 16:24:26 +08:00
AddUntilStep("wait for async load", () => infoWedge.Info != infoBefore);
2018-04-13 17:19:50 +08:00
}
2018-04-19 19:44:38 +08:00
private IBeatmap createTestBeatmap(RulesetInfo ruleset)
2018-04-13 17:19:50 +08:00
{
List<HitObject> objects = new List<HitObject>();
for (double i = 0; i < 50000; i += 1000)
objects.Add(new TestHitObject { StartTime = i });
2018-04-13 17:19:50 +08:00
return new Beatmap
{
BeatmapInfo = new BeatmapInfo
{
Metadata = new BeatmapMetadata
{
AuthorString = $"{ruleset.ShortName}Author",
Artist = $"{ruleset.ShortName}Artist",
Source = $"{ruleset.ShortName}Source",
Title = $"{ruleset.ShortName}Title"
},
Ruleset = ruleset,
StarDifficulty = 6,
Version = $"{ruleset.ShortName}Version",
BaseDifficulty = new BeatmapDifficulty()
2018-04-13 17:19:50 +08:00
},
HitObjects = objects
};
}
private class TestBeatmapInfoWedge : BeatmapInfoWedge
{
public new BufferedWedgeInfo Info => base.Info;
}
private class TestHitObject : HitObject, IHasPosition
{
public float X { get; } = 0;
public float Y { get; } = 0;
public Vector2 Position { get; } = Vector2.Zero;
}
2018-04-13 17:19:50 +08:00
}
}