// Copyright (c) 2007-2017 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System.Collections.Generic; using System.Linq; using OpenTK; using osu.Framework.Allocation; using osu.Framework.Configuration; 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.Objects; using osu.Game.Rulesets.Osu; using osu.Game.Screens.Select; using osu.Game.Tests.Beatmaps; namespace osu.Game.Tests.Visual { public class TestCaseBeatmapInfoWedge : OsuTestCase { private TestBeatmapInfoWedge infoWedge; private readonly List beatmaps = new List(); private readonly Bindable beatmap = new Bindable(); [BackgroundDependencyLoader] private void load(OsuGameBase game, RulesetStore rulesets) { beatmap.BindTo(game.Beatmap); Add(infoWedge = new TestBeatmapInfoWedge { Size = new Vector2(0.5f, 245), RelativeSizeAxes = Axes.X, Margin = new MarginPadding { Top = 20, } }); AddStep("hide", () => { infoWedge.State = Visibility.Hidden; Content.FadeOut(100); }); AddStep("show", () => { Content.FadeInFromZero(250); infoWedge.State = Visibility.Visible; infoWedge.UpdateBeatmap(beatmap); }); foreach (var rulesetInfo in rulesets.AvailableRulesets) { var ruleset = rulesetInfo.CreateInstance(); beatmaps.Add(createTestBeatmap(rulesetInfo)); var name = rulesetInfo.ShortName; selectBeatmap(name); // TODO: check InfoLabels of other rulesets switch (ruleset) { case OsuRuleset osu: testOsuBeatmap(osu); break; } } testNullBeatmap(); } private void testOsuBeatmap(OsuRuleset ruleset) { 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().Any(s => s.Text == $"{ruleset.ShortName}Author")); // TODO: check InfoLabels } private void testNullBeatmap() { selectNullBeatmap(); 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); AddAssert("check empty author", () => !infoWedge.Info.MapperContainer.Children.Any()); AddAssert("check empty infos", () => !infoWedge.Info.InfoLabelContainer.Children.Any()); } private void selectBeatmap(string name) { AddStep($"select {name} beatmap", () => { beatmap.Value = new TestWorkingBeatmap(beatmaps.First(b => b.BeatmapInfo.Ruleset.ShortName == name)); infoWedge.UpdateBeatmap(beatmap); }); } private void selectNullBeatmap() { AddStep("select null beatmap", () => { beatmap.Value = beatmap.Default; infoWedge.UpdateBeatmap(beatmap); }); } private Beatmap createTestBeatmap(RulesetInfo ruleset) { 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" }, HitObjects = new List() // TODO: Fill it with something depending on ruleset? }; } private class TestBeatmapInfoWedge : BeatmapInfoWedge { public new BufferedWedgeInfo Info => base.Info; } } }