A game about forced loneliness, made by TACStudios
at master 146 lines 6.6 kB view raw
1using System; 2using System.Collections.Generic; 3using System.Linq; 4using NUnit.Framework; 5using UnityEngine; 6using UnityEditor.Graphing; 7using UnityEditor.ShaderGraph.Internal; 8 9namespace UnityEditor.ShaderGraph.UnitTests 10{ 11 [TestFixture] 12 class MaterialNodeTests 13 { 14 private GraphData m_Graph; 15 private TestNode m_NodeA; 16 17 class TestNode : AbstractMaterialNode 18 { 19 public const int V1Out = 0; 20 public const int V1In = 1; 21 22 public TestNode() 23 { 24 AddSlot(new Vector1MaterialSlot(V1Out, "V1Out", "V1Out", SlotType.Output, 0)); 25 AddSlot(new Vector1MaterialSlot(V1In, "V1In", "V1In", SlotType.Input, 0)); 26 } 27 } 28 29 class NotAMaterialSlot : MaterialSlot 30 { 31 public override void AddDefaultProperty(PropertyCollector properties, GenerationMode generationMode) 32 { 33 throw new NotImplementedException(); 34 } 35 36 public override void CopyValuesFrom(MaterialSlot foundSlot) 37 { 38 throw new NotImplementedException(); 39 } 40 41 public override void CopyDefaultValue(MaterialSlot other) 42 { 43 } 44 45 public override SlotValueType valueType { get; } 46 public override ConcreteSlotValueType concreteValueType { get; } 47 public override bool isDefaultValue { get; } 48 } 49 50 [OneTimeSetUp] 51 public void RunBeforeAnyTests() 52 { 53 Debug.unityLogger.logHandler = new ConsoleLogHandler(); 54 } 55 56 [SetUp] 57 public void TestSetUp() 58 { 59 m_Graph = new GraphData(); 60 m_NodeA = new TestNode(); 61 m_Graph.AddNode(m_NodeA); 62 m_NodeA.SetOverrideActiveState(AbstractMaterialNode.ActiveState.ExplicitActive); 63 } 64 65 [Test] 66 public void GetVariableNameForSlotThrowsWhenInvalid() 67 { 68 Assert.Throws<ArgumentException>(() => m_NodeA.GetVariableNameForSlot(666)); 69 } 70 71 [Test] 72 public void ReplacingMaterialSlotPreservesTheOldCurrentValue() 73 { 74 m_NodeA.AddSlot(new Vector1MaterialSlot(TestNode.V1In, "V1In", "V1In", SlotType.Input, 1)); 75 Assert.AreEqual(2, m_NodeA.GetSlots<MaterialSlot>().Count()); 76 Assert.AreEqual(1, m_NodeA.GetInputSlots<MaterialSlot>().Count()); 77 78 var slot = m_NodeA.GetInputSlots<Vector1MaterialSlot>().FirstOrDefault(); 79 Assert.AreEqual(1, slot.defaultValue); 80 Assert.AreEqual(0, slot.value); 81 } 82 83 [Test] 84 public void CanConvertConcreteSlotValueTypeToOutputChunkProperly() 85 { 86 Assert.AreEqual("float", ConcreteSlotValueType.Vector1.ToShaderString(ConcretePrecision.Single)); 87 Assert.AreEqual("float", ConcreteSlotValueType.Boolean.ToShaderString(ConcretePrecision.Single)); 88 Assert.AreEqual("float2", ConcreteSlotValueType.Vector2.ToShaderString(ConcretePrecision.Single)); 89 Assert.AreEqual("float3", ConcreteSlotValueType.Vector3.ToShaderString(ConcretePrecision.Single)); 90 Assert.AreEqual("float4", ConcreteSlotValueType.Vector4.ToShaderString(ConcretePrecision.Single)); 91 Assert.AreEqual("UnityTexture2D", ConcreteSlotValueType.Texture2D.ToShaderString(ConcretePrecision.Single)); 92 Assert.AreEqual("float2x2", ConcreteSlotValueType.Matrix2.ToShaderString(ConcretePrecision.Single)); 93 Assert.AreEqual("float3x3", ConcreteSlotValueType.Matrix3.ToShaderString(ConcretePrecision.Single)); 94 Assert.AreEqual("float4x4", ConcreteSlotValueType.Matrix4.ToShaderString(ConcretePrecision.Single)); 95 Assert.AreEqual("UnitySamplerState", ConcreteSlotValueType.SamplerState.ToShaderString(ConcretePrecision.Single)); 96 Assert.AreEqual("UnityTextureCube", ConcreteSlotValueType.Cubemap.ToShaderString(ConcretePrecision.Single)); 97 } 98 99 [Test] 100 public void CanGetDefaultInputsFromNodeAsPreviewProperties() 101 { 102 var properties = new List<PreviewProperty>(); 103 m_NodeA.CollectPreviewMaterialProperties(properties); 104 var slot = m_NodeA.GetInputSlots<Vector1MaterialSlot>().FirstOrDefault(); 105 106 Assert.AreEqual(1, properties.Count); 107 var pp = properties.FirstOrDefault(); 108 109 Assert.AreEqual(m_NodeA.GetVariableNameForSlot(slot.id), pp.name); 110 Assert.AreEqual(PropertyType.Float, pp.propType); 111 Assert.AreEqual(slot.value, pp.floatValue); 112 } 113 114 [Test] 115 public void CanGetDefaultSlotValueWhenNoEdgesConnected() 116 { 117 string expected = string.Format("{0}", m_NodeA.GetVariableNameForSlot(TestNode.V1In)); 118 119 var slot = m_NodeA.GetInputSlots<MaterialSlot>().FirstOrDefault(); 120 var result = m_NodeA.GetSlotValue(slot.id, GenerationMode.Preview); 121 Assert.AreEqual(expected, result); 122 } 123 124 /* [Test] 125 public void NodeGenerateCorrectPreviewPropertyUsages() 126 { 127 string expected = string.Format("{0} {1};{2}", AbstractMaterialNode.OutputPrecision.@fixed, m_NodeA.GetVariableNameForSlot(TestNode.V1In), Environment.NewLine); 128 var visitor = new ShaderGenerator(); 129 m_NodeA.precision = AbstractMaterialNode.OutputPrecision.@fixed; 130 m_NodeA.GeneratePropertyUsages(visitor, GenerationMode.Preview); 131 Assert.AreEqual(expected, visitor.GetShaderString(0)); 132 133 expected = string.Format("{0} {1};{2}", AbstractMaterialNode.OutputPrecision.@float, m_NodeA.GetVariableNameForSlot(TestNode.V1In), Environment.NewLine); 134 visitor = new ShaderGenerator(); 135 m_NodeA.precision = AbstractMaterialNode.OutputPrecision.@float; 136 m_NodeA.GeneratePropertyUsages(visitor, GenerationMode.Preview); 137 Assert.AreEqual(expected, visitor.GetShaderString(0)); 138 139 expected = string.Format("{0} {1};{2}", AbstractMaterialNode.OutputPrecision.half, m_NodeA.GetVariableNameForSlot(TestNode.V1In), Environment.NewLine); 140 visitor = new ShaderGenerator(); 141 m_NodeA.precision = AbstractMaterialNode.OutputPrecision.half; 142 m_NodeA.GeneratePropertyUsages(visitor, GenerationMode.Preview); 143 Assert.AreEqual(expected, visitor.GetShaderString(0)); 144 }*/ 145 } 146}