DynamicSlotTests.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. using NUnit.Framework;
  2. using UnityEngine;
  3. using UnityEditor.Graphing;
  4. namespace UnityEditor.ShaderGraph.UnitTests
  5. {
  6. [TestFixture]
  7. class DynamicSlotTests
  8. {
  9. private GraphData m_Graph;
  10. private DynamicNode m_DynamicNode;
  11. private TestNode m_StaticNode;
  12. class DynamicNode : AbstractMaterialNode
  13. {
  14. public const int DynIn1 = 0;
  15. public const int DynIn2 = 1;
  16. public const int DynOut = 2;
  17. public DynamicNode()
  18. {
  19. AddSlot(new DynamicVectorMaterialSlot(DynIn1, "DynIn1", "DynIn1", SlotType.Input, Vector4.zero));
  20. AddSlot(new DynamicVectorMaterialSlot(DynIn2, "DynIn2", "DynIn2", SlotType.Input, Vector4.zero));
  21. AddSlot(new DynamicVectorMaterialSlot(DynOut, "DynOut", "DynOut", SlotType.Output, Vector4.zero));
  22. }
  23. }
  24. class TestNode : AbstractMaterialNode
  25. {
  26. public const int V1Out = 0;
  27. public const int V2Out = 1;
  28. public const int V3Out = 2;
  29. public const int V4Out = 3;
  30. public TestNode()
  31. {
  32. AddSlot(new Vector1MaterialSlot(V1Out, "V1Out", "V1Out", SlotType.Output, 0));
  33. AddSlot(new Vector2MaterialSlot(V2Out, "V2Out", "V2Out", SlotType.Output, Vector4.zero));
  34. AddSlot(new Vector3MaterialSlot(V3Out, "V3Out", "V3Out", SlotType.Output, Vector4.zero));
  35. AddSlot(new Vector4MaterialSlot(V4Out, "V4Out", "V4Out", SlotType.Output, Vector4.zero));
  36. }
  37. }
  38. [OneTimeSetUp]
  39. public void RunBeforeAnyTests()
  40. {
  41. Debug.unityLogger.logHandler = new ConsoleLogHandler();
  42. }
  43. [SetUp]
  44. public void TestSetUp()
  45. {
  46. m_Graph = new GraphData();
  47. m_DynamicNode = new DynamicNode();
  48. m_Graph.AddNode(m_DynamicNode);
  49. m_StaticNode = new TestNode();
  50. m_Graph.AddNode(m_StaticNode);
  51. }
  52. [Test]
  53. public void DynamicInputsV1NoneWorks()
  54. {
  55. m_Graph.Connect(m_StaticNode.GetSlotReference(TestNode.V1Out), m_DynamicNode.GetSlotReference(DynamicNode.DynIn1));
  56. var dynOut1 = m_DynamicNode.FindOutputSlot<MaterialSlot>(DynamicNode.DynOut);
  57. Assert.AreEqual(ConcreteSlotValueType.Vector1, dynOut1.concreteValueType);
  58. }
  59. [Test]
  60. public void DynamicInputsV1V1Works()
  61. {
  62. m_Graph.Connect(m_StaticNode.GetSlotReference(TestNode.V1Out), m_DynamicNode.GetSlotReference(DynamicNode.DynIn1));
  63. m_Graph.Connect(m_StaticNode.GetSlotReference(TestNode.V1Out), m_DynamicNode.GetSlotReference(DynamicNode.DynIn2));
  64. var dynOut1 = m_DynamicNode.FindOutputSlot<MaterialSlot>(DynamicNode.DynOut);
  65. Assert.AreEqual(ConcreteSlotValueType.Vector1, dynOut1.concreteValueType);
  66. }
  67. [Test]
  68. public void DynamicInputsV1V2Works()
  69. {
  70. m_Graph.Connect(m_StaticNode.GetSlotReference(TestNode.V1Out), m_DynamicNode.GetSlotReference(DynamicNode.DynIn1));
  71. m_Graph.Connect(m_StaticNode.GetSlotReference(TestNode.V2Out), m_DynamicNode.GetSlotReference(DynamicNode.DynIn2));
  72. var dynOut1 = m_DynamicNode.FindOutputSlot<MaterialSlot>(DynamicNode.DynOut);
  73. Assert.AreEqual(ConcreteSlotValueType.Vector2, dynOut1.concreteValueType);
  74. }
  75. [Test]
  76. public void DynamicInputsV1V3Works()
  77. {
  78. m_Graph.Connect(m_StaticNode.GetSlotReference(TestNode.V1Out), m_DynamicNode.GetSlotReference(DynamicNode.DynIn1));
  79. m_Graph.Connect(m_StaticNode.GetSlotReference(TestNode.V3Out), m_DynamicNode.GetSlotReference(DynamicNode.DynIn2));
  80. var dynOut1 = m_DynamicNode.FindOutputSlot<MaterialSlot>(DynamicNode.DynOut);
  81. Assert.AreEqual(ConcreteSlotValueType.Vector3, dynOut1.concreteValueType);
  82. }
  83. [Test]
  84. public void DynamicInputsV1V4Works()
  85. {
  86. m_Graph.Connect(m_StaticNode.GetSlotReference(TestNode.V1Out), m_DynamicNode.GetSlotReference(DynamicNode.DynIn1));
  87. m_Graph.Connect(m_StaticNode.GetSlotReference(TestNode.V4Out), m_DynamicNode.GetSlotReference(DynamicNode.DynIn2));
  88. var dynOut1 = m_DynamicNode.FindOutputSlot<MaterialSlot>(DynamicNode.DynOut);
  89. Assert.AreEqual(ConcreteSlotValueType.Vector4, dynOut1.concreteValueType);
  90. }
  91. [Test]
  92. public void DynamicInputsV2NoneWorks()
  93. {
  94. m_Graph.Connect(m_StaticNode.GetSlotReference(TestNode.V2Out), m_DynamicNode.GetSlotReference(DynamicNode.DynIn1));
  95. var dynOut1 = m_DynamicNode.FindOutputSlot<MaterialSlot>(DynamicNode.DynOut);
  96. Assert.AreEqual(ConcreteSlotValueType.Vector2, dynOut1.concreteValueType);
  97. }
  98. [Test]
  99. public void DynamicInputsV2V1Works()
  100. {
  101. m_Graph.Connect(m_StaticNode.GetSlotReference(TestNode.V2Out), m_DynamicNode.GetSlotReference(DynamicNode.DynIn1));
  102. m_Graph.Connect(m_StaticNode.GetSlotReference(TestNode.V1Out), m_DynamicNode.GetSlotReference(DynamicNode.DynIn2));
  103. var dynOut1 = m_DynamicNode.FindOutputSlot<MaterialSlot>(DynamicNode.DynOut);
  104. Assert.AreEqual(ConcreteSlotValueType.Vector2, dynOut1.concreteValueType);
  105. }
  106. [Test]
  107. public void DynamicInputsV2V2Works()
  108. {
  109. m_Graph.Connect(m_StaticNode.GetSlotReference(TestNode.V2Out), m_DynamicNode.GetSlotReference(DynamicNode.DynIn1));
  110. m_Graph.Connect(m_StaticNode.GetSlotReference(TestNode.V2Out), m_DynamicNode.GetSlotReference(DynamicNode.DynIn2));
  111. var dynOut1 = m_DynamicNode.FindOutputSlot<MaterialSlot>(DynamicNode.DynOut);
  112. Assert.AreEqual(ConcreteSlotValueType.Vector2, dynOut1.concreteValueType);
  113. }
  114. [Test]
  115. public void DynamicInputsV2V3Works()
  116. {
  117. m_Graph.Connect(m_StaticNode.GetSlotReference(TestNode.V2Out), m_DynamicNode.GetSlotReference(DynamicNode.DynIn1));
  118. m_Graph.Connect(m_StaticNode.GetSlotReference(TestNode.V3Out), m_DynamicNode.GetSlotReference(DynamicNode.DynIn2));
  119. var dynOut1 = m_DynamicNode.FindOutputSlot<MaterialSlot>(DynamicNode.DynOut);
  120. Assert.AreEqual(ConcreteSlotValueType.Vector2, dynOut1.concreteValueType);
  121. }
  122. [Test]
  123. public void DynamicInputsV2V4Works()
  124. {
  125. m_Graph.Connect(m_StaticNode.GetSlotReference(TestNode.V2Out), m_DynamicNode.GetSlotReference(DynamicNode.DynIn1));
  126. m_Graph.Connect(m_StaticNode.GetSlotReference(TestNode.V4Out), m_DynamicNode.GetSlotReference(DynamicNode.DynIn2));
  127. var dynOut1 = m_DynamicNode.FindOutputSlot<MaterialSlot>(DynamicNode.DynOut);
  128. Assert.AreEqual(ConcreteSlotValueType.Vector2, dynOut1.concreteValueType);
  129. }
  130. [Test]
  131. public void DynamicInputsV3NoneWorks()
  132. {
  133. m_Graph.Connect(m_StaticNode.GetSlotReference(TestNode.V3Out), m_DynamicNode.GetSlotReference(DynamicNode.DynIn1));
  134. var dynOut1 = m_DynamicNode.FindOutputSlot<MaterialSlot>(DynamicNode.DynOut);
  135. Assert.AreEqual(ConcreteSlotValueType.Vector3, dynOut1.concreteValueType);
  136. }
  137. [Test]
  138. public void DynamicInputsV3V1Works()
  139. {
  140. m_Graph.Connect(m_StaticNode.GetSlotReference(TestNode.V3Out), m_DynamicNode.GetSlotReference(DynamicNode.DynIn1));
  141. m_Graph.Connect(m_StaticNode.GetSlotReference(TestNode.V1Out), m_DynamicNode.GetSlotReference(DynamicNode.DynIn2));
  142. var dynOut1 = m_DynamicNode.FindOutputSlot<MaterialSlot>(DynamicNode.DynOut);
  143. Assert.AreEqual(ConcreteSlotValueType.Vector3, dynOut1.concreteValueType);
  144. }
  145. [Test]
  146. public void DynamicInputsV3V2Works()
  147. {
  148. m_Graph.Connect(m_StaticNode.GetSlotReference(TestNode.V3Out), m_DynamicNode.GetSlotReference(DynamicNode.DynIn1));
  149. m_Graph.Connect(m_StaticNode.GetSlotReference(TestNode.V2Out), m_DynamicNode.GetSlotReference(DynamicNode.DynIn2));
  150. var dynOut1 = m_DynamicNode.FindOutputSlot<MaterialSlot>(DynamicNode.DynOut);
  151. Assert.AreEqual(ConcreteSlotValueType.Vector2, dynOut1.concreteValueType);
  152. }
  153. [Test]
  154. public void DynamicInputsV3V3Works()
  155. {
  156. m_Graph.Connect(m_StaticNode.GetSlotReference(TestNode.V3Out), m_DynamicNode.GetSlotReference(DynamicNode.DynIn1));
  157. m_Graph.Connect(m_StaticNode.GetSlotReference(TestNode.V3Out), m_DynamicNode.GetSlotReference(DynamicNode.DynIn2));
  158. var dynOut1 = m_DynamicNode.FindOutputSlot<MaterialSlot>(DynamicNode.DynOut);
  159. Assert.AreEqual(ConcreteSlotValueType.Vector3, dynOut1.concreteValueType);
  160. }
  161. [Test]
  162. public void DynamicInputsV3V4Works()
  163. {
  164. m_Graph.Connect(m_StaticNode.GetSlotReference(TestNode.V3Out), m_DynamicNode.GetSlotReference(DynamicNode.DynIn1));
  165. m_Graph.Connect(m_StaticNode.GetSlotReference(TestNode.V4Out), m_DynamicNode.GetSlotReference(DynamicNode.DynIn2));
  166. var dynOut1 = m_DynamicNode.FindOutputSlot<MaterialSlot>(DynamicNode.DynOut);
  167. Assert.AreEqual(ConcreteSlotValueType.Vector3, dynOut1.concreteValueType);
  168. }
  169. [Test]
  170. public void DynamicInputsV4NoneWorks()
  171. {
  172. m_Graph.Connect(m_StaticNode.GetSlotReference(TestNode.V4Out), m_DynamicNode.GetSlotReference(DynamicNode.DynIn1));
  173. var dynOut1 = m_DynamicNode.FindOutputSlot<MaterialSlot>(DynamicNode.DynOut);
  174. Assert.AreEqual(ConcreteSlotValueType.Vector4, dynOut1.concreteValueType);
  175. }
  176. [Test]
  177. public void DynamicInputsV4V1Works()
  178. {
  179. m_Graph.Connect(m_StaticNode.GetSlotReference(TestNode.V4Out), m_DynamicNode.GetSlotReference(DynamicNode.DynIn1));
  180. m_Graph.Connect(m_StaticNode.GetSlotReference(TestNode.V1Out), m_DynamicNode.GetSlotReference(DynamicNode.DynIn2));
  181. var dynOut1 = m_DynamicNode.FindOutputSlot<MaterialSlot>(DynamicNode.DynOut);
  182. Assert.AreEqual(ConcreteSlotValueType.Vector4, dynOut1.concreteValueType);
  183. }
  184. [Test]
  185. public void DynamicInputsV4V2Works()
  186. {
  187. m_Graph.Connect(m_StaticNode.GetSlotReference(TestNode.V4Out), m_DynamicNode.GetSlotReference(DynamicNode.DynIn1));
  188. m_Graph.Connect(m_StaticNode.GetSlotReference(TestNode.V2Out), m_DynamicNode.GetSlotReference(DynamicNode.DynIn2));
  189. var dynOut1 = m_DynamicNode.FindOutputSlot<MaterialSlot>(DynamicNode.DynOut);
  190. Assert.AreEqual(ConcreteSlotValueType.Vector2, dynOut1.concreteValueType);
  191. }
  192. [Test]
  193. public void DynamicInputsV4V3Works()
  194. {
  195. m_Graph.Connect(m_StaticNode.GetSlotReference(TestNode.V4Out), m_DynamicNode.GetSlotReference(DynamicNode.DynIn1));
  196. m_Graph.Connect(m_StaticNode.GetSlotReference(TestNode.V3Out), m_DynamicNode.GetSlotReference(DynamicNode.DynIn2));
  197. var dynOut1 = m_DynamicNode.FindOutputSlot<MaterialSlot>(DynamicNode.DynOut);
  198. Assert.AreEqual(ConcreteSlotValueType.Vector3, dynOut1.concreteValueType);
  199. }
  200. [Test]
  201. public void DynamicInputsV4V4Works()
  202. {
  203. m_Graph.Connect(m_StaticNode.GetSlotReference(TestNode.V4Out), m_DynamicNode.GetSlotReference(DynamicNode.DynIn1));
  204. m_Graph.Connect(m_StaticNode.GetSlotReference(TestNode.V4Out), m_DynamicNode.GetSlotReference(DynamicNode.DynIn2));
  205. var dynOut1 = m_DynamicNode.FindOutputSlot<MaterialSlot>(DynamicNode.DynOut);
  206. Assert.AreEqual(ConcreteSlotValueType.Vector4, dynOut1.concreteValueType);
  207. }
  208. }
  209. }