UnityGame/Library/PackageCache/com.unity.shadergraph/Tests/Editor/UnitTests/BlockNodeTests.cs
2024-10-27 10:53:47 +03:00

120 lines
4.4 KiB
C#

using System.Collections.Generic;
using NUnit.Framework;
using UnityEngine;
using UnityEditor.Graphing;
using UnityEditor.ShaderGraph.Internal;
namespace UnityEditor.ShaderGraph.UnitTests
{
[TestFixture]
class BlockNodeTests
{
static BlockFieldDescriptor s_DescriptorA = new BlockFieldDescriptor("Test", "BlockA", string.Empty, new FloatControl(0.5f), ShaderStage.Fragment, true);
static BlockFieldDescriptor s_DescriptorB = new BlockFieldDescriptor("Test", "BlockB", string.Empty, new NormalControl(CoordinateSpace.World), ShaderStage.Fragment, true);
static Vector3MaterialSlot s_MaterialSlot = new Vector3MaterialSlot(0, "Test", "BlockB", SlotType.Input, Vector3.one);
static CustomSlotBlockFieldDescriptor s_CustomSlotDescriptor = new CustomSlotBlockFieldDescriptor("Test", "CustomBlock", string.Empty,
() => { return new Vector3MaterialSlot(0, "Test", "BlockB", SlotType.Input, Vector3.one); });
[OneTimeSetUp]
public void RunBeforeAnyTests()
{
Debug.unityLogger.logHandler = new ConsoleLogHandler();
}
[Test]
public void CanGatherBlockDescriptors()
{
GraphData graph = new GraphData();
graph.AddContexts();
Assert.IsNotNull(graph.blockFieldDescriptors);
Assert.AreNotEqual(0, graph.blockFieldDescriptors.Count);
}
[Test]
public void CanInitializeBlockNode()
{
var node = new BlockNode();
node.Init(s_DescriptorA);
Assert.IsNotNull(node.descriptor);
Assert.AreEqual(s_DescriptorA, node.descriptor);
Assert.AreEqual("Test.BlockA", $"{node.descriptor.tag}.{node.descriptor.name}");
}
[Test]
public void CanCreateSlotFromBlockDescriptor()
{
var node = new BlockNode();
node.Init(s_DescriptorA);
List<MaterialSlot> slots = new List<MaterialSlot>();
node.GetSlots(slots);
Assert.IsNotNull(slots);
Assert.AreEqual(1, slots.Count);
var vector3Slot = slots[0] as Vector1MaterialSlot;
Assert.IsNotNull(vector3Slot);
Assert.AreEqual(0, vector3Slot.id);
Assert.AreEqual(s_DescriptorA.displayName, vector3Slot.RawDisplayName());
Assert.AreEqual(s_DescriptorA.name, vector3Slot.shaderOutputName);
Assert.AreEqual(SlotType.Input, vector3Slot.slotType);
Assert.AreEqual(((FloatControl)s_DescriptorA.control).value, vector3Slot.value);
Assert.AreEqual(s_DescriptorA.shaderStage.GetShaderStageCapability(), vector3Slot.stageCapability);
}
[Test]
public void CanCreateSlotFromCustomSlotBlockDescriptor()
{
var node = new BlockNode();
node.Init(s_CustomSlotDescriptor);
List<MaterialSlot> slots = new List<MaterialSlot>();
node.GetSlots(slots);
Assert.IsNotNull(slots);
Assert.AreEqual(1, slots.Count);
Assert.AreNotEqual(s_MaterialSlot, slots[0]); //We actually WANT to create a new slot in this case
Assert.AreEqual(s_MaterialSlot.displayName, slots[0].displayName);
Assert.AreEqual(s_MaterialSlot.valueType, slots[0].valueType);
Assert.AreEqual(s_MaterialSlot.value, ((Vector3MaterialSlot)slots[0]).value);
}
[Test]
public void CanGetRequirementsFromBlockNode()
{
var node = new BlockNode();
node.Init(s_DescriptorB);
var iMayRequireNormals = node as IMayRequireNormal;
Assert.IsNotNull(iMayRequireNormals);
var neededCoordinateSpace = iMayRequireNormals.RequiresNormal(ShaderStageCapability.Fragment);
Assert.AreEqual(NeededCoordinateSpace.World, neededCoordinateSpace);
}
[Test]
public void CanSerializeDescriptor()
{
var node = new BlockNode();
node.Init(s_DescriptorA);
node.OnBeforeSerialize();
Assert.AreEqual("Test.BlockA", node.serializedDescriptor);
}
[Test]
public void CanGetBlockIndex()
{
GraphData graph = new GraphData();
graph.AddContexts();
var node = new BlockNode();
node.Init(s_DescriptorA);
graph.AddBlock(node, graph.fragmentContext, 0);
Assert.AreEqual(0, node.index);
}
}
}