public void ShouldTranslateALoopWithAContinueStatement() { var intVariable = Expression.Variable(typeof(int), "i"); var intLessThanThree = Expression.LessThan(intVariable, Expression.Constant(3)); var incrementVariable = Expression.Increment(intVariable); var continueLoop = Expression.Continue(Expression.Label()); var incrementAndContinue = Expression.Block(incrementVariable, continueLoop); var ifLessThanThreeContinue = Expression.IfThen(intLessThanThree, incrementAndContinue); var writeFinished = CreateLambda(() => Console.Write("Finished!")); var returnFromLoop = Expression.Return(Expression.Label()); var loopBody = Expression.Block(ifLessThanThreeContinue, writeFinished.Body, returnFromLoop); var loop = Expression.Loop(loopBody, returnFromLoop.Target, continueLoop.Target); var translated = ToReadableString(loop); const string EXPECTED = @" while (true) { if (i < 3) { ++i; continue; } Console.Write(""Finished!""); return; }"; translated.ShouldBe(EXPECTED.TrimStart()); }