using NUnit.Framework;
using System;
namespace UnityEngine.Rendering.Universal.Tests
{
///
/// Tests for terrain shaders in the Universal Render Pipeline.
/// Verifies that terrain detail shaders are available through both Shader.Find() and UniversalRenderPipelineAsset properties.
///
class TerrainShaderTests
{
UniversalRenderPipelineAsset m_UrpAsset;
[SetUp]
public void Setup()
{
// Only run this with URP in smoke tests.
if (GraphicsSettings.currentRenderPipeline is not UniversalRenderPipelineAsset)
Assert.Ignore("URP Only test");
m_UrpAsset = GraphicsSettings.currentRenderPipeline as UniversalRenderPipelineAsset;
}
///
/// Tests that the URP terrain detail shaders can be found using Shader.Find().
///
[TestCaseSource(nameof(ShaderNames))]
public void TerrainShaders_ShaderFind_ReturnsValidShader(string shaderName)
{
var shader = Shader.Find(shaderName);
Assert.IsNotNull(shader, $"{shaderName} should be found via Shader.Find()");
Assert.IsTrue(shader.isSupported, $"{shaderName} should be supported on current platform");
}
private static readonly string[] ShaderNames =
{
"Hidden/TerrainEngine/Details/UniversalPipeline/Vertexlit",
"Hidden/TerrainEngine/Details/UniversalPipeline/WavingDoublePass",
"Hidden/TerrainEngine/Details/UniversalPipeline/BillboardWavingDoublePass"
};
///
/// Tests that the UniversalRenderPipelineAsset terrain detail shader properties returns valid shaders.
///
[TestCaseSource(nameof(URPShaderAccessors))]
public void UniversalRenderPipelineAsset_TerrainShaders_ReturnsValidShaders(Func getShader, string description)
{
Assert.IsNotNull(m_UrpAsset, "UniversalRenderPipelineAsset should be available");
var shader = getShader(m_UrpAsset);
Assert.IsNotNull(shader, $"{description} should not be null");
Assert.IsTrue(shader.isSupported, $"{description} should be supported on current platform");
}
private static readonly object[] URPShaderAccessors =
{
new object[] { new Func(a => a.terrainDetailLitShader), "URP terrainDetailLitShader" },
new object[] { new Func(a => a.terrainDetailGrassShader), "URP terrainDetailGrassShader" },
new object[] { new Func(a => a.terrainDetailGrassBillboardShader), "URP terrainDetailGrassBillboardShader" }
};
}
}