using NUnit.Framework;
using Unity.Pipeline.Compilation;
namespace Unity.Pipeline.Tests.Editor
{
///
/// Tests for EvalCodeCompiler's synchronous main-thread compilation/execution.
/// eval is a MainThreadRequired command, so the server marshals to the main thread before
/// invoking; the compiler runs synchronously on the caller (no background/dispatcher path).
///
public class EvalCodeCompilerTests
{
[Test]
public void CompileAndExecuteOnMainThread_ReturnsValue()
{
var result = EvalCodeCompiler.CompileAndExecuteOnMainThread("return 42;", 5000, null);
Assert.IsTrue(result.Success, $"Should succeed. Error: {result.Error}");
Assert.AreEqual(42, result.Result, "Should return the evaluated value");
}
[Test]
public void CompileAndExecuteOnMainThread_AccessesUnityApi()
{
var result = EvalCodeCompiler.CompileAndExecuteOnMainThread("return Application.unityVersion;", 5000, null);
Assert.IsTrue(result.Success, $"Unity API access should work. Error: {result.Error}");
Assert.IsInstanceOf(result.Result, "Unity version should be a string");
Assert.IsNotEmpty((string)result.Result, "Unity version should not be empty");
}
[Test]
public void CompileAndExecuteOnMainThread_CompilationError_ReturnsDiagnostics()
{
var result = EvalCodeCompiler.CompileAndExecuteOnMainThread("return 2 +;", 5000, null);
Assert.IsFalse(result.Success, "Invalid syntax should fail");
Assert.AreEqual("Compilation Failed", result.Error, "Should report a compilation error");
Assert.IsNotNull(result.Diagnostics, "Should have diagnostics");
Assert.Greater(result.Diagnostics.Count, 0, "Should include compilation diagnostics");
}
}
}