first commit
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
using NitroxModel.Logger;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace NitroxClient.GameLogic.Helper;
|
||||
|
||||
[TestClass]
|
||||
public class BaseSerializationHelperTest
|
||||
{
|
||||
[TestMethod]
|
||||
public void TestBytesRestoring()
|
||||
{
|
||||
List<int> lengths = new() { 10000, 100000, 300000, 500000 };
|
||||
foreach (int length in lengths)
|
||||
{
|
||||
TestSerialization(GenerateRealisticBytes(length));
|
||||
}
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void TestAllZeroBytes()
|
||||
{
|
||||
List<int> lengths = new() { 10000, 100000, 300000, 500000 };
|
||||
foreach (int length in lengths)
|
||||
{
|
||||
byte[] data = new byte[length];
|
||||
TestSerialization(data);
|
||||
}
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void TestAllMaxBytes()
|
||||
{
|
||||
List<int> lengths = new() { 10000, 100000, 300000, 500000 };
|
||||
foreach (int length in lengths)
|
||||
{
|
||||
byte[] data = new byte[length];
|
||||
data.AsSpan().Fill(byte.MaxValue);
|
||||
TestSerialization(data);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Generates bytes to emulate Base data arrays
|
||||
/// </summary>
|
||||
private static byte[] GenerateRealisticBytes(int length)
|
||||
{
|
||||
byte[] generated = new byte[length];
|
||||
byte[] randomBytes = new byte[length];
|
||||
int randomIndex = 0;
|
||||
Random random = new();
|
||||
random.NextBytes(randomBytes);
|
||||
for (int i = 0; i < length; i++)
|
||||
{
|
||||
if (random.Next(100) < 3)
|
||||
{
|
||||
generated[i] = randomBytes[randomIndex++];
|
||||
}
|
||||
else
|
||||
{
|
||||
generated[i] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
return generated;
|
||||
}
|
||||
|
||||
private static void TestSerialization(byte[] original)
|
||||
{
|
||||
byte[] compressed = BaseSerializationHelper.CompressBytes(original);
|
||||
byte[] decompressed = BaseSerializationHelper.DecompressBytes(compressed, original.Length);
|
||||
Log.Info($"Size: [Original: {original.Length}, Compressed: {compressed.Length}, Decompressed: {decompressed.Length}]");
|
||||
Log.Info($"Original: {string.Join(", ", original.Take(100))}");
|
||||
Log.Info($"Compressed: {string.Join(", ", compressed.Take(100))}");
|
||||
Log.Info($"Decompressed: {string.Join(", ", decompressed.Take(100))}\n");
|
||||
|
||||
Assert.AreEqual(original.Length, decompressed.Length);
|
||||
for (int i = 0; i < original.Length; i++)
|
||||
{
|
||||
Assert.AreEqual(original[i], decompressed[i]);
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,187 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using FluentAssertions;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
using Nitrox.Test.Client.Communication.MultiplayerSession;
|
||||
using NitroxModel.MultiplayerSession;
|
||||
using NitroxModel_Subnautica.DataStructures;
|
||||
using NSubstitute;
|
||||
using UnityEngine;
|
||||
|
||||
namespace NitroxClient.GameLogic.PlayerLogic.PlayerPreferences
|
||||
{
|
||||
[TestClass]
|
||||
public class PlayerPreferenceManagerTests
|
||||
{
|
||||
[TestMethod]
|
||||
public void ShouldBeAbleToRetrieveANewPreferenceEntry()
|
||||
{
|
||||
//Given
|
||||
PlayerPreferenceState playerPreferenceState = new PlayerPreferenceState();
|
||||
playerPreferenceState.Preferences = new Dictionary<string, PlayerPreference>();
|
||||
|
||||
IPreferenceStateProvider stateProvider = Substitute.For<IPreferenceStateProvider>();
|
||||
stateProvider.GetPreferenceState().Returns(playerPreferenceState);
|
||||
|
||||
PlayerPreferenceManager playerPreferenceManager = new PlayerPreferenceManager(stateProvider);
|
||||
|
||||
PlayerPreference playerPreference = new PlayerPreference(TestConstants.TEST_PLAYER_NAME, RandomColorGenerator.GenerateColor().ToUnity());
|
||||
Color preferredColor = playerPreference.PreferredColor();
|
||||
|
||||
//When
|
||||
playerPreferenceManager.SetPreference(TestConstants.TEST_IP_ADDRESS, playerPreference);
|
||||
PlayerPreference result = playerPreferenceManager.GetPreference(TestConstants.TEST_IP_ADDRESS);
|
||||
|
||||
//Then
|
||||
result.PlayerName.Should().Be(TestConstants.TEST_PLAYER_NAME);
|
||||
result.RedAdditive.Should().Be(preferredColor.r);
|
||||
result.GreenAdditive.Should().Be(preferredColor.g);
|
||||
result.BlueAdditive.Should().Be(preferredColor.b);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void ShouldBeAbleToRetrieveUpdatedPreferencesForAnExistingIpAddress()
|
||||
{
|
||||
//Given
|
||||
PlayerPreferenceState playerPreferenceState = new PlayerPreferenceState();
|
||||
playerPreferenceState.Preferences = new Dictionary<string, PlayerPreference>();
|
||||
|
||||
IPreferenceStateProvider stateProvider = Substitute.For<IPreferenceStateProvider>();
|
||||
stateProvider.GetPreferenceState().Returns(playerPreferenceState);
|
||||
|
||||
PlayerPreferenceManager playerPreferenceManager = new PlayerPreferenceManager(stateProvider);
|
||||
|
||||
PlayerPreference playerPreference = new PlayerPreference(TestConstants.TEST_PLAYER_NAME, RandomColorGenerator.GenerateColor().ToUnity());
|
||||
|
||||
Color newColor = RandomColorGenerator.GenerateColor().ToUnity();
|
||||
PlayerPreference newPlayerPreference = new PlayerPreference(TestConstants.TEST_PLAYER_NAME, newColor);
|
||||
|
||||
//When
|
||||
playerPreferenceManager.SetPreference(TestConstants.TEST_IP_ADDRESS, playerPreference);
|
||||
playerPreferenceManager.SetPreference(TestConstants.TEST_IP_ADDRESS, newPlayerPreference);
|
||||
PlayerPreference result = playerPreferenceManager.GetPreference(TestConstants.TEST_IP_ADDRESS);
|
||||
|
||||
//Then
|
||||
result.RedAdditive.Should().Be(newColor.r);
|
||||
result.GreenAdditive.Should().Be(newColor.g);
|
||||
result.BlueAdditive.Should().Be(newColor.b);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void SetPreferenceShouldThrowExceptionWhenGivenANullIpAddress()
|
||||
{
|
||||
//Arrange
|
||||
PlayerPreferenceState playerPreferenceState = new PlayerPreferenceState();
|
||||
playerPreferenceState.Preferences = new Dictionary<string, PlayerPreference>();
|
||||
|
||||
IPreferenceStateProvider stateProvider = Substitute.For<IPreferenceStateProvider>();
|
||||
stateProvider.GetPreferenceState().Returns(playerPreferenceState);
|
||||
|
||||
PlayerPreferenceManager playerPreferenceManager = new PlayerPreferenceManager(stateProvider);
|
||||
|
||||
PlayerPreference playerPreference = new PlayerPreference(TestConstants.TEST_PLAYER_NAME, RandomColorGenerator.GenerateColor().ToUnity());
|
||||
|
||||
//Act
|
||||
Action action = () => playerPreferenceManager.SetPreference(null, playerPreference);
|
||||
|
||||
//Assert
|
||||
action.Should().Throw<ArgumentNullException>();
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void SetPreferenceShouldThrowExceptionWhenGivenANullJoinServerSettingsReference()
|
||||
{
|
||||
//Arrange
|
||||
PlayerPreferenceState playerPreferenceState = new PlayerPreferenceState();
|
||||
playerPreferenceState.Preferences = new Dictionary<string, PlayerPreference>();
|
||||
|
||||
IPreferenceStateProvider stateProvider = Substitute.For<IPreferenceStateProvider>();
|
||||
stateProvider.GetPreferenceState().Returns(playerPreferenceState);
|
||||
|
||||
PlayerPreferenceManager playerPreferenceManager = new PlayerPreferenceManager(stateProvider);
|
||||
|
||||
//Act
|
||||
Action action = () => playerPreferenceManager.SetPreference(TestConstants.TEST_IP_ADDRESS, null);
|
||||
|
||||
//Assert
|
||||
action.Should().Throw<ArgumentNullException>();
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void ShouldGetTheLastSetPlayerPreferenceWhenJoiningANewServer()
|
||||
{
|
||||
//Given
|
||||
PlayerPreferenceState playerPreferenceState = new PlayerPreferenceState();
|
||||
playerPreferenceState.Preferences = new Dictionary<string, PlayerPreference>();
|
||||
|
||||
IPreferenceStateProvider stateProvider = Substitute.For<IPreferenceStateProvider>();
|
||||
stateProvider.GetPreferenceState().Returns(playerPreferenceState);
|
||||
|
||||
PlayerPreferenceManager playerPreferenceManager = new PlayerPreferenceManager(stateProvider);
|
||||
|
||||
PlayerPreference firstPreference = new PlayerPreference(TestConstants.TEST_PLAYER_NAME, RandomColorGenerator.GenerateColor().ToUnity());
|
||||
|
||||
string firstIpAddress = "127.0.0.1";
|
||||
playerPreferenceManager.SetPreference(firstIpAddress, firstPreference);
|
||||
|
||||
PlayerPreference secondPreference = new PlayerPreference(TestConstants.TEST_PLAYER_NAME, RandomColorGenerator.GenerateColor().ToUnity());
|
||||
|
||||
string secondIpAddress = "123.456.789.321";
|
||||
playerPreferenceManager.SetPreference(secondIpAddress, secondPreference);
|
||||
|
||||
PlayerPreference thirdPreference = new PlayerPreference(TestConstants.TEST_PLAYER_NAME, RandomColorGenerator.GenerateColor().ToUnity());
|
||||
Color expectedColor = thirdPreference.PreferredColor();
|
||||
|
||||
string thirdIpAddress = "000.000.000.000";
|
||||
playerPreferenceManager.SetPreference(thirdIpAddress, thirdPreference);
|
||||
|
||||
//When
|
||||
PlayerPreference result = playerPreferenceManager.GetPreference(TestConstants.TEST_IP_ADDRESS);
|
||||
|
||||
//Then
|
||||
result.PlayerName.Should().Be(thirdPreference.PlayerName);
|
||||
result.RedAdditive.Should().Be(expectedColor.r);
|
||||
result.GreenAdditive.Should().Be(expectedColor.g);
|
||||
result.BlueAdditive.Should().Be(expectedColor.b);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void ShouldBeAbleToRetrieveADefaultPreferenceWhenThePlayerHasNone()
|
||||
{
|
||||
//Given
|
||||
PlayerPreferenceState playerPreferenceState = new PlayerPreferenceState();
|
||||
playerPreferenceState.Preferences = new Dictionary<string, PlayerPreference>();
|
||||
|
||||
IPreferenceStateProvider stateProvider = Substitute.For<IPreferenceStateProvider>();
|
||||
stateProvider.GetPreferenceState().Returns(playerPreferenceState);
|
||||
|
||||
PlayerPreferenceManager playerPreferenceManager = new PlayerPreferenceManager(stateProvider);
|
||||
|
||||
//When
|
||||
PlayerPreference result = playerPreferenceManager.GetPreference(TestConstants.TEST_IP_ADDRESS);
|
||||
|
||||
//Then
|
||||
result.Should().NotBeNull();
|
||||
result.PlayerName.Should().BeNullOrEmpty();
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void GetPreferenceShouldThrowExceptionWhenGivenNullIpAddress()
|
||||
{
|
||||
//Arrange
|
||||
PlayerPreferenceState playerPreferenceState = new PlayerPreferenceState();
|
||||
playerPreferenceState.Preferences = new Dictionary<string, PlayerPreference>();
|
||||
|
||||
IPreferenceStateProvider stateProvider = Substitute.For<IPreferenceStateProvider>();
|
||||
stateProvider.GetPreferenceState().Returns(playerPreferenceState);
|
||||
|
||||
PlayerPreferenceManager playerPreferenceManager = new PlayerPreferenceManager(stateProvider);
|
||||
|
||||
//Act
|
||||
Action action = () => playerPreferenceManager.GetPreference(null);
|
||||
|
||||
//Assert
|
||||
action.Should().Throw<ArgumentNullException>();
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user