using NUnit.Framework; using UnityEngine; using UnityEditor.Graphing; using UnityEditor.ShaderGraph; namespace UnityEditor.ShaderGraph.UnitTests { [TestFixture] public class MaterialSlotTests { private ShaderGraph.MaterialGraph m_Graph; private TestNode m_NodeA; class TestNode : AbstractMaterialNode { public const int V1In = 1; public const int V2In = 2; public const int V3In = 3; public const int V4In = 4; public readonly Vector1MaterialSlot slot1; public readonly Vector2MaterialSlot slot2; public readonly Vector3MaterialSlot slot3; public readonly Vector4MaterialSlot slot4; public TestNode() { slot1 = new Vector1MaterialSlot(V1In, "V1In", "V1In", SlotType.Input, 0); AddSlot(slot1); slot2 = new Vector2MaterialSlot(V2In, "V2In", "V2In", SlotType.Input, Vector2.zero); AddSlot(slot2); slot3 = new Vector3MaterialSlot(V3In, "V3In", "V3In", SlotType.Input, Vector3.zero); AddSlot(slot3); slot4 = new Vector4MaterialSlot(V4In, "V4In", "V4In", SlotType.Input, Vector4.zero); AddSlot(slot4); } } [OneTimeSetUp] public void RunBeforeAnyTests() { Debug.unityLogger.logHandler = new ConsoleLogHandler(); } [SetUp] public void TestSetUp() { m_Graph = new ShaderGraph.MaterialGraph(); m_NodeA = new TestNode(); m_NodeA.precision = AbstractMaterialNode.OutputPrecision.half; m_Graph.AddNode(m_NodeA); } [Test] public void SlotDisplayNameIsCorrect() { var displayName = "New Display Name"; Assert.AreEqual(displayName + "(1)", m_NodeA.slot1.displayName); Assert.AreEqual(displayName + "(2)", m_NodeA.slot2.displayName); Assert.AreEqual(displayName + "(3)", m_NodeA.slot3.displayName); Assert.AreEqual(displayName + "(4)", m_NodeA.slot4.displayName); } [Test] public void CanUpdateMaterialSlotDefaultValue() { var slot = m_NodeA.slot1; slot.value = 1; Assert.AreEqual(Vector4.one, slot.defaultValue); } [Test] public void CanUpdateMaterialSlotCurrentValue() { var slot = m_NodeA.slot1; slot.value = 1; Assert.AreEqual(Vector4.one, 1); } /* [Test] public void MaterialSlotCanGeneratePropertyUsagesForPreview() { string expected = string.Format("{0} {1};{2}", m_NodeA.precision, m_NodeA.GetVariableNameForSlot(TestNode.V1In), Environment.NewLine); var slot = m_NodeA.slot; var visitor = new ShaderGenerator(); slot.GeneratePropertyUsages(visitor, GenerationMode.Preview); Assert.AreEqual(expected, visitor.GetShaderString(0)); }*/ [Test] public void MaterialSlotReturnsValidDefaultValue() { string expected = string.Format("{0}", m_NodeA.GetVariableNameForSlot(TestNode.V1In)); var result = m_NodeA.slot1.GetDefaultValue(GenerationMode.Preview); Assert.AreEqual(expected, result); m_NodeA.slot1.value = 6; result = m_NodeA.slot1.GetDefaultValue(GenerationMode.ForReals); Assert.AreEqual("6", result); m_NodeA.slot2.value = new Vector4(6, 6, 6, 1); result = m_NodeA.slot1.GetDefaultValue(GenerationMode.ForReals); Assert.AreEqual("half2 (6,6)", result); m_NodeA.slot3.value = new Vector4(6, 6, 6, 1); result = m_NodeA.slot3.GetDefaultValue(GenerationMode.ForReals); Assert.AreEqual("half3 (6,6,6)", result); m_NodeA.slot4.value = new Vector4(6, 6, 6, 1); result = m_NodeA.slot3.GetDefaultValue(GenerationMode.ForReals); Assert.AreEqual("half4 (6,6,6,1)", result); } /* [Test] public void MaterialSlotThrowsWhenNoOwner() { var slot = new MaterialSlot(0, string.Empty, string.Empty, SlotType.Input, SlotValueType.Vector1, Vector4.zero); Assert.Throws(() => slot.GeneratePropertyUsages(new ShaderGenerator(), GenerationMode.Preview)); Assert.Throws(() => slot.GetDefaultValue(GenerationMode.Preview)); }*/ } }