error.test
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:6k
源码类别:

通讯编程

开发平台:

Visual C++

  1. # Commands covered:  error, catch
  2. #
  3. # This file contains a collection of tests for one or more of the Tcl
  4. # built-in commands.  Sourcing this file into Tcl runs the tests and
  5. # generates output for errors.  No output means no errors were found.
  6. #
  7. # Copyright (c) 1991-1993 The Regents of the University of California.
  8. # Copyright (c) 1994-1996 Sun Microsystems, Inc.
  9. # Copyright (c) 1998-1999 by Scriptics Corporation.
  10. #
  11. # See the file "license.terms" for information on usage and redistribution
  12. # of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  13. #
  14. # RCS: @(#) $Id: error.test,v 1.9.2.3 2006/01/11 17:29:46 dgp Exp $
  15. if {[lsearch [namespace children] ::tcltest] == -1} {
  16.     package require tcltest 2
  17.     namespace import -force ::tcltest::*
  18. }
  19. proc foo {} {
  20.     global errorInfo
  21.     set a [catch {format [error glorp2]} b]
  22.     error {Human-generated}
  23. }
  24. proc foo2 {} {
  25.     global errorInfo
  26.     set a [catch {format [error glorp2]} b]
  27.     error {Human-generated} $errorInfo
  28. }
  29. # Catch errors occurring in commands and errors from "error" command
  30. test error-1.1 {simple errors from commands} {
  31.     catch {format [string index]} b
  32. } 1
  33. test error-1.2 {simple errors from commands} {
  34.     catch {format [string index]} b
  35.     set b
  36. } {wrong # args: should be "string index string charIndex"}
  37. test error-1.3 {simple errors from commands} {
  38.     catch {format [string index]} b
  39.     set errorInfo
  40.     # this used to return '... while executing ...', but
  41.     # string index is fully compiled as of 8.4a3
  42. } {wrong # args: should be "string index string charIndex"
  43.     while executing
  44. "string index"}
  45. test error-1.4 {simple errors from commands} {
  46.     catch {error glorp} b
  47. } 1
  48. test error-1.5 {simple errors from commands} {
  49.     catch {error glorp} b
  50.     set b
  51. } glorp
  52. test error-1.6 {simple errors from commands} {
  53.     catch {catch a b c} b
  54. } 1
  55. test error-1.7 {simple errors from commands} {
  56.     catch {catch a b c} b
  57.     set b
  58. } {wrong # args: should be "catch command ?varName?"}
  59. test error-1.8 {simple errors from commands} {nonPortable} {
  60.     # This test is non-portable: it generates a memory fault on
  61.     # machines like DEC Alphas (infinite recursion overflows
  62.     # stack?)
  63.     proc p {} {
  64.         uplevel 1 catch p error
  65.     }
  66.     p
  67. } 0
  68. # Check errors nested in procedures.  Also check the optional argument
  69. # to "error" to generate a new error trace.
  70. test error-2.1 {errors in nested procedures} {
  71.     catch foo b
  72. } 1
  73. test error-2.2 {errors in nested procedures} {
  74.     catch foo b
  75.     set b
  76. } {Human-generated}
  77. test error-2.3 {errors in nested procedures} {
  78.     catch foo b
  79.     set errorInfo
  80. } {Human-generated
  81.     while executing
  82. "error {Human-generated}"
  83.     (procedure "foo" line 4)
  84.     invoked from within
  85. "foo"}
  86. test error-2.4 {errors in nested procedures} {
  87.     catch foo2 b
  88. } 1
  89. test error-2.5 {errors in nested procedures} {
  90.     catch foo2 b
  91.     set b
  92. } {Human-generated}
  93. test error-2.6 {errors in nested procedures} {
  94.     catch foo2 b
  95.     set errorInfo
  96. } {glorp2
  97.     while executing
  98. "error glorp2"
  99.     (procedure "foo2" line 3)
  100.     invoked from within
  101. "foo2"}
  102. # Error conditions related to "catch".
  103. test error-3.1 {errors in catch command} {
  104.     list [catch {catch} msg] $msg
  105. } {1 {wrong # args: should be "catch command ?varName?"}}
  106. test error-3.2 {errors in catch command} {
  107.     list [catch {catch a b c} msg] $msg
  108. } {1 {wrong # args: should be "catch command ?varName?"}}
  109. test error-3.3 {errors in catch command} {
  110.     catch {unset a}
  111.     set a(0) 22
  112.     list [catch {catch {format 44} a} msg] $msg
  113. } {1 {couldn't save command result in variable}}
  114. catch {unset a}
  115. # More tests related to errorInfo and errorCode
  116. test error-4.1 {errorInfo and errorCode variables} {
  117.     list [catch {error msg1 msg2 msg3} msg] $msg $errorInfo $errorCode
  118. } {1 msg1 msg2 msg3}
  119. test error-4.2 {errorInfo and errorCode variables} {
  120.     list [catch {error msg1 {} msg3} msg] $msg $errorInfo $errorCode
  121. } {1 msg1 {msg1
  122.     while executing
  123. "error msg1 {} msg3"} msg3}
  124. test error-4.3 {errorInfo and errorCode variables} {
  125.     list [catch {error msg1 {}} msg] $msg $errorInfo $errorCode
  126. } {1 msg1 {msg1
  127.     while executing
  128. "error msg1 {}"} NONE}
  129. test error-4.4 {errorInfo and errorCode variables} {
  130.     set errorCode bogus
  131.     list [catch {error msg1} msg] $msg $errorInfo $errorCode
  132. } {1 msg1 {msg1
  133.     while executing
  134. "error msg1"} NONE}
  135. test error-4.5 {errorInfo and errorCode variables} {
  136.     set errorCode bogus
  137.     list [catch {error msg1 msg2 {}} msg] $msg $errorInfo $errorCode
  138. } {1 msg1 msg2 {}}
  139. # Errors in error command itself
  140. test error-5.1 {errors in error command} {
  141.     list [catch {error} msg] $msg
  142. } {1 {wrong # args: should be "error message ?errorInfo? ?errorCode?"}}
  143. test error-5.2 {errors in error command} {
  144.     list [catch {error a b c d} msg] $msg
  145. } {1 {wrong # args: should be "error message ?errorInfo? ?errorCode?"}}
  146. # Make sure that catch resets error information
  147. test error-6.1 {catch must reset error state} {
  148.     catch {error outer [catch {error inner inner.errorInfo inner.errorCode}]}
  149.     list $errorCode $errorInfo
  150. } {NONE 1}
  151. test error-6.3 {catch must reset error state} {
  152.     set errorCode BUG
  153.     catch {error outer [catch set]}
  154.     list $errorCode $errorInfo
  155. } {NONE 1}
  156. test error-6.4 {catch must reset error state} {
  157.     catch {error [catch {error foo bar baz}] 1}
  158.     list $errorCode $errorInfo
  159. } {NONE 1}
  160. test error-6.7 {catch must reset error state} {
  161.     proc foo {} {
  162.         return -code error -errorinfo [catch {error foo bar baz}]
  163.     }
  164.     catch foo
  165.     list $errorCode
  166. } {NONE}
  167. test error-6.9 {catch must reset error state} {
  168.     proc foo {} {
  169.         return -code error [catch {error foo bar baz}]
  170.     }
  171.     catch foo
  172.     list $errorCode
  173. } {NONE}
  174. namespace eval ::tcl::test::error {
  175.     test error-7.0 {Bug 1397843} -body {
  176.         variable cmds
  177.         proc EIWrite args {
  178.             variable cmds
  179.             lappend cmds [lindex [info level -2] 0]
  180.         }
  181.         proc BadProc {} {
  182.             set i a
  183.             incr i
  184.         }
  185.         trace add variable ::errorInfo write [namespace code EIWrite]
  186.         catch BadProc
  187.         trace remove variable ::errorInfo write [namespace code EIWrite]
  188.         set cmds
  189.     } -match glob -result {*BadProc*}
  190. }
  191. namespace delete ::tcl::test::error
  192. # cleanup
  193. catch {rename p ""}
  194. ::tcltest::cleanupTests
  195. return