using Editor;
using Sandbox.Internal;
namespace EditorTests;
[TestClass]
public class VectorControlWidgetTest
{
public class Holder
{
public Vector3 Position { get; set; }
public Vector2 Size { get; set; }
}
///
/// The uniform proxy should fan a single value out to every component of the vector.
///
[TestMethod]
public void UniformPropertyFansOutToAllComponents()
{
var holder = new Holder { Position = new Vector3( 1, 2, 3 ) };
var sobj = GlobalToolsNamespace.EditorTypeLibrary.GetSerializedObject( holder );
Assert.IsTrue( sobj.GetProperty( nameof( Holder.Position ) ).TryGetAsObject( out var vector ) );
var uniform = new UniformVectorProperty( vector );
uniform.SetValue( 5f );
Assert.AreEqual( new Vector3( 5, 5, 5 ), holder.Position );
}
///
/// The uniform proxy reads through to the x component.
///
[TestMethod]
public void UniformPropertyReadsX()
{
var holder = new Holder { Position = new Vector3( 7, 8, 9 ) };
var sobj = GlobalToolsNamespace.EditorTypeLibrary.GetSerializedObject( holder );
Assert.IsTrue( sobj.GetProperty( nameof( Holder.Position ) ).TryGetAsObject( out var vector ) );
var uniform = new UniformVectorProperty( vector );
Assert.AreEqual( 7f, uniform.GetValue() );
}
///
/// Vectors without all four components should still work - missing components are
/// skipped rather than throwing.
///
[TestMethod]
public void UniformPropertyHandlesSmallerVectors()
{
var holder = new Holder { Size = new Vector2( 1, 2 ) };
var sobj = GlobalToolsNamespace.EditorTypeLibrary.GetSerializedObject( holder );
Assert.IsTrue( sobj.GetProperty( nameof( Holder.Size ) ).TryGetAsObject( out var vector ) );
var uniform = new UniformVectorProperty( vector );
uniform.SetValue( 4f );
Assert.AreEqual( new Vector2( 4, 4 ), holder.Size );
}
}