mirror of
https://github.com/danbulant/Cosmos
synced 2026-05-19 12:30:32 +00:00
115 lines
3.3 KiB
C#
115 lines
3.3 KiB
C#
using Cosmos.TestRunner;
|
|
|
|
namespace Cosmos.Compiler.Tests.SimpleWriteLine.Kernel
|
|
{
|
|
public static class TestTryFinally
|
|
{
|
|
public static void Execute()
|
|
{
|
|
ClearToggles();
|
|
|
|
// test the normal flow, no explicit return, no return value
|
|
TestNormalFlowNoReturnValue();
|
|
|
|
Assert.IsTrue(mWasBeforeTry, "NormalFlowNoReturnValue.WasBeforeTry");
|
|
Assert.IsTrue(mWasInTry, "NormalFlowNoReturnValue.WasInTry");
|
|
Assert.IsTrue(mWasInFinally, "NormalFlowNoReturnValue.WasInFinally");
|
|
Assert.IsTrue(mWasAfterFinally, "NormalFlowNoReturnValue.WasAfterFinally");
|
|
|
|
ClearToggles();
|
|
TestExplicitReturnNoReturnValue();
|
|
|
|
Assert.IsTrue(mWasBeforeTry, "ExplicitReturnNoReturnValue.WasBeforeTry");
|
|
Assert.IsTrue(mWasInTry, "ExplicitReturnNoReturnValue.WasInTry");
|
|
Assert.IsTrue(mWasInFinally, "ExplicitReturnNoReturnValue.WasInFinally");
|
|
Assert.IsFalse(mWasAfterFinally, "ExplicitReturnNoReturnValue.WasAfterFinally");
|
|
|
|
ClearToggles();
|
|
TestNestedFinally();
|
|
|
|
Assert.IsTrue(mWasBeforeTry, "ExplicitReturnNoReturnValue.WasBeforeTry");
|
|
Assert.IsTrue(mWasInTry, "ExplicitReturnNoReturnValue.WasInTry");
|
|
Assert.IsTrue(mWasInFinally, "ExplicitReturnNoReturnValue.WasInFinally");
|
|
Assert.IsTrue(mWasInTry2, "ExplicitReturnNoReturnValue.WasInTry2");
|
|
Assert.IsTrue(mWasInFinally2, "ExplicitReturnNoReturnValue.WasInFinally2");
|
|
Assert.IsTrue(mWasAfterFinally, "ExplicitReturnNoReturnValue.WasAfterFinally");
|
|
}
|
|
|
|
private static bool mWasBeforeTry;
|
|
private static bool mWasInTry;
|
|
private static bool mWasInFinally;
|
|
private static bool mWasAfterFinally;
|
|
|
|
private static bool mWasInTry2;
|
|
private static bool mWasInFinally2;
|
|
|
|
private static void ClearToggles()
|
|
{
|
|
mWasBeforeTry = false;
|
|
mWasInTry = false;
|
|
mWasInFinally = false;
|
|
mWasAfterFinally = false;
|
|
|
|
mWasInTry2 = false;
|
|
mWasInFinally2 = false;
|
|
}
|
|
|
|
private static void TestNormalFlowNoReturnValue()
|
|
{
|
|
mWasBeforeTry = true;
|
|
|
|
try
|
|
{
|
|
mWasInTry = true;
|
|
}
|
|
finally
|
|
{
|
|
mWasInFinally = true;
|
|
}
|
|
|
|
mWasAfterFinally = true;
|
|
}
|
|
|
|
private static void TestExplicitReturnNoReturnValue()
|
|
{
|
|
mWasBeforeTry = true;
|
|
|
|
try
|
|
{
|
|
mWasInTry = true;
|
|
return;
|
|
}
|
|
finally
|
|
{
|
|
mWasInFinally = true;
|
|
}
|
|
|
|
mWasAfterFinally = true;
|
|
}
|
|
|
|
public static void TestNestedFinally()
|
|
{
|
|
mWasBeforeTry = true;
|
|
|
|
try
|
|
{
|
|
mWasInTry = true;
|
|
}
|
|
finally
|
|
{
|
|
try
|
|
{
|
|
mWasInTry2 = true;
|
|
}
|
|
finally
|
|
{
|
|
mWasInFinally2 = true;
|
|
}
|
|
|
|
mWasInFinally = true;
|
|
}
|
|
|
|
mWasAfterFinally = true;
|
|
}
|
|
}
|
|
}
|