108 lines
3.4 KiB
C#
108 lines
3.4 KiB
C#
using System.Collections.Generic;
|
|
using Xunit;
|
|
using XWorld.Framework;
|
|
|
|
namespace XWorld.Framework.Tests
|
|
{
|
|
public class RoomPlayerServiceTests
|
|
{
|
|
[Fact]
|
|
public void SetRoomPlayers_StoresSnapshotAndSupportsLookup()
|
|
{
|
|
var service = new RoomPlayerService();
|
|
var source = new List<PlayerInfo>
|
|
{
|
|
new PlayerInfo
|
|
{
|
|
PlayerId = 10,
|
|
Name = "Alice",
|
|
IsAI = false,
|
|
Level = 7,
|
|
AppearanceType = 2,
|
|
AvatarId = 100,
|
|
},
|
|
new PlayerInfo
|
|
{
|
|
PlayerId = -1,
|
|
Name = "AI",
|
|
IsAI = true,
|
|
Level = 1,
|
|
AppearanceType = 0,
|
|
AvatarId = 0,
|
|
},
|
|
};
|
|
|
|
service.SetRoomPlayers(source);
|
|
source[0].Name = "Mutated";
|
|
|
|
IReadOnlyList<PlayerInfo> players = service.GetRoomPlayers();
|
|
|
|
Assert.Equal(2, players.Count);
|
|
Assert.Equal("Alice", players[0].Name);
|
|
Assert.True(service.TryGetRoomPlayer(10, out PlayerInfo alice));
|
|
Assert.Equal(7, alice.Level);
|
|
Assert.Equal(2, alice.AppearanceType);
|
|
Assert.Equal(100, alice.AvatarId);
|
|
Assert.True(service.TryGetRoomPlayer(-1, out PlayerInfo ai));
|
|
Assert.True(ai.IsAI);
|
|
}
|
|
|
|
[Fact]
|
|
public void ReturnedPlayers_AreDefensiveCopies()
|
|
{
|
|
var service = new RoomPlayerService();
|
|
service.SetRoomPlayers(new[]
|
|
{
|
|
new PlayerInfo { PlayerId = 10, Name = "Alice", IsAI = false },
|
|
});
|
|
|
|
IReadOnlyList<PlayerInfo> first = service.GetRoomPlayers();
|
|
first[0].Name = "Changed";
|
|
|
|
IReadOnlyList<PlayerInfo> second = service.GetRoomPlayers();
|
|
Assert.Equal("Alice", second[0].Name);
|
|
|
|
Assert.True(service.TryGetRoomPlayer(10, out PlayerInfo lookup));
|
|
lookup.Name = "ChangedAgain";
|
|
Assert.True(service.TryGetRoomPlayer(10, out PlayerInfo lookupAgain));
|
|
Assert.Equal("Alice", lookupAgain.Name);
|
|
}
|
|
|
|
[Fact]
|
|
public void RequestPlayerInfo_ReturnsCachedPlayerOrNull()
|
|
{
|
|
var service = new RoomPlayerService();
|
|
service.SetRoomPlayers(new[]
|
|
{
|
|
new PlayerInfo { PlayerId = 10, Name = "Alice", IsAI = false, Level = 5 },
|
|
});
|
|
|
|
PlayerInfo? loaded = null;
|
|
service.RequestPlayerInfo(10, p => loaded = p);
|
|
|
|
Assert.NotNull(loaded);
|
|
Assert.Equal("Alice", loaded.Name);
|
|
Assert.Equal(5, loaded.Level);
|
|
|
|
PlayerInfo? missing = new PlayerInfo { PlayerId = 99, Name = "should be replaced" };
|
|
service.RequestPlayerInfo(99, p => missing = p);
|
|
Assert.Null(missing);
|
|
}
|
|
|
|
[Fact]
|
|
public void SetRoomPlayers_NullClearsTheRoom()
|
|
{
|
|
var service = new RoomPlayerService();
|
|
service.SetRoomPlayers(new[]
|
|
{
|
|
new PlayerInfo { PlayerId = 10, Name = "Alice", IsAI = false },
|
|
});
|
|
|
|
service.SetRoomPlayers(null);
|
|
|
|
Assert.Empty(service.GetRoomPlayers());
|
|
Assert.False(service.TryGetRoomPlayer(10, out _));
|
|
}
|
|
}
|
|
}
|