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.
 
 
 
 

98 lines
4.2 KiB

using NUnit.Framework;
using UnityEngine;
using UnityEditor.Graphing;
using UnityEditor.ShaderGraph.Internal;
namespace UnityEditor.ShaderGraph.UnitTests
{
[TestFixture]
class LiteralFloatTests
{
private GraphData m_Graph;
private LiteralFloatNode m_LiteralFloatNode;
private PropertyNode m_FloatPropertyNode;
class LiteralFloatNode : AbstractMaterialNode
{
public const int LitFloatIn = 0;
public const int NonLitFloatOut = 1;
public LiteralFloatNode()
{
AddSlot(new Vector1MaterialSlot(LitFloatIn, "LiteralFloatIn", "LiteralFloatIn", SlotType.Input, 0, literal: true));
AddSlot(new Vector1MaterialSlot(NonLitFloatOut, "NonLiteralFloatOut", "NonLiteralFloatOut", SlotType.Output, 1, literal: false));
}
}
[OneTimeSetUp]
public void RunBeforeAnyTests()
{
Debug.unityLogger.logHandler = new ConsoleLogHandler();
}
[SetUp]
public void TestSetUp()
{
m_Graph = new GraphData();
m_LiteralFloatNode = new LiteralFloatNode();
m_Graph.AddNode(m_LiteralFloatNode);
m_FloatPropertyNode = new PropertyNode { property = new Vector1ShaderProperty(){LiteralFloatMode = false} };
// required so property node isn't auto-converted to Vector1Nodes
m_Graph.AddGraphInput(m_FloatPropertyNode.property);
m_Graph.AddNode(m_FloatPropertyNode);
}
[Test]
public void PropertyInputDoesNotGenerateLiteralFloat()
{
Assert.IsFalse(m_FloatPropertyNode.GetSlotReference(PropertyNode.OutputSlotId).slot.IsCompatibleWith(m_LiteralFloatNode.GetSlotReference(LiteralFloatNode.LitFloatIn).slot));
m_Graph.isSubGraph = true;
m_Graph.ValidateGraph();
Assert.IsFalse(m_FloatPropertyNode.GetSlotReference(PropertyNode.OutputSlotId).slot.IsCompatibleWith(m_LiteralFloatNode.GetSlotReference(LiteralFloatNode.LitFloatIn).slot));
}
[Test]
public void RedirectPropagatesLiteral()
{
m_Graph.owner = ScriptableObject.CreateInstance<GraphObject>();
(m_FloatPropertyNode.property as Vector1ShaderProperty).LiteralFloatMode = true;
var outputSlotRef = m_FloatPropertyNode.GetSlotReference(PropertyNode.OutputSlotId);
var inputSlotRef = m_LiteralFloatNode.GetSlotReference(LiteralFloatNode.LitFloatIn);
GroupData group = null;
if (outputSlotRef.slot.owner.group == inputSlotRef.slot.owner.group)
{
group = inputSlotRef.slot.owner.group;
}
var redirectNode = RedirectNodeData.Create(
m_Graph, ConcreteSlotValueType.Vector1, Vector2.zero,
inputSlotRef,
outputSlotRef,
group);
Assert.IsTrue(redirectNode.GetSlotReference(RedirectNodeData.kOutputSlotID).slot.IsCompatibleWith(inputSlotRef.slot));
(m_FloatPropertyNode.property as Vector1ShaderProperty).LiteralFloatMode = false;
// trigger propagation
m_Graph.ValidateGraph();
// properties in non-subgraphs are _always non-literal_
Assert.IsFalse(redirectNode.GetSlotReference(RedirectNodeData.kOutputSlotID).slot.IsCompatibleWith(inputSlotRef.slot));
m_Graph.isSubGraph = true;
m_Graph.ValidateGraph();
Assert.IsFalse(redirectNode.GetSlotReference(RedirectNodeData.kOutputSlotID).slot.IsCompatibleWith(inputSlotRef.slot));
(m_FloatPropertyNode.property as Vector1ShaderProperty).LiteralFloatMode = true;
m_Graph.ValidateGraph();
Assert.IsTrue(redirectNode.GetSlotReference(RedirectNodeData.kOutputSlotID).slot.IsCompatibleWith(inputSlotRef.slot));
}
[Test]
public void NonLiteralTriggersError()
{
var literalFloatNode = new LiteralFloatNode();
m_Graph.AddNode(literalFloatNode);
m_Graph.Connect(literalFloatNode.GetSlotReference(LiteralFloatNode.NonLitFloatOut), m_LiteralFloatNode.GetSlotReference(LiteralFloatNode.LitFloatIn));
Assert.IsTrue(m_LiteralFloatNode.hasError);
}
}
}