1
0
mirror of https://github.com/ppy/osu.git synced 2025-02-15 22:22:54 +08:00

Fix tests/add placeholder item tests

This commit is contained in:
smoogipoo 2020-09-08 17:05:43 +09:00
parent 2e40ff25f7
commit bee450ae1e
3 changed files with 72 additions and 27 deletions

View File

@ -7,11 +7,14 @@ using osu.Framework.Allocation;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.UserInterface; using osu.Framework.Graphics.UserInterface;
using osu.Framework.Platform;
using osu.Framework.Testing; using osu.Framework.Testing;
using osu.Game.Beatmaps;
using osu.Game.Collections; using osu.Game.Collections;
using osu.Game.Graphics.UserInterface;
using osu.Game.Overlays; using osu.Game.Overlays;
using osu.Game.Overlays.Dialog; using osu.Game.Overlays.Dialog;
using osu.Game.Rulesets;
using osu.Game.Tests.Resources;
using osuTK; using osuTK;
using osuTK.Input; using osuTK.Input;
@ -25,6 +28,9 @@ namespace osu.Game.Tests.Visual.Collections
private readonly DialogOverlay dialogOverlay; private readonly DialogOverlay dialogOverlay;
private readonly BeatmapCollectionManager manager; private readonly BeatmapCollectionManager manager;
private RulesetStore rulesets;
private BeatmapManager beatmapManager;
private ManageCollectionsDialog dialog; private ManageCollectionsDialog dialog;
public TestSceneManageCollectionsDialog() public TestSceneManageCollectionsDialog()
@ -37,6 +43,15 @@ namespace osu.Game.Tests.Visual.Collections
}); });
} }
[BackgroundDependencyLoader]
private void load(GameHost host)
{
Dependencies.Cache(rulesets = new RulesetStore(ContextFactory));
Dependencies.Cache(beatmapManager = new BeatmapManager(LocalStorage, ContextFactory, rulesets, null, Audio, host, Beatmap.Default));
beatmapManager.Import(TestResources.GetTestBeatmapForImport()).Wait();
}
protected override IReadOnlyDependencyContainer CreateChildDependencies(IReadOnlyDependencyContainer parent) protected override IReadOnlyDependencyContainer CreateChildDependencies(IReadOnlyDependencyContainer parent)
{ {
var dependencies = new DependencyContainer(base.CreateChildDependencies(parent)); var dependencies = new DependencyContainer(base.CreateChildDependencies(parent));
@ -65,6 +80,12 @@ namespace osu.Game.Tests.Visual.Collections
AddStep("hide dialog", () => dialog.Hide()); AddStep("hide dialog", () => dialog.Hide());
} }
[Test]
public void TestLastItemIsPlaceholder()
{
AddAssert("last item is placeholder", () => !manager.Collections.Contains(dialog.ChildrenOfType<DrawableCollectionListItem>().Last().Model));
}
[Test] [Test]
public void TestAddCollectionExternal() public void TestAddCollectionExternal()
{ {
@ -78,23 +99,34 @@ namespace osu.Game.Tests.Visual.Collections
} }
[Test] [Test]
public void TestAddCollectionViaButton() public void TestFocusPlaceholderDoesNotCreateCollection()
{ {
AddStep("press new collection button", () => AddStep("focus placeholder", () =>
{ {
InputManager.MoveMouseTo(dialog.ChildrenOfType<OsuButton>().Single()); InputManager.MoveMouseTo(dialog.ChildrenOfType<DrawableCollectionListItem>().Last());
InputManager.Click(MouseButton.Left); InputManager.Click(MouseButton.Left);
}); });
assertCollectionCount(0);
}
[Test]
public void TestAddCollectionViaPlaceholder()
{
DrawableCollectionListItem placeholderItem = null;
AddStep("focus placeholder", () =>
{
InputManager.MoveMouseTo(placeholderItem = dialog.ChildrenOfType<DrawableCollectionListItem>().Last());
InputManager.Click(MouseButton.Left);
});
// Done directly via the collection since InputManager methods cannot add text to textbox...
AddStep("change collection name", () => placeholderItem.Model.Name.Value = "a");
assertCollectionCount(1); assertCollectionCount(1);
AddAssert("collection now exists", () => manager.Collections.Contains(placeholderItem.Model));
AddStep("press again", () => AddAssert("last item is placeholder", () => !manager.Collections.Contains(dialog.ChildrenOfType<DrawableCollectionListItem>().Last().Model));
{
InputManager.MoveMouseTo(dialog.ChildrenOfType<OsuButton>().Single());
InputManager.Click(MouseButton.Left);
});
assertCollectionCount(2);
} }
[Test] [Test]
@ -117,7 +149,7 @@ namespace osu.Game.Tests.Visual.Collections
AddStep("add two collections", () => manager.Collections.AddRange(new[] AddStep("add two collections", () => manager.Collections.AddRange(new[]
{ {
new BeatmapCollection { Name = { Value = "1" } }, new BeatmapCollection { Name = { Value = "1" } },
new BeatmapCollection { Name = { Value = "2" } }, new BeatmapCollection { Name = { Value = "2" }, Beatmaps = { beatmapManager.GetAllUsableBeatmapSets().First().Beatmaps[0] } },
})); }));
assertCollectionCount(2); assertCollectionCount(2);
@ -128,6 +160,16 @@ namespace osu.Game.Tests.Visual.Collections
InputManager.Click(MouseButton.Left); InputManager.Click(MouseButton.Left);
}); });
AddAssert("dialog not displayed", () => dialogOverlay.CurrentDialog == null);
assertCollectionCount(1);
assertCollectionName(0, "2");
AddStep("click first delete button", () =>
{
InputManager.MoveMouseTo(dialog.ChildrenOfType<DrawableCollectionListItem.DeleteButton>().First(), new Vector2(5, 0));
InputManager.Click(MouseButton.Left);
});
AddAssert("dialog displayed", () => dialogOverlay.CurrentDialog is DeleteCollectionDialog); AddAssert("dialog displayed", () => dialogOverlay.CurrentDialog is DeleteCollectionDialog);
AddStep("click confirmation", () => AddStep("click confirmation", () =>
{ {
@ -135,8 +177,7 @@ namespace osu.Game.Tests.Visual.Collections
InputManager.Click(MouseButton.Left); InputManager.Click(MouseButton.Left);
}); });
assertCollectionCount(1); assertCollectionCount(0);
assertCollectionName(0, "2");
} }
[Test] [Test]
@ -144,11 +185,10 @@ namespace osu.Game.Tests.Visual.Collections
{ {
AddStep("add two collections", () => manager.Collections.AddRange(new[] AddStep("add two collections", () => manager.Collections.AddRange(new[]
{ {
new BeatmapCollection { Name = { Value = "1" } }, new BeatmapCollection { Name = { Value = "1" }, Beatmaps = { beatmapManager.GetAllUsableBeatmapSets().First().Beatmaps[0] } },
new BeatmapCollection { Name = { Value = "2" } },
})); }));
assertCollectionCount(2); assertCollectionCount(1);
AddStep("click first delete button", () => AddStep("click first delete button", () =>
{ {
@ -157,13 +197,13 @@ namespace osu.Game.Tests.Visual.Collections
}); });
AddAssert("dialog displayed", () => dialogOverlay.CurrentDialog is DeleteCollectionDialog); AddAssert("dialog displayed", () => dialogOverlay.CurrentDialog is DeleteCollectionDialog);
AddStep("click confirmation", () => AddStep("click cancellation", () =>
{ {
InputManager.MoveMouseTo(dialogOverlay.CurrentDialog.ChildrenOfType<PopupDialogButton>().Last()); InputManager.MoveMouseTo(dialogOverlay.CurrentDialog.ChildrenOfType<PopupDialogButton>().Last());
InputManager.Click(MouseButton.Left); InputManager.Click(MouseButton.Left);
}); });
assertCollectionCount(2); assertCollectionCount(1);
} }
[Test] [Test]
@ -196,7 +236,7 @@ namespace osu.Game.Tests.Visual.Collections
} }
private void assertCollectionCount(int count) private void assertCollectionCount(int count)
=> AddUntilStep($"{count} collections shown", () => dialog.ChildrenOfType<DrawableCollectionListItem>().Count() == count); => AddUntilStep($"{count} collections shown", () => dialog.ChildrenOfType<DrawableCollectionListItem>().Count(i => i.IsCreated.Value) == count);
private void assertCollectionName(int index, string name) private void assertCollectionName(int index, string name)
=> AddUntilStep($"item {index + 1} has correct name", () => dialog.ChildrenOfType<DrawableCollectionListItem>().ElementAt(index).ChildrenOfType<TextBox>().First().Text == name); => AddUntilStep($"item {index + 1} has correct name", () => dialog.ChildrenOfType<DrawableCollectionListItem>().ElementAt(index).ChildrenOfType<TextBox>().First().Text == name);

View File

@ -42,13 +42,6 @@ namespace osu.Game.Tests.Visual.SongSelect
}); });
} }
protected override IReadOnlyDependencyContainer CreateChildDependencies(IReadOnlyDependencyContainer parent)
{
var dependencies = new DependencyContainer(base.CreateChildDependencies(parent));
dependencies.Cache(collectionManager);
return dependencies;
}
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(GameHost host) private void load(GameHost host)
{ {
@ -58,6 +51,13 @@ namespace osu.Game.Tests.Visual.SongSelect
beatmapManager.Import(TestResources.GetTestBeatmapForImport()).Wait(); beatmapManager.Import(TestResources.GetTestBeatmapForImport()).Wait();
} }
protected override IReadOnlyDependencyContainer CreateChildDependencies(IReadOnlyDependencyContainer parent)
{
var dependencies = new DependencyContainer(base.CreateChildDependencies(parent));
dependencies.Cache(collectionManager);
return dependencies;
}
[SetUp] [SetUp]
public void SetUp() => Schedule(() => public void SetUp() => Schedule(() =>
{ {

View File

@ -27,6 +27,11 @@ namespace osu.Game.Collections
private const float item_height = 35; private const float item_height = 35;
private const float button_width = item_height * 0.75f; private const float button_width = item_height * 0.75f;
/// <summary>
/// Whether the <see cref="BeatmapCollection"/> currently exists inside the <see cref="BeatmapCollectionManager"/>.
/// </summary>
public IBindable<bool> IsCreated => isCreated;
private readonly Bindable<bool> isCreated = new Bindable<bool>(); private readonly Bindable<bool> isCreated = new Bindable<bool>();
/// <summary> /// <summary>