コード例 #1
0
        public void ShouldAssignAVariableInAConditionalTest()
        {
            var intVariable      = Expression.Variable(typeof(int), "i");
            var assignVariable   = Expression.Assign(intVariable, Expression.Constant(10));
            var isAssignmentFive = Expression.Equal(assignVariable, Expression.Constant(5));
            var ifFiveDoNothing  = Expression.IfThen(isAssignmentFive, Expression.Empty());

            var translated = ToReadableString(ifFiveDoNothing);

            const string EXPECTED = @"
if ((i = 10) == 5)
{
}";

            translated.ShouldBe(EXPECTED.TrimStart());
        }
        public void ShouldTranslateATryCatch()
        {
            var writeHello   = CreateLambda(() => Console.Write("Hello"));
            var exception    = Expression.Variable(typeof(TimeoutException), "timeoutEx");
            var timeoutCatch = Expression.Catch(exception, Expression.Empty());
            var tryCatch     = Expression.TryCatch(writeHello.Body, timeoutCatch);

            var translated = ToReadableString(tryCatch);

            const string EXPECTED = @"
try
{
    Console.Write(""Hello"");
}
catch (TimeoutException)
{
}";

            translated.ShouldBe(EXPECTED.TrimStart());
        }
        public void ShouldTranslateATryWithAFilteredCatch()
        {
            var writeHello   = CreateLambda(() => Console.Write("Hello"));
            var filter       = CreateLambda((TimeoutException timeoutEx) => timeoutEx.Data != null);
            var exception    = filter.Parameters.First();
            var timeoutCatch = Expression.Catch(exception, Expression.Empty(), filter.Body);
            var tryCatch     = Expression.TryCatch(writeHello.Body, timeoutCatch);

            var translated = ToReadableString(tryCatch);

            const string EXPECTED = @"
try
{
    Console.Write(""Hello"");
}
catch (TimeoutException timeoutEx) when (timeoutEx.Data != null)
{
}";

            translated.ShouldBe(EXPECTED.TrimStart());
        }