You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
4.6 KiB
92 lines
4.6 KiB
using NUnit.Framework;
|
|
using System;
|
|
using System.Linq;
|
|
using UnityEngine;
|
|
using UnityEngine.Rendering;
|
|
|
|
namespace UnityEditor.Rendering.Tests
|
|
{
|
|
partial class RenderingDebuggerTests
|
|
{
|
|
private static void PerformUndoRedoGeneric<TDebugState, T>(UnityEngine.Rendering.DebugUI.IValueField field, T defaultValue, T valueToSet)
|
|
where TDebugState : DebugState<T>, new()
|
|
{
|
|
DebugState<T> state = ScriptableObject.CreateInstance<TDebugState>();
|
|
state.SetValue(defaultValue, field);
|
|
|
|
Undo.RecordObject(state, nameof(PerformUndoRedoGeneric));
|
|
state.SetValue(valueToSet, field);
|
|
|
|
Undo.PerformUndo();
|
|
Assert.AreEqual(defaultValue, state.value);
|
|
|
|
Undo.PerformRedo();
|
|
Assert.AreEqual(valueToSet, state.value);
|
|
}
|
|
|
|
public class BitFieldTests<T> : UnityEngine.Rendering.DebugUI.BitField
|
|
{
|
|
public BitFieldTests()
|
|
{
|
|
enumType = typeof(T);
|
|
}
|
|
}
|
|
|
|
public class AutoEnumFieldTest : UnityEngine.Rendering.DebugUI.EnumField
|
|
{
|
|
public AutoEnumFieldTest()
|
|
{
|
|
autoEnum = typeof(LightType);
|
|
}
|
|
}
|
|
|
|
public class PathEnumFieldTest : UnityEngine.Rendering.DebugUI.EnumField
|
|
{
|
|
public PathEnumFieldTest()
|
|
{
|
|
enumNames = new GUIContent[] { new GUIContent("Item1"), new GUIContent("Catergory/Item1"), new GUIContent("Catergory/Item2") };
|
|
enumValues = new int[] { 0, 2, 4 };
|
|
}
|
|
}
|
|
|
|
static TestCaseData[] s_TestCaseDatas =
|
|
{
|
|
new TestCaseData(typeof(DebugStateEnum), typeof(UnityEngine.Rendering.DebugUI.EnumField), typeof(int), 0, 2)
|
|
.SetName("Undo/Redo works for Enums"),
|
|
new TestCaseData(typeof(DebugStateEnum), typeof(AutoEnumFieldTest), typeof(int), LightType.Disc, LightType.Spot)
|
|
.SetName("Undo/Redo works for Auto Enums"),
|
|
new TestCaseData(typeof(DebugStateEnum), typeof(PathEnumFieldTest), typeof(int), 0, 4)
|
|
.SetName("Undo/Redo works for Path Enums"),
|
|
new TestCaseData(typeof(DebugStateBool), typeof(UnityEngine.Rendering.DebugUI.BoolField), typeof(bool), false, true)
|
|
.SetName("Undo/Redo works for Booleans"),
|
|
new TestCaseData(typeof(DebugStateColor), typeof(UnityEngine.Rendering.DebugUI.ColorField), typeof(Color), Color.green, Color.red)
|
|
.SetName("Undo/Redo works for Colors"),
|
|
new TestCaseData(typeof(DebugStateFloat), typeof(UnityEngine.Rendering.DebugUI.FloatField), typeof(float), 1.0f, 5.0f)
|
|
.SetName("Undo/Redo works for Floats"),
|
|
new TestCaseData(typeof(DebugStateInt), typeof(UnityEngine.Rendering.DebugUI.IntField), typeof(int), -1, 5)
|
|
.SetName("Undo/Redo works for integers"),
|
|
new TestCaseData(typeof(DebugStateUInt), typeof(UnityEngine.Rendering.DebugUI.UIntField), typeof(uint), 1u, 5u)
|
|
.SetName("Undo/Redo works for unsigned integers"),
|
|
new TestCaseData(typeof(DebugStateVector2), typeof(UnityEngine.Rendering.DebugUI.Vector2Field), typeof(Vector2), Vector2.zero, Vector2.up)
|
|
.SetName("Undo/Redo works for vector 2"),
|
|
new TestCaseData(typeof(DebugStateVector3), typeof(UnityEngine.Rendering.DebugUI.Vector3Field), typeof(Vector3), Vector3.zero, Vector3.up)
|
|
.SetName("Undo/Redo works for vector 3"),
|
|
new TestCaseData(typeof(DebugStateVector4), typeof(UnityEngine.Rendering.DebugUI.Vector4Field), typeof(Vector4), Vector4.zero, Vector4.one)
|
|
.SetName("Undo/Redo works for vector 4"),
|
|
new TestCaseData(typeof(DebugStateFlags), typeof(BitFieldTests<UnityEngine.Rendering.DebugUI.Flags>), typeof(Enum), UnityEngine.Rendering.DebugUI.Flags.EditorOnly, UnityEngine.Rendering.DebugUI.Flags.RuntimeOnly)
|
|
.SetName("Undo/Redo works for bit fields"),
|
|
};
|
|
|
|
[Test, TestCaseSource(nameof(s_TestCaseDatas))]
|
|
public void PerformUndoRedo(Type debugStateType, Type widgetType, Type innerType, object defaultValue, object changeValue)
|
|
{
|
|
var widget = Activator.CreateInstance(widgetType);
|
|
var performUndoRedoGeneric = GetType()
|
|
.GetMethod(nameof(PerformUndoRedoGeneric), System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic)
|
|
.MakeGenericMethod(new[] { debugStateType, innerType } );
|
|
|
|
object[] args = new object[] { widget, defaultValue, changeValue };
|
|
performUndoRedoGeneric.Invoke(null, args);
|
|
}
|
|
}
|
|
}
|