summary refs log tree commit diff stats
path: root/tests/exception/tfinally4.nim
diff options
context:
space:
mode:
authorAudun Wilhelmsen <skyfex@gmail.com>2014-02-23 00:19:18 +0100
committerAudun Wilhelmsen <skyfex@gmail.com>2014-02-23 00:19:18 +0100
commit66675d174b044c7e63cabfce1a235702f1da64aa (patch)
tree0b3cf5d9c2f86f7a6036daece6b67bfb560ceee4 /tests/exception/tfinally4.nim
parent8cccaebc2ed1ab6464eec52ced757bf1ec048db5 (diff)
downloadNim-66675d174b044c7e63cabfce1a235702f1da64aa.tar.gz
Added tougher test case for return within finally statement.
Diffstat (limited to 'tests/exception/tfinally4.nim')
-rw-r--r--tests/exception/tfinally4.nim40
1 files changed, 40 insertions, 0 deletions
diff --git a/tests/exception/tfinally4.nim b/tests/exception/tfinally4.nim
new file mode 100644
index 000000000..05c57c4f5
--- /dev/null
+++ b/tests/exception/tfinally4.nim
@@ -0,0 +1,40 @@
+discard """
+  file: "tfinally4.nim"
+  output: "B1\nA1\n1\nB1\nB2\ncatch\nA1\n1\nB1\nA1\nA2\n2\nB1\nB2\ncatch\nA1\nA2\n0\nB1\nA1\n1\nB1\nB2\nA1\n1\nB1\nA1\nA2\n2\nB1\nB2\nA1\nA2\n3"
+"""
+
+# More thorough test of return-in-finaly
+
+var raiseEx = true
+var returnA = true
+var returnB = false
+ 
+proc main: int = 
+  try: #A
+    try: #B
+      if raiseEx:
+        raise newException(EOS, "")
+      return 3
+    finally: #B
+      echo "B1"
+      if returnB:
+        return 2
+      echo "B2"
+  except EOS: #A
+    echo "catch"
+  finally: #A
+    echo "A1"
+    if returnA:
+      return 1
+    echo "A2"
+
+for x in [true, false]:
+  for y in [true, false]:
+    for z in [true, false]:
+      # echo "raiseEx: " & $x
+      # echo "returnA: " & $y
+      # echo "returnB: " & $z
+      raiseEx = x
+      returnA = y
+      returnB = z
+      echo main()