public void TestImportMods() { using (HeadlessGameHost host = new CleanRunHeadlessGameHost()) { try { var osu = LoadOsuIntoHost(host, true); var beatmap = BeatmapImportHelper.LoadOszIntoOsu(osu, TestResources.GetQuickTestBeatmapForImport()).GetResultSafely(); var toImport = new ScoreInfo { User = new APIUser { Username = "******" }, BeatmapInfo = beatmap.Beatmaps.First(), Ruleset = new OsuRuleset().RulesetInfo, Mods = new Mod[] { new OsuModHardRock(), new OsuModDoubleTime() }, }; var imported = LoadScoreIntoOsu(osu, toImport); Assert.IsTrue(imported.Mods.Any(m => m is OsuModHardRock)); Assert.IsTrue(imported.Mods.Any(m => m is OsuModDoubleTime)); } finally { host.Exit(); } } }
private Func <Player> playToResults() { Player player = null; IWorkingBeatmap beatmap() => Game.Beatmap.Value; Screens.Select.SongSelect songSelect = null; PushAndConfirm(() => songSelect = new TestPlaySongSelect()); AddUntilStep("wait for song select", () => songSelect.BeatmapSetsLoaded); AddStep("import beatmap", () => BeatmapImportHelper.LoadQuickOszIntoOsu(Game).WaitSafely()); AddUntilStep("wait for selected", () => !Game.Beatmap.IsDefault); AddStep("set mods", () => Game.SelectedMods.Value = new Mod[] { new OsuModNoFail(), new OsuModDoubleTime { SpeedChange = { Value = 2 } } }); AddStep("press enter", () => InputManager.Key(Key.Enter)); AddUntilStep("wait for player", () => { // dismiss any notifications that may appear (ie. muted notification). clickMouseInCentre(); return((player = Game.ScreenStack.CurrentScreen as Player) != null); }); AddUntilStep("wait for track playing", () => beatmap().Track.IsRunning); AddStep("seek to near end", () => player.ChildrenOfType <GameplayClockContainer>().First().Seek(beatmap().Beatmap.HitObjects[^ 1].StartTime - 1000));
public void TestRetryCountIncrements() { Player player = null; Screens.Select.SongSelect songSelect = null; PushAndConfirm(() => songSelect = new TestPlaySongSelect()); AddUntilStep("wait for song select", () => songSelect.BeatmapSetsLoaded); AddStep("import beatmap", () => BeatmapImportHelper.LoadQuickOszIntoOsu(Game).WaitSafely()); AddUntilStep("wait for selected", () => !Game.Beatmap.IsDefault); AddStep("press enter", () => InputManager.Key(Key.Enter)); AddUntilStep("wait for player", () => { // dismiss any notifications that may appear (ie. muted notification). clickMouseInCentre(); return((player = Game.ScreenStack.CurrentScreen as Player) != null); }); AddAssert("retry count is 0", () => player.RestartCount == 0); AddStep("attempt to retry", () => player.ChildrenOfType <HotkeyRetryOverlay>().First().Action()); AddUntilStep("wait for old player gone", () => Game.ScreenStack.CurrentScreen != player); AddUntilStep("get new player", () => (player = Game.ScreenStack.CurrentScreen as Player) != null); AddAssert("retry count is 1", () => player.RestartCount == 1); }
public void TestImportStatistics() { using (HeadlessGameHost host = new CleanRunHeadlessGameHost()) { try { var osu = LoadOsuIntoHost(host, true); var beatmap = BeatmapImportHelper.LoadOszIntoOsu(osu, TestResources.GetQuickTestBeatmapForImport()).GetResultSafely(); var toImport = new ScoreInfo { User = new APIUser { Username = "******" }, BeatmapInfo = beatmap.Beatmaps.First(), Ruleset = new OsuRuleset().RulesetInfo, Statistics = new Dictionary <HitResult, int> { { HitResult.Perfect, 100 }, { HitResult.Miss, 50 } } }; var imported = LoadScoreIntoOsu(osu, toImport); Assert.AreEqual(toImport.Statistics[HitResult.Perfect], imported.Statistics[HitResult.Perfect]); Assert.AreEqual(toImport.Statistics[HitResult.Miss], imported.Statistics[HitResult.Miss]); } finally { host.Exit(); } } }
private void advanceToSongSelect() { PushAndConfirm(() => songSelect = new TestPlaySongSelect()); AddUntilStep("wait for song select", () => songSelect.BeatmapSetsLoaded); AddStep("import beatmap", () => BeatmapImportHelper.LoadQuickOszIntoOsu(Game).WaitSafely()); AddUntilStep("wait for selected", () => !Game.Beatmap.IsDefault); }
public void TestGameplayKeyBindings() { AddAssert("databased key is default", () => firstOsuRulesetKeyBindings.KeyCombination.Keys.SequenceEqual(new[] { InputKey.Z })); AddStep("open settings", () => { Game.Settings.Show(); }); // Until step requires as settings has a delayed load. AddUntilStep("wait for button", () => configureBindingsButton?.Enabled.Value == true); AddStep("scroll to section", () => Game.Settings.SectionsContainer.ScrollTo(configureBindingsButton)); AddStep("press button", () => configureBindingsButton.TriggerClick()); AddUntilStep("wait for panel", () => keyBindingPanel?.IsLoaded == true); AddUntilStep("wait for osu subsection", () => osuBindingSubsection?.IsLoaded == true); AddStep("scroll to section", () => keyBindingPanel.SectionsContainer.ScrollTo(osuBindingSubsection)); AddWaitStep("wait for scroll to end", 3); AddStep("start rebinding first osu! key", () => { var button = osuBindingSubsection.ChildrenOfType <KeyBindingRow>().First(); InputManager.MoveMouseTo(button); InputManager.Click(MouseButton.Left); }); AddStep("Press 's'", () => InputManager.Key(Key.S)); AddUntilStep("wait for database updated", () => firstOsuRulesetKeyBindings.KeyCombination.Keys.SequenceEqual(new[] { InputKey.S })); AddStep("close settings", () => Game.Settings.Hide()); AddStep("import beatmap", () => BeatmapImportHelper.LoadQuickOszIntoOsu(Game).WaitSafely()); PushAndConfirm(() => new PlaySongSelect()); AddUntilStep("wait for selection", () => !Game.Beatmap.IsDefault); AddStep("enter gameplay", () => InputManager.Key(Key.Enter)); AddUntilStep("wait for player", () => { // dismiss any notifications that may appear (ie. muted notification). clickMouseInCentre(); return(player != null); }); AddUntilStep("wait for gameplay", () => player?.IsBreakTime.Value == false); AddStep("press 'z'", () => InputManager.Key(Key.Z)); AddAssert("key counter didn't increase", () => keyCounter.CountPresses == 0); AddStep("press 's'", () => InputManager.Key(Key.S)); AddAssert("key counter did increase", () => keyCounter.CountPresses == 1); }
private void switchToGameplayScene() { AddStep("import beatmap", () => BeatmapImportHelper.LoadQuickOszIntoOsu(Game).WaitSafely()); AddUntilStep("wait for selected", () => !Game.Beatmap.IsDefault); AddStep("Click gameplay scene button", () => { InputManager.MoveMouseTo(skinEditor.ChildrenOfType <SkinEditorSceneLibrary.SceneButton>().First(b => b.Text == "Gameplay")); InputManager.Click(MouseButton.Left); }); AddUntilStep("wait for player", () => { DismissAnyNotifications(); return(Game.ScreenStack.CurrentScreen is Player); }); }
public void TestBasicImport() { using (HeadlessGameHost host = new CleanRunHeadlessGameHost()) { try { var osu = LoadOsuIntoHost(host, true); var beatmap = BeatmapImportHelper.LoadOszIntoOsu(osu, TestResources.GetQuickTestBeatmapForImport()).GetResultSafely(); var toImport = new ScoreInfo { Rank = ScoreRank.B, TotalScore = 987654, Accuracy = 0.8, MaxCombo = 500, Combo = 250, User = new APIUser { Username = "******" }, Date = DateTimeOffset.Now, OnlineID = 12345, Ruleset = new OsuRuleset().RulesetInfo, BeatmapInfo = beatmap.Beatmaps.First() }; var imported = LoadScoreIntoOsu(osu, toImport); Assert.AreEqual(toImport.Rank, imported.Rank); Assert.AreEqual(toImport.TotalScore, imported.TotalScore); Assert.AreEqual(toImport.Accuracy, imported.Accuracy); Assert.AreEqual(toImport.MaxCombo, imported.MaxCombo); Assert.AreEqual(toImport.User.Username, imported.User.Username); Assert.AreEqual(toImport.Date, imported.Date); Assert.AreEqual(toImport.OnlineID, imported.OnlineID); } finally { host.Exit(); } } }
private void loadToPlayerNonBreakTime() { Player player = null; Screens.Select.SongSelect songSelect = null; PushAndConfirm(() => songSelect = new TestSceneScreenNavigation.TestPlaySongSelect()); AddUntilStep("wait for song select", () => songSelect.BeatmapSetsLoaded); AddStep("import beatmap", () => BeatmapImportHelper.LoadOszIntoOsu(Game, virtualTrack: true).WaitSafely()); AddUntilStep("wait for selected", () => !Game.Beatmap.IsDefault); AddStep("press enter", () => InputManager.Key(Key.Enter)); AddUntilStep("wait for player", () => { DismissAnyNotifications(); return((player = Game.ScreenStack.CurrentScreen as Player) != null); }); AddUntilStep("wait for play time active", () => !player.IsBreakTime.Value); }
public void SetupSteps() { AddStep("load dependencies", () => { LoadScreen(dependenciesScreen = new DependenciesScreen()); // The dependencies screen gets suspended so it stops receiving updates. So its children are manually added to the test scene instead. Children = new Drawable[] { dependenciesScreen.UserLookupCache, dependenciesScreen.SpectatorClient, }; }); AddUntilStep("wait for dependencies to load", () => dependenciesScreen.IsLoaded); AddStep("import beatmap", () => { importedBeatmap = BeatmapImportHelper.LoadOszIntoOsu(game, virtualTrack: true).GetResultSafely(); importedBeatmapId = importedBeatmap.Beatmaps.First(b => b.Ruleset.OnlineID == 0).OnlineID; }); }
public void TestSongContinuesAfterExitPlayer(bool withUserPause) { Player player = null; IWorkingBeatmap beatmap() => Game.Beatmap.Value; Screens.Select.SongSelect songSelect = null; PushAndConfirm(() => songSelect = new TestPlaySongSelect()); AddUntilStep("wait for song select", () => songSelect.BeatmapSetsLoaded); AddStep("import beatmap", () => BeatmapImportHelper.LoadOszIntoOsu(Game, virtualTrack: true).WaitSafely()); AddUntilStep("wait for selected", () => !Game.Beatmap.IsDefault); if (withUserPause) { AddStep("pause", () => Game.Dependencies.Get <MusicController>().Stop(true)); } AddStep("press enter", () => InputManager.Key(Key.Enter)); AddUntilStep("wait for player", () => { // dismiss any notifications that may appear (ie. muted notification). clickMouseInCentre(); return((player = Game.ScreenStack.CurrentScreen as Player) != null); }); AddUntilStep("wait for fail", () => player.GameplayState.HasFailed); AddUntilStep("wait for track stop", () => !Game.MusicController.IsPlaying); AddAssert("Ensure time before preview point", () => Game.MusicController.CurrentTrack.CurrentTime < beatmap().BeatmapInfo.Metadata.PreviewTime); pushEscape(); AddUntilStep("wait for track playing", () => Game.MusicController.IsPlaying); AddAssert("Ensure time wasn't reset to preview point", () => Game.MusicController.CurrentTrack.CurrentTime < beatmap().BeatmapInfo.Metadata.PreviewTime); }
public void TestOnlineScoreIsAvailableLocally() { using (HeadlessGameHost host = new CleanRunHeadlessGameHost()) { try { var osu = LoadOsuIntoHost(host, true); var beatmap = BeatmapImportHelper.LoadOszIntoOsu(osu, TestResources.GetQuickTestBeatmapForImport()).GetResultSafely(); LoadScoreIntoOsu(osu, new ScoreInfo { User = new APIUser { Username = "******" }, BeatmapInfo = beatmap.Beatmaps.First(), Ruleset = new OsuRuleset().RulesetInfo, OnlineID = 2 }, new TestArchiveReader()); var scoreManager = osu.Dependencies.Get <ScoreManager>(); // Note: A new score reference is used here since the import process mutates the original object to set an ID Assert.That(scoreManager.IsAvailableLocally(new ScoreInfo { User = new APIUser { Username = "******" }, BeatmapInfo = beatmap.Beatmaps.First(), OnlineID = 2 })); } finally { host.Exit(); } } }
private void importAndWaitForSongSelect() { AddStep("import beatmap", () => BeatmapImportHelper.LoadQuickOszIntoOsu(Game).WaitSafely()); PushAndConfirm(() => new TestPlaySongSelect()); AddUntilStep("beatmap updated", () => Game.Beatmap.Value.BeatmapSetInfo.OnlineID == 241526); }
public void TestEditComponentDuringGameplay() { Screens.Select.SongSelect songSelect = null; PushAndConfirm(() => songSelect = new TestPlaySongSelect()); AddUntilStep("wait for song select", () => songSelect.BeatmapSetsLoaded); AddStep("import beatmap", () => BeatmapImportHelper.LoadQuickOszIntoOsu(Game).WaitSafely()); AddUntilStep("wait for selected", () => !Game.Beatmap.IsDefault); SkinEditor skinEditor = null; AddStep("open skin editor", () => { InputManager.PressKey(Key.ControlLeft); InputManager.PressKey(Key.ShiftLeft); InputManager.Key(Key.S); InputManager.ReleaseKey(Key.ControlLeft); InputManager.ReleaseKey(Key.ShiftLeft); }); AddUntilStep("get skin editor", () => (skinEditor = Game.ChildrenOfType <SkinEditor>().FirstOrDefault()) != null); AddStep("Click gameplay scene button", () => { skinEditor.ChildrenOfType <SkinEditorSceneLibrary.SceneButton>().First(b => b.Text == "Gameplay").TriggerClick(); }); AddUntilStep("wait for player", () => { // dismiss any notifications that may appear (ie. muted notification). clickMouseInCentre(); return(Game.ScreenStack.CurrentScreen is Player); }); BarHitErrorMeter hitErrorMeter = null; AddUntilStep("select bar hit error blueprint", () => { var blueprint = skinEditor.ChildrenOfType <SkinBlueprint>().FirstOrDefault(b => b.Item is BarHitErrorMeter); if (blueprint == null) { return(false); } hitErrorMeter = (BarHitErrorMeter)blueprint.Item; skinEditor.SelectedComponents.Clear(); skinEditor.SelectedComponents.Add(blueprint.Item); return(true); }); AddAssert("value is default", () => hitErrorMeter.JudgementLineThickness.IsDefault); AddStep("hover first slider", () => { InputManager.MoveMouseTo( skinEditor.ChildrenOfType <SkinSettingsToolbox>().First() .ChildrenOfType <SettingsSlider <float> >().First() .ChildrenOfType <SliderBar <float> >().First() ); }); AddStep("adjust slider via keyboard", () => InputManager.Key(Key.Left)); AddAssert("value is less than default", () => hitErrorMeter.JudgementLineThickness.Value < hitErrorMeter.JudgementLineThickness.Default); }
private void load(OsuGameBase osu) { importedSet = BeatmapImportHelper.LoadQuickOszIntoOsu(osu).GetResultSafely(); }
private void load(OsuGameBase osu, IAPIProvider api) { this.api = api; testBeatmap = BeatmapImportHelper.LoadOszIntoOsu(osu).GetResultSafely(); }
public override void SetUpSteps() { AddStep("import test beatmap", () => importedBeatmapSet = BeatmapImportHelper.LoadOszIntoOsu(game, virtualTrack: true).GetResultSafely()); base.SetUpSteps(); }
private void load() { importedSet = BeatmapImportHelper.LoadOszIntoOsu(game, virtualTrack: true).GetResultSafely(); importedBeatmap = importedSet.Beatmaps.First(b => b.Ruleset.OnlineID == 0); importedBeatmapId = importedBeatmap.OnlineID; }