Açıklama Yok
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.

MaterialNodeTests.cs 6.4KB

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