2021-10-06 03:41:17 +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.
using System.Linq ;
using NUnit.Framework ;
using osu.Framework.Input ;
using osu.Framework.Testing ;
using osu.Game.Beatmaps.ControlPoints ;
using osu.Game.Rulesets.Edit ;
using osu.Game.Screens.Edit ;
2021-10-14 13:12:38 +00:00
using osu.Game.Screens.Edit.Setup ;
2021-10-06 03:41:17 +00:00
using osu.Game.Screens.Menu ;
using osu.Game.Screens.Select ;
using osuTK.Input ;
namespace osu.Game.Tests.Visual.Editing
{
public class TestSceneEditorSaving : OsuGameTestScene
{
private Editor editor = > Game . ChildrenOfType < Editor > ( ) . FirstOrDefault ( ) ;
private EditorBeatmap editorBeatmap = > ( EditorBeatmap ) editor . Dependencies . Get ( typeof ( EditorBeatmap ) ) ;
/// <summary>
/// Tests the general expected flow of creating a new beatmap, saving it, then loading it back from song select.
/// </summary>
[Test]
public void TestNewBeatmapSaveThenLoad ( )
{
AddStep ( "set default beatmap" , ( ) = > Game . Beatmap . SetDefault ( ) ) ;
PushAndConfirm ( ( ) = > new EditorLoader ( ) ) ;
2021-10-14 05:40:20 +00:00
AddUntilStep ( "wait for editor load" , ( ) = > editor ? . IsLoaded = = true ) ;
2021-10-06 03:41:17 +00:00
2021-10-14 13:12:38 +00:00
AddUntilStep ( "wait for metadata screen load" , ( ) = > editor . ChildrenOfType < MetadataSection > ( ) . FirstOrDefault ( ) ? . IsLoaded = = true ) ;
2021-10-15 02:14:03 +00:00
// We intentionally switch away from the metadata screen, else there is a feedback loop with the textbox handling which causes metadata changes below to get overwritten.
AddStep ( "Enter compose mode" , ( ) = > InputManager . Key ( Key . F1 ) ) ;
AddUntilStep ( "Wait for compose mode load" , ( ) = > editor . ChildrenOfType < HitObjectComposer > ( ) . FirstOrDefault ( ) ? . IsLoaded = = true ) ;
2021-10-09 14:12:08 +00:00
AddStep ( "Set overall difficulty" , ( ) = > editorBeatmap . Difficulty . OverallDifficulty = 7 ) ;
2021-10-14 05:40:20 +00:00
AddStep ( "Set artist and title" , ( ) = >
{
editorBeatmap . BeatmapInfo . Metadata . Artist = "artist" ;
editorBeatmap . BeatmapInfo . Metadata . Title = "title" ;
} ) ;
2022-01-23 19:28:19 +00:00
AddStep ( "Set author" , ( ) = > editorBeatmap . BeatmapInfo . Metadata . Author . Username = "author" ) ;
2021-11-11 08:19:53 +00:00
AddStep ( "Set difficulty name" , ( ) = > editorBeatmap . BeatmapInfo . DifficultyName = "difficulty" ) ;
2021-10-09 14:12:08 +00:00
2021-10-06 03:41:17 +00:00
AddStep ( "Add timing point" , ( ) = > editorBeatmap . ControlPointInfo . Add ( 0 , new TimingControlPoint ( ) ) ) ;
AddStep ( "Change to placement mode" , ( ) = > InputManager . Key ( Key . Number2 ) ) ;
AddStep ( "Move to playfield" , ( ) = > InputManager . MoveMouseTo ( Game . ScreenSpaceDrawQuad . Centre ) ) ;
AddStep ( "Place single hitcircle" , ( ) = > InputManager . Click ( MouseButton . Left ) ) ;
2021-10-14 05:40:20 +00:00
checkMutations ( ) ;
2021-10-12 10:40:35 +00:00
2021-10-26 07:06:02 +00:00
// After placement these must be non-default as defaults are read-only.
AddAssert ( "Placed object has non-default control points" , ( ) = >
editorBeatmap . HitObjects [ 0 ] . SampleControlPoint ! = SampleControlPoint . DEFAULT & &
editorBeatmap . HitObjects [ 0 ] . DifficultyControlPoint ! = DifficultyControlPoint . DEFAULT ) ;
2021-10-12 10:40:35 +00:00
AddStep ( "Save" , ( ) = > InputManager . Keys ( PlatformAction . Save ) ) ;
2021-10-14 05:40:20 +00:00
checkMutations ( ) ;
2022-01-23 19:28:19 +00:00
AddAssert ( "Beatmap has correct .osu file path" , ( ) = > editorBeatmap . BeatmapInfo . Path = = "artist - title (author) [difficulty].osu" ) ;
2021-10-14 05:40:20 +00:00
2021-10-12 10:40:35 +00:00
AddStep ( "Exit" , ( ) = > InputManager . Key ( Key . Escape ) ) ;
2021-10-06 03:41:17 +00:00
AddUntilStep ( "Wait for main menu" , ( ) = > Game . ScreenStack . CurrentScreen is MainMenu ) ;
2021-11-25 12:11:13 +00:00
Screens . Select . SongSelect songSelect = null ;
PushAndConfirm ( ( ) = > songSelect = new PlaySongSelect ( ) ) ;
AddUntilStep ( "wait for carousel load" , ( ) = > songSelect . BeatmapSetsLoaded ) ;
2021-10-06 03:41:17 +00:00
AddUntilStep ( "Wait for beatmap selected" , ( ) = > ! Game . Beatmap . IsDefault ) ;
AddStep ( "Open options" , ( ) = > InputManager . Key ( Key . F3 ) ) ;
AddStep ( "Enter editor" , ( ) = > InputManager . Key ( Key . Number5 ) ) ;
AddUntilStep ( "Wait for editor load" , ( ) = > editor ! = null ) ;
2021-10-14 05:40:20 +00:00
checkMutations ( ) ;
}
private void checkMutations ( )
{
2021-10-06 03:41:17 +00:00
AddAssert ( "Beatmap contains single hitcircle" , ( ) = > editorBeatmap . HitObjects . Count = = 1 ) ;
2021-10-09 14:12:08 +00:00
AddAssert ( "Beatmap has correct overall difficulty" , ( ) = > editorBeatmap . Difficulty . OverallDifficulty = = 7 ) ;
2021-10-14 05:40:20 +00:00
AddAssert ( "Beatmap has correct metadata" , ( ) = > editorBeatmap . BeatmapInfo . Metadata . Artist = = "artist" & & editorBeatmap . BeatmapInfo . Metadata . Title = = "title" ) ;
2022-01-23 19:28:19 +00:00
AddAssert ( "Beatmap has correct author" , ( ) = > editorBeatmap . BeatmapInfo . Metadata . Author . Username = = "author" ) ;
2021-11-11 08:19:53 +00:00
AddAssert ( "Beatmap has correct difficulty name" , ( ) = > editorBeatmap . BeatmapInfo . DifficultyName = = "difficulty" ) ;
2021-10-06 03:41:17 +00:00
}
}
}