Fix another test scene

This commit is contained in:
smoogipoo
2021-03-03 19:40:19 +09:00
parent 30ff0b83c1
commit 6affe33fb2
4 changed files with 52 additions and 26 deletions

View File

@ -1,10 +1,13 @@
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence. // 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. // See the LICENCE file in the repository root for full licence text.
using System;
using NUnit.Framework; using NUnit.Framework;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Testing; using osu.Framework.Testing;
using osu.Game.Online.Rooms; using osu.Game.Online.Rooms;
using osu.Game.Screens.OnlinePlay.Components;
using osu.Game.Tests.Beatmaps;
namespace osu.Game.Tests.Visual.Multiplayer namespace osu.Game.Tests.Visual.Multiplayer
{ {
@ -21,15 +24,15 @@ namespace osu.Game.Tests.Visual.Multiplayer
{ {
createRoomManager().With(d => d.OnLoadComplete += _ => createRoomManager().With(d => d.OnLoadComplete += _ =>
{ {
roomManager.CreateRoom(new Room { Name = { Value = "1" } }); roomManager.CreateRoom(createRoom(r => r.Name.Value = "1"));
roomManager.PartRoom(); roomManager.PartRoom();
roomManager.CreateRoom(new Room { Name = { Value = "2" } }); roomManager.CreateRoom(createRoom(r => r.Name.Value = "2"));
roomManager.PartRoom(); roomManager.PartRoom();
roomManager.ClearRooms(); roomManager.ClearRooms();
}); });
}); });
AddAssert("manager polled for rooms", () => roomManager.Rooms.Count == 2); AddAssert("manager polled for rooms", () => ((RoomManager)roomManager).Rooms.Count == 2);
AddAssert("initial rooms received", () => roomManager.InitialRoomsReceived.Value); AddAssert("initial rooms received", () => roomManager.InitialRoomsReceived.Value);
} }
@ -40,16 +43,16 @@ namespace osu.Game.Tests.Visual.Multiplayer
{ {
createRoomManager().With(d => d.OnLoadComplete += _ => createRoomManager().With(d => d.OnLoadComplete += _ =>
{ {
roomManager.CreateRoom(new Room()); roomManager.CreateRoom(createRoom());
roomManager.PartRoom(); roomManager.PartRoom();
roomManager.CreateRoom(new Room()); roomManager.CreateRoom(createRoom());
roomManager.PartRoom(); roomManager.PartRoom();
}); });
}); });
AddStep("disconnect", () => roomContainer.Client.Disconnect()); AddStep("disconnect", () => roomContainer.Client.Disconnect());
AddAssert("rooms cleared", () => roomManager.Rooms.Count == 0); AddAssert("rooms cleared", () => ((RoomManager)roomManager).Rooms.Count == 0);
AddAssert("initial rooms not received", () => !roomManager.InitialRoomsReceived.Value); AddAssert("initial rooms not received", () => !roomManager.InitialRoomsReceived.Value);
} }
@ -60,9 +63,9 @@ namespace osu.Game.Tests.Visual.Multiplayer
{ {
createRoomManager().With(d => d.OnLoadComplete += _ => createRoomManager().With(d => d.OnLoadComplete += _ =>
{ {
roomManager.CreateRoom(new Room()); roomManager.CreateRoom(createRoom());
roomManager.PartRoom(); roomManager.PartRoom();
roomManager.CreateRoom(new Room()); roomManager.CreateRoom(createRoom());
roomManager.PartRoom(); roomManager.PartRoom();
}); });
}); });
@ -70,7 +73,7 @@ namespace osu.Game.Tests.Visual.Multiplayer
AddStep("disconnect", () => roomContainer.Client.Disconnect()); AddStep("disconnect", () => roomContainer.Client.Disconnect());
AddStep("connect", () => roomContainer.Client.Connect()); AddStep("connect", () => roomContainer.Client.Connect());
AddAssert("manager polled for rooms", () => roomManager.Rooms.Count == 2); AddAssert("manager polled for rooms", () => ((RoomManager)roomManager).Rooms.Count == 2);
AddAssert("initial rooms received", () => roomManager.InitialRoomsReceived.Value); AddAssert("initial rooms received", () => roomManager.InitialRoomsReceived.Value);
} }
@ -81,12 +84,12 @@ namespace osu.Game.Tests.Visual.Multiplayer
{ {
createRoomManager().With(d => d.OnLoadComplete += _ => createRoomManager().With(d => d.OnLoadComplete += _ =>
{ {
roomManager.CreateRoom(new Room()); roomManager.CreateRoom(createRoom());
roomManager.ClearRooms(); roomManager.ClearRooms();
}); });
}); });
AddAssert("manager not polled for rooms", () => roomManager.Rooms.Count == 0); AddAssert("manager not polled for rooms", () => ((RoomManager)roomManager).Rooms.Count == 0);
AddAssert("initial rooms not received", () => !roomManager.InitialRoomsReceived.Value); AddAssert("initial rooms not received", () => !roomManager.InitialRoomsReceived.Value);
} }
@ -97,7 +100,7 @@ namespace osu.Game.Tests.Visual.Multiplayer
{ {
createRoomManager().With(d => d.OnLoadComplete += _ => createRoomManager().With(d => d.OnLoadComplete += _ =>
{ {
roomManager.CreateRoom(new Room()); roomManager.CreateRoom(createRoom());
}); });
}); });
@ -111,7 +114,7 @@ namespace osu.Game.Tests.Visual.Multiplayer
{ {
createRoomManager().With(d => d.OnLoadComplete += _ => createRoomManager().With(d => d.OnLoadComplete += _ =>
{ {
roomManager.CreateRoom(new Room()); roomManager.CreateRoom(createRoom());
roomManager.PartRoom(); roomManager.PartRoom();
}); });
}); });
@ -126,7 +129,7 @@ namespace osu.Game.Tests.Visual.Multiplayer
{ {
createRoomManager().With(d => d.OnLoadComplete += _ => createRoomManager().With(d => d.OnLoadComplete += _ =>
{ {
var r = new Room(); var r = createRoom();
roomManager.CreateRoom(r); roomManager.CreateRoom(r);
roomManager.PartRoom(); roomManager.PartRoom();
roomManager.JoinRoom(r); roomManager.JoinRoom(r);
@ -136,6 +139,21 @@ namespace osu.Game.Tests.Visual.Multiplayer
AddUntilStep("multiplayer room joined", () => roomContainer.Client.Room != null); AddUntilStep("multiplayer room joined", () => roomContainer.Client.Room != null);
} }
private Room createRoom(Action<Room> initFunc = null)
{
var room = new Room();
room.Name.Value = "test room";
room.Playlist.Add(new PlaylistItem
{
Beatmap = { Value = new TestBeatmap(Ruleset.Value).BeatmapInfo },
Ruleset = { Value = Ruleset.Value }
});
initFunc?.Invoke(room);
return room;
}
private TestMultiplayerRoomManager createRoomManager() private TestMultiplayerRoomManager createRoomManager()
{ {
Child = roomContainer = new TestMultiplayerRoomContainer Child = roomContainer = new TestMultiplayerRoomContainer

View File

@ -28,12 +28,16 @@ namespace osu.Game.Tests.Visual.Multiplayer
[Resolved] [Resolved]
private IAPIProvider api { get; set; } = null!; private IAPIProvider api { get; set; } = null!;
[Resolved]
private Room apiRoom { get; set; } = null!;
[Resolved] [Resolved]
private BeatmapManager beatmaps { get; set; } = null!; private BeatmapManager beatmaps { get; set; } = null!;
private readonly TestMultiplayerRoomManager roomManager;
public TestMultiplayerClient(TestMultiplayerRoomManager roomManager)
{
this.roomManager = roomManager;
}
public void Connect() => isConnected.Value = true; public void Connect() => isConnected.Value = true;
public void Disconnect() => isConnected.Value = false; public void Disconnect() => isConnected.Value = false;
@ -98,7 +102,7 @@ namespace osu.Game.Tests.Visual.Multiplayer
protected override Task<MultiplayerRoom> JoinRoom(long roomId) protected override Task<MultiplayerRoom> JoinRoom(long roomId)
{ {
Debug.Assert(apiRoom != null); var apiRoom = roomManager.Rooms.Single(r => r.RoomID.Value == roomId);
var user = new MultiplayerRoomUser(api.LocalUser.Value.Id) var user = new MultiplayerRoomUser(api.LocalUser.Value.Id)
{ {
@ -178,8 +182,8 @@ namespace osu.Game.Tests.Visual.Multiplayer
protected override Task<BeatmapSetInfo> GetOnlineBeatmapSet(int beatmapId, CancellationToken cancellationToken = default) protected override Task<BeatmapSetInfo> GetOnlineBeatmapSet(int beatmapId, CancellationToken cancellationToken = default)
{ {
Debug.Assert(Room != null); Debug.Assert(Room != null);
Debug.Assert(apiRoom != null);
var apiRoom = roomManager.Rooms.Single(r => r.RoomID.Value == Room.RoomID);
var set = apiRoom.Playlist.FirstOrDefault(p => p.BeatmapID == beatmapId)?.Beatmap.Value.BeatmapSet var set = apiRoom.Playlist.FirstOrDefault(p => p.BeatmapID == beatmapId)?.Beatmap.Value.BeatmapSet
?? beatmaps.QueryBeatmap(b => b.OnlineBeatmapID == beatmapId)?.BeatmapSet; ?? beatmaps.QueryBeatmap(b => b.OnlineBeatmapID == beatmapId)?.BeatmapSet;

View File

@ -32,11 +32,15 @@ namespace osu.Game.Tests.Visual.Multiplayer
{ {
RelativeSizeAxes = Axes.Both; RelativeSizeAxes = Axes.Both;
RoomManager = new TestMultiplayerRoomManager();
Client = new TestMultiplayerClient(RoomManager);
OngoingOperationTracker = new OngoingOperationTracker();
AddRangeInternal(new Drawable[] AddRangeInternal(new Drawable[]
{ {
Client = new TestMultiplayerClient(), Client,
RoomManager = new TestMultiplayerRoomManager(), RoomManager,
OngoingOperationTracker = new OngoingOperationTracker(), OngoingOperationTracker,
content = new Container { RelativeSizeAxes = Axes.Both } content = new Container { RelativeSizeAxes = Axes.Both }
}); });
} }

View File

@ -27,7 +27,7 @@ namespace osu.Game.Tests.Visual.Multiplayer
[Cached] [Cached]
public readonly Bindable<FilterCriteria> Filter = new Bindable<FilterCriteria>(new FilterCriteria()); public readonly Bindable<FilterCriteria> Filter = new Bindable<FilterCriteria>(new FilterCriteria());
private readonly List<Room> rooms = new List<Room>(); public new readonly List<Room> Rooms = new List<Room>();
protected override void LoadComplete() protected override void LoadComplete()
{ {
@ -50,7 +50,7 @@ namespace osu.Game.Tests.Visual.Multiplayer
for (int i = 0; i < createdRoom.Playlist.Count; i++) for (int i = 0; i < createdRoom.Playlist.Count; i++)
createdRoom.Playlist[i].ID = currentPlaylistItemId++; createdRoom.Playlist[i].ID = currentPlaylistItemId++;
rooms.Add(createdRoom); Rooms.Add(createdRoom);
createRoomRequest.TriggerSuccess(createdRoom); createRoomRequest.TriggerSuccess(createdRoom);
break; break;
@ -65,7 +65,7 @@ namespace osu.Game.Tests.Visual.Multiplayer
case GetRoomsRequest getRoomsRequest: case GetRoomsRequest getRoomsRequest:
var roomsWithoutParticipants = new List<Room>(); var roomsWithoutParticipants = new List<Room>();
foreach (var r in rooms) foreach (var r in Rooms)
{ {
var newRoom = new Room(); var newRoom = new Room();
@ -79,7 +79,7 @@ namespace osu.Game.Tests.Visual.Multiplayer
break; break;
case GetRoomRequest getRoomRequest: case GetRoomRequest getRoomRequest:
getRoomRequest.TriggerSuccess(rooms.Single(r => r.RoomID.Value == getRoomRequest.RoomId)); getRoomRequest.TriggerSuccess(Rooms.Single(r => r.RoomID.Value == getRoomRequest.RoomId));
break; break;
case GetBeatmapSetRequest getBeatmapSetRequest: case GetBeatmapSetRequest getBeatmapSetRequest: