osu/osu.Game.Tests/Visual/Online/TestSceneBeatmapSetOverlay.cs

311 lines
12 KiB
C#
Raw Normal View History

2019-06-27 02:40:22 +00:00
// 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 09:19:50 +00:00
using NUnit.Framework;
using osu.Framework.Allocation;
using osu.Game.Beatmaps;
using osu.Game.Overlays;
using osu.Game.Overlays.BeatmapSet;
2018-04-13 09:19:50 +00:00
using osu.Game.Rulesets;
using osu.Game.Users;
2019-02-05 16:32:33 +00:00
using System;
using System.Collections.Generic;
using System.Linq;
2018-04-13 09:19:50 +00:00
2019-03-24 16:02:36 +00:00
namespace osu.Game.Tests.Visual.Online
2018-04-13 09:19:50 +00:00
{
[TestFixture]
public class TestSceneBeatmapSetOverlay : OsuTestScene
2018-04-13 09:19:50 +00:00
{
private readonly TestBeatmapSetOverlay overlay;
2018-04-13 09:19:50 +00:00
protected override bool UseOnlineAPI => true;
2019-07-31 19:44:44 +00:00
public TestSceneBeatmapSetOverlay()
2018-04-13 09:19:50 +00:00
{
Add(overlay = new TestBeatmapSetOverlay());
2018-04-13 09:19:50 +00:00
}
[Resolved]
private RulesetStore rulesets { get; set; }
2018-04-13 09:19:50 +00:00
[Test]
public void TestLoading()
{
AddStep(@"show loading", () => overlay.ShowBeatmapSet(null));
}
[Test]
public void TestOnline()
{
AddStep(@"show online", () => overlay.FetchAndShowBeatmapSet(55));
}
[Test]
public void TestLocalBeatmaps()
{
2018-04-13 09:19:50 +00:00
AddStep(@"show first", () =>
{
overlay.ShowBeatmapSet(new BeatmapSetInfo
{
OnlineBeatmapSetID = 1235,
2018-04-13 09:19:50 +00:00
Metadata = new BeatmapMetadata
{
Title = @"an awesome beatmap",
Artist = @"naru narusegawa",
Source = @"hinata sou",
Tags = @"test tag tag more tag",
2018-04-13 09:19:50 +00:00
Author = new User
{
Username = @"BanchoBot",
Id = 3,
2018-04-13 09:19:50 +00:00
},
},
OnlineInfo = new BeatmapSetOnlineInfo
{
Preview = @"https://b.ppy.sh/preview/12345.mp3",
2019-06-27 04:48:57 +00:00
PlayCount = 123,
FavouriteCount = 456,
Submitted = DateTime.Now,
Ranked = DateTime.Now,
BPM = 111,
2018-04-13 09:19:50 +00:00
HasVideo = true,
2019-06-27 04:48:57 +00:00
HasStoryboard = true,
Covers = new BeatmapSetOnlineCovers(),
2018-04-13 09:19:50 +00:00
},
2019-06-13 07:52:49 +00:00
Metrics = new BeatmapSetMetrics { Ratings = Enumerable.Range(0, 11).ToArray() },
2018-04-13 09:19:50 +00:00
Beatmaps = new List<BeatmapInfo>
{
new BeatmapInfo
{
2019-06-27 04:48:57 +00:00
StarDifficulty = 9.99,
Version = @"TEST",
2019-07-07 17:25:36 +00:00
Length = 456000,
Ruleset = rulesets.GetRuleset(3),
2018-04-13 09:19:50 +00:00
BaseDifficulty = new BeatmapDifficulty
{
2019-06-27 04:48:57 +00:00
CircleSize = 1,
DrainRate = 2.3f,
OverallDifficulty = 4.5f,
ApproachRate = 6,
2018-04-13 09:19:50 +00:00
},
OnlineInfo = new BeatmapOnlineInfo
{
2019-06-27 04:48:57 +00:00
CircleCount = 111,
SliderCount = 12,
PlayCount = 222,
PassCount = 21,
2018-04-13 09:19:50 +00:00
},
Metrics = new BeatmapMetrics
{
2019-06-13 07:30:38 +00:00
Fails = Enumerable.Range(1, 100).Select(i => i % 12 - 6).ToArray(),
Retries = Enumerable.Range(-2, 100).Select(i => i % 12 - 6).ToArray(),
2018-04-13 09:19:50 +00:00
},
},
},
});
2018-04-13 09:19:50 +00:00
});
2019-06-26 02:17:28 +00:00
2019-06-19 00:37:08 +00:00
downloadAssert(true);
AddStep("show many difficulties", () => overlay.ShowBeatmapSet(createManyDifficultiesBeatmapSet()));
downloadAssert(true);
}
2019-06-19 00:37:08 +00:00
[Test]
2019-06-27 04:48:57 +00:00
public void TestAvailability()
{
AddStep(@"show undownloadable", () =>
2018-04-13 09:19:50 +00:00
{
overlay.ShowBeatmapSet(new BeatmapSetInfo
{
OnlineBeatmapSetID = 1234,
2018-04-13 09:19:50 +00:00
Metadata = new BeatmapMetadata
{
2019-06-27 04:48:57 +00:00
Title = @"undownloadable beatmap",
Artist = @"no one",
Source = @"some source",
Tags = @"another test tag tag more test tags",
2018-04-13 09:19:50 +00:00
Author = new User
{
2019-06-27 04:48:57 +00:00
Username = @"BanchoBot",
Id = 3,
2018-04-13 09:19:50 +00:00
},
},
OnlineInfo = new BeatmapSetOnlineInfo
{
Availability = new BeatmapSetOnlineAvailability
{
DownloadDisabled = true,
ExternalLink = "https://osu.ppy.sh",
},
2019-06-27 04:48:57 +00:00
Preview = @"https://b.ppy.sh/preview/1234.mp3",
PlayCount = 123,
FavouriteCount = 456,
Submitted = DateTime.Now,
Ranked = DateTime.Now,
BPM = 111,
2019-06-27 04:48:57 +00:00
HasVideo = true,
HasStoryboard = true,
Covers = new BeatmapSetOnlineCovers(),
2019-08-29 09:29:31 +00:00
Language = new BeatmapSetOnlineLanguage { Id = 3, Name = "English" },
Genre = new BeatmapSetOnlineGenre { Id = 4, Name = "Rock" },
2018-04-13 09:19:50 +00:00
},
2019-06-13 07:52:49 +00:00
Metrics = new BeatmapSetMetrics { Ratings = Enumerable.Range(0, 11).ToArray() },
2018-04-13 09:19:50 +00:00
Beatmaps = new List<BeatmapInfo>
{
new BeatmapInfo
{
2019-06-27 04:48:57 +00:00
StarDifficulty = 5.67,
Version = @"ANOTHER TEST",
2019-07-07 17:25:36 +00:00
Length = 123000,
Ruleset = rulesets.GetRuleset(1),
2018-04-13 09:19:50 +00:00
BaseDifficulty = new BeatmapDifficulty
{
2019-06-27 04:48:57 +00:00
CircleSize = 9,
DrainRate = 8,
OverallDifficulty = 7,
ApproachRate = 6,
2018-04-13 09:19:50 +00:00
},
OnlineInfo = new BeatmapOnlineInfo
{
2019-06-27 04:48:57 +00:00
CircleCount = 123,
SliderCount = 45,
PlayCount = 567,
PassCount = 89,
2018-04-13 09:19:50 +00:00
},
Metrics = new BeatmapMetrics
{
2019-06-13 07:30:38 +00:00
Fails = Enumerable.Range(1, 100).Select(i => i % 12 - 6).ToArray(),
Retries = Enumerable.Range(-2, 100).Select(i => i % 12 - 6).ToArray(),
2018-04-13 09:19:50 +00:00
},
},
},
});
2018-04-13 09:19:50 +00:00
});
2019-06-26 02:17:28 +00:00
downloadAssert(false);
}
[Test]
public void TestMultipleRulesets()
{
AddStep("show multiple rulesets beatmap", () =>
{
var beatmaps = new List<BeatmapInfo>();
foreach (var ruleset in rulesets.AvailableRulesets.Skip(1))
{
beatmaps.Add(new BeatmapInfo
{
Version = ruleset.Name,
Ruleset = ruleset,
BaseDifficulty = new BeatmapDifficulty(),
OnlineInfo = new BeatmapOnlineInfo(),
Metrics = new BeatmapMetrics
{
Fails = Enumerable.Range(1, 100).Select(i => i % 12 - 6).ToArray(),
Retries = Enumerable.Range(-2, 100).Select(i => i % 12 - 6).ToArray(),
},
});
}
overlay.ShowBeatmapSet(new BeatmapSetInfo
{
Metadata = new BeatmapMetadata
{
Title = @"multiple rulesets beatmap",
Artist = @"none",
Author = new User
{
Username = "BanchoBot",
Id = 3,
}
},
OnlineInfo = new BeatmapSetOnlineInfo
{
Covers = new BeatmapSetOnlineCovers(),
},
Metrics = new BeatmapSetMetrics { Ratings = Enumerable.Range(0, 11).ToArray() },
Beatmaps = beatmaps
});
});
AddAssert("shown beatmaps of current ruleset", () => overlay.Header.Picker.Difficulties.All(b => b.Beatmap.Ruleset.Equals(overlay.Header.RulesetSelector.Current.Value)));
AddAssert("left-most beatmap selected", () => overlay.Header.Picker.Difficulties.First().State == BeatmapPicker.DifficultySelectorState.Selected);
}
[Test]
public void TestHide()
{
2018-04-13 09:19:50 +00:00
AddStep(@"hide", overlay.Hide);
}
[Test]
public void TestShowWithNoReload()
{
2018-04-13 09:19:50 +00:00
AddStep(@"show without reload", overlay.Show);
}
private BeatmapSetInfo createManyDifficultiesBeatmapSet()
{
var beatmaps = new List<BeatmapInfo>();
for (int i = 1; i < 41; i++)
{
beatmaps.Add(new BeatmapInfo
{
OnlineBeatmapID = i * 10,
Version = $"Test #{i}",
Ruleset = Ruleset.Value,
StarDifficulty = 2 + i * 0.1,
BaseDifficulty = new BeatmapDifficulty
{
OverallDifficulty = 3.5f,
},
OnlineInfo = new BeatmapOnlineInfo(),
Metrics = new BeatmapMetrics
{
Fails = Enumerable.Range(1, 100).Select(j => j % 12 - 6).ToArray(),
Retries = Enumerable.Range(-2, 100).Select(j => j % 12 - 6).ToArray(),
},
});
}
return new BeatmapSetInfo
{
OnlineBeatmapSetID = 123,
Metadata = new BeatmapMetadata
{
Title = @"many difficulties beatmap",
Artist = @"none",
Author = new User
{
Username = @"BanchoBot",
Id = 3,
},
},
OnlineInfo = new BeatmapSetOnlineInfo
{
Preview = @"https://b.ppy.sh/preview/123.mp3",
HasVideo = true,
HasStoryboard = true,
Covers = new BeatmapSetOnlineCovers(),
},
Metrics = new BeatmapSetMetrics { Ratings = Enumerable.Range(0, 11).ToArray() },
Beatmaps = beatmaps,
};
}
private void downloadAssert(bool shown)
{
AddAssert($"is download button {(shown ? "shown" : "hidden")}", () => overlay.Header.DownloadButtonsVisible == shown);
}
private class TestBeatmapSetOverlay : BeatmapSetOverlay
{
public new Header Header => base.Header;
}
2018-04-13 09:19:50 +00:00
}
}