Files
sbox-public/engine/Sandbox.Test/Network/stringTable.cs
s&box team 71f266059a Open source release
This commit imports the C# engine code and game files, excluding C++ source code.

[Source-Commit: ceb3d758046e50faa6258bc3b658a30c97743268]
2025-11-24 09:05:18 +00:00

127 lines
2.9 KiB
C#

using Sandbox.Network;
namespace networking;
[TestClass]
public class stringTable
{
private void StringTablesMatch( StringTable a, StringTable b )
{
Assert.AreEqual( a.Entries.Count, b.Entries.Count );
foreach ( var e in a.Entries )
{
Assert.IsTrue( b.Entries.TryGetValue( e.Key, out var d ) );
Assert.IsTrue( d.Data.SequenceEqual( e.Value.Data ) );
}
}
[TestMethod]
public void Set()
{
Sandbox.Network.StringTable table = new( "Assembly", true );
table.Set( "TestAssembly", new byte[883712] );
Assert.AreEqual( 1, table.Entries.Count );
}
void DoUpdateExchange( Sandbox.Network.StringTable a, Sandbox.Network.StringTable b )
{
Assert.IsTrue( a.HasChanged );
var bs = ByteStream.Create( 1024 );
a.BuildUpdateMessage( ref bs );
var updateData = bs.ToArray();
bs.Dispose();
Assert.IsTrue( a.HasChanged );
a.ClearChanges();
Assert.IsFalse( a.HasChanged );
Assert.AreNotEqual( 0, updateData.Length );
var reader = ByteStream.CreateReader( updateData );
b.ReadUpdate( reader );
reader.Dispose();
}
void DoSnapshotExchange( Sandbox.Network.StringTable a, Sandbox.Network.StringTable b )
{
var bs = ByteStream.Create( 1024 );
a.BuildSnapshotMessage( ref bs );
var snapshotData = bs.ToArray();
bs.Dispose();
Assert.AreNotEqual( 0, snapshotData.Length );
var reader = ByteStream.CreateReader( snapshotData );
b.Reset();
b.ReadSnapshot( reader );
reader.Dispose();
}
[TestMethod]
public void Updates()
{
Sandbox.Network.StringTable a = new( "Assembly", true );
a.Set( "TestAssembly", new byte[883712] );
a.Set( "OtherAssembly", new byte[2345] );
Assert.AreEqual( 2, a.Entries.Count );
Sandbox.Network.StringTable b = new( "Assembly", true );
DoUpdateExchange( a, b );
Assert.AreEqual( a.Entries.Count, b.Entries.Count );
a.Remove( "TestAssembly" );
Assert.AreEqual( 1, a.Entries.Count );
DoUpdateExchange( a, b );
Assert.AreEqual( a.Entries.Count, b.Entries.Count );
a.Set( "HelloThere", new byte[2345] );
Assert.AreEqual( 2, a.Entries.Count );
DoUpdateExchange( a, b );
Assert.AreEqual( a.Entries.Count, b.Entries.Count );
}
[TestMethod]
public void EmptyEntries()
{
Sandbox.Network.StringTable a = new( "Assembly", true );
// start with an empty entry
a.Set( "TestAssembly", new byte[0] );
a.Set( "OtherAssembly", new byte[2345] );
Assert.AreEqual( 2, a.Entries.Count );
Sandbox.Network.StringTable b = new( "Assembly", true );
DoUpdateExchange( a, b );
StringTablesMatch( a, b );
// Change to empty
a.Set( "OtherAssembly", new byte[0] );
DoUpdateExchange( a, b );
StringTablesMatch( a, b );
// change to not empty
a.Set( "TestAssembly", new byte[43] );
a.Set( "OtherAssembly", new byte[56] );
DoUpdateExchange( a, b );
StringTablesMatch( a, b );
// change to empty again
a.Set( "OtherAssembly", new byte[0] );
DoSnapshotExchange( a, b );
StringTablesMatch( a, b );
}
}