// Copyright (c) Microsoft. All rights reserved. using System; namespace Microsoft.Agents.AI.Workflows.Declarative.UnitTests; /// /// Tests declarative workflow exceptions. /// public sealed class DeclarativeWorkflowExceptionTest(ITestOutputHelper output) : WorkflowTest(output) { [Fact] public void WorkflowExecutionException() { AssertDefault(() => throw new DeclarativeActionException()); AssertMessage((message) => throw new DeclarativeActionException(message)); AssertInner((message, inner) => throw new DeclarativeActionException(message, inner)); } [Fact] public void WorkflowModelException() { AssertDefault(() => throw new DeclarativeModelException()); AssertMessage((message) => throw new DeclarativeModelException(message)); AssertInner((message, inner) => throw new DeclarativeModelException(message, inner)); } private static void AssertDefault(Action throwAction) where TException : Exception { TException exception = Assert.Throws(throwAction.Invoke); Assert.NotEmpty(exception.Message); Assert.Null(exception.InnerException); } private static void AssertMessage(Action throwAction) where TException : Exception { const string Message = "Test exception message"; TException exception = Assert.Throws(() => throwAction.Invoke(Message)); Assert.Equal(Message, exception.Message); Assert.Null(exception.InnerException); } private static void AssertInner(Action throwAction) where TException : Exception { const string Message = "Test exception message"; NotSupportedException innerException = new("Inner exception message"); TException exception = Assert.Throws(() => throwAction.Invoke(Message, innerException)); Assert.Equal(Message, exception.Message); Assert.Equal(innerException, exception.InnerException); } }