Files

85 lines
2.7 KiB
C#

using NUnit.Framework;
using Unity.Pipeline.Editor.Authoring;
namespace Unity.Pipeline.Tests.Editor.Authoring
{
/// <summary>
/// Tests for ProjectPaths (CLI-190): Assets-relative resolution, the traversal/out-of-root
/// guards, and the configurable authoring root.
/// </summary>
public class ProjectPathsTests
{
[SetUp]
public void SetUp()
{
// Reset to the default root before each test so a leftover EditorPref can't leak in.
ProjectPaths.ResetAuthoringRoot();
}
[TearDown]
public void TearDown()
{
ProjectPaths.ResetAuthoringRoot();
}
[Test]
public void DefaultRoot_IsAssets()
{
ProjectPaths.ResetAuthoringRoot();
Assert.AreEqual("Assets", ProjectPaths.AuthoringRoot);
}
[Test]
public void Resolve_BarePath_PrependsAssets()
{
var resolved = ProjectPaths.Resolve("Gameplay/Enemies", out var error);
Assert.IsNull(error, error);
Assert.AreEqual("Assets/Gameplay/Enemies", resolved);
}
[Test]
public void Resolve_ExplicitAssetsPath_Unchanged()
{
var resolved = ProjectPaths.Resolve("Assets/Gameplay", out var error);
Assert.IsNull(error, error);
Assert.AreEqual("Assets/Gameplay", resolved);
}
[Test]
public void Resolve_Traversal_Fails()
{
Assert.IsNull(ProjectPaths.Resolve("../Outside", out var error));
Assert.IsNotEmpty(error);
}
[Test]
public void Resolve_EmptyPath_Fails()
{
Assert.IsNull(ProjectPaths.Resolve("", out var error));
Assert.IsNotEmpty(error);
}
[Test]
public void ConfigurableRoot_ConfinesBareAndRejectsOutside()
{
ProjectPaths.AuthoringRoot = "Assets/__CLI190Root";
// Bare path resolves under the configured root.
var inside = ProjectPaths.Resolve("Foo/Bar", out var insideError);
Assert.IsNull(insideError, insideError);
Assert.AreEqual("Assets/__CLI190Root/Foo/Bar", inside);
// Explicit path outside the configured root is rejected (confinement).
Assert.IsNull(ProjectPaths.Resolve("Assets/Other", out var outsideError));
Assert.IsNotEmpty(outsideError);
}
[Test]
public void SetAuthoringRoot_OutsideAssets_Throws()
{
Assert.Throws<System.ArgumentException>(() => ProjectPaths.AuthoringRoot = "Outside");
Assert.Throws<System.ArgumentException>(() => ProjectPaths.AuthoringRoot = "Assets/../Escape");
}
}
}