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

通讯编程

开发平台:

Visual C++

  1. '"
  2. '" Copyright (c) 1990-1994 The Regents of the University of California
  3. '" Copyright (c) 1994-1997 Sun Microsystems, Inc.
  4. '" Copyright (c) 1998-1999 Scriptics Corporation
  5. '" Copyright (c) 2000 Ajuba Solutions
  6. '" Contributions from Don Porter, NIST, 2002. (not subject to US copyright)
  7. '"
  8. '" See the file "license.terms" for information on usage and redistribution
  9. '" of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  10. '" 
  11. '" RCS: @(#) $Id: tcltest.n,v 1.38.2.6 2007/02/20 17:53:18 dgp Exp $
  12. '" 
  13. .so man.macros
  14. .TH "tcltest" n 2.2 tcltest "Tcl Bundled Packages"
  15. .BS
  16. '" Note:  do not modify the .SH NAME line immediately below!
  17. .SH NAME
  18. tcltest - Test harness support code and utilities
  19. .SH SYNOPSIS
  20. .nf
  21. fBpackage require tcltest ?2.2.5?fR
  22. .sp
  23. fBtcltest::test fIname description ?option value ...?fR
  24. fBtcltest::test fIname description ?constraints? body resultfR
  25. .sp
  26. fBtcltest::loadTestedCommandsfR
  27. fBtcltest::makeDirectory fIname ?directory?fR
  28. fBtcltest::removeDirectory fIname ?directory?fR
  29. fBtcltest::makeFile fIcontents name ?directory?fR
  30. fBtcltest::removeFile fIname ?directory?fR
  31. fBtcltest::viewFile fIname ?directory?fR
  32. fBtcltest::cleanupTests fI?runningMultipleTests?fR
  33. fBtcltest::runAllTestsfR
  34. .sp
  35. fBtcltest::configurefR
  36. fBtcltest::configure fIoptionfR
  37. fBtcltest::configure fIoption value ?option value ...?fR
  38. fBtcltest::customMatch fImode commandfR
  39. fBtcltest::testConstraint fIconstraint ?value?fR
  40. fBtcltest::outputChannel fI?channelID?fR
  41. fBtcltest::errorChannel fI?channelID?fR
  42. fBtcltest::interpreter fI?interp?fR
  43. .sp
  44. fBtcltest::debug fI?level?fR
  45. fBtcltest::errorFile fI?filename?fR
  46. fBtcltest::limitConstraints fI?boolean?fR
  47. fBtcltest::loadFile fI?filename?fR
  48. fBtcltest::loadScript fI?script?fR
  49. fBtcltest::match fI?patternList?fR
  50. fBtcltest::matchDirectories fI?patternList?fR
  51. fBtcltest::matchFiles fI?patternList?fR
  52. fBtcltest::outputFile fI?filename?fR
  53. fBtcltest::preserveCore fI?level?fR
  54. fBtcltest::singleProcess fI?boolean?fR
  55. fBtcltest::skip fI?patternList?fR
  56. fBtcltest::skipDirectories fI?patternList?fR
  57. fBtcltest::skipFiles fI?patternList?fR
  58. fBtcltest::temporaryDirectory fI?directory?fR
  59. fBtcltest::testsDirectory fI?directory?fR
  60. fBtcltest::verbose fI?level?fR
  61. .sp
  62. fBtcltest::test fIname description optionListfR
  63. fBtcltest::bytestring fIstringfR
  64. fBtcltest::normalizeMsg fImsgfR
  65. fBtcltest::normalizePath fIpathVarfR
  66. fBtcltest::workingDirectory fI?dir?fR
  67. .fi
  68. .BE
  69. .SH DESCRIPTION
  70. .PP
  71. The fBtcltestfR package provides several utility commands useful
  72. in the construction of test suites for code instrumented to be
  73. run by evaluation of Tcl commands.  Notably the built-in commands
  74. of the Tcl library itself are tested by a test suite using the
  75. tcltest package.
  76. .PP
  77. All the commands provided by the fBtcltestfR package are defined
  78. in and exported from the fB::tcltestfR namespace, as indicated in
  79. the fBSYNOPSISfR above.  In the following sections, all commands
  80. will be described by their simple names, in the interest of brevity.
  81. .PP
  82. The central command of fBtcltestfR is [fBtestfR] that defines
  83. and runs a test.  Testing with [fBtestfR] involves evaluation
  84. of a Tcl script and comparing the result to an expected result, as
  85. configured and controlled by a number of options.  Several other
  86. commands provided by fBtcltestfR govern the configuration of
  87. [fBtestfR] and the collection of many [fBtestfR] commands into
  88. test suites.
  89. .PP
  90. See fBCREATING TEST SUITES WITH TCLTESTfR below for an extended example
  91. of how to use the commands of fBtcltestfR to produce test suites
  92. for your Tcl-enabled code.
  93. .SH COMMANDS
  94. .TP
  95. fBtestfR fIname description ?option value ...?fR
  96. Defines and possibly runs a test with the name fInamefR and
  97. description fIdescriptionfR.  The name and description of a test
  98. are used in messages reported by [fBtestfR] during the
  99. test, as configured by the options of fBtcltestfR.  The
  100. remaining fIoption valuefR arguments to [fBtestfR]
  101. define the test, including the scripts to run, the conditions
  102. under which to run them, the expected result, and the means
  103. by which the expected and actual results should be compared.
  104. See fBTESTSfR below for a complete description of the valid
  105. options and how they define a test.  The [fBtestfR] command
  106. returns an empty string.  
  107. .TP
  108. fBtestfR fIname description ?constraints? body resultfR
  109. This form of [fBtestfR] is provided to support test suites written
  110. for version 1 of the fBtcltestfR package, and also a simpler
  111. interface for a common usage.  It is the same as
  112. [fBtestfR fIname descriptionfB -constraints fIconstraintsfB -body
  113. fIbodyfB -result fIresultfR].  All other options to [fBtestfR]
  114. take their default values.  When fIconstraintsfR is omitted, this
  115. form of [fBtestfR] can be distinguished from the first because
  116. all fIoptionfRs begin with ``-''.
  117. .TP
  118. fBloadTestedCommandsfR
  119. Evaluates in the caller's context the script specified by 
  120. [fBconfigure -loadfR] or [fBconfigure -loadfilefR].
  121. Returns the result of that script evaluation, including any error
  122. raised by the script.  Use this command and the related
  123. configuration options to provide the commands to be tested to
  124. the interpreter running the test suite.
  125. .TP
  126. fBmakeFilefR fIcontents name ?directory?fR
  127. Creates a file named fInamefR relative to
  128. directory fIdirectoryfR and write fIcontentsfR
  129. to that file using the encoding [fBencoding systemfR].
  130. If fIcontentsfR does not end with a newline, a newline
  131. will be appended so that the file named fInamefR
  132. does end with a newline.  Because the system encoding is used,
  133. this command is only suitable for making text files.
  134. The file will be removed by the next evaluation
  135. of [fBcleanupTestsfR], unless it is removed by
  136. [fBremoveFilefR] first.  The default value of
  137. fIdirectoryfR is the directory [fBconfigure -tmpdirfR].
  138. Returns the full path of the file created.  Use this command
  139. to create any text file required by a test with contents as needed.
  140. .TP
  141. fBremoveFilefR fIname ?directory?fR
  142. Forces the file referenced by fInamefR to be removed.  This file name
  143. should be relative to fIdirectoryfR.   The default value of
  144. fIdirectoryfR is the directory [fBconfigure -tmpdirfR].
  145. Returns an empty string.  Use this command to delete files
  146. created by [fBmakeFilefR].  
  147. .TP
  148. fBmakeDirectoryfR fIname ?directory?fR
  149. Creates a directory named fInamefR relative to directory fIdirectoryfR.
  150. The directory will be removed by the next evaluation of [fBcleanupTestsfR],
  151. unless it is removed by [fBremoveDirectoryfR] first.
  152. The default value of fIdirectoryfR is the directory
  153. [fBconfigure -tmpdirfR].
  154. Returns the full path of the directory created.  Use this command
  155. to create any directories that are required to exist by a test.
  156. .TP
  157. fBremoveDirectoryfR fIname ?directory?fR
  158. Forces the directory referenced by fInamefR to be removed. This
  159. directory should be relative to fIdirectoryfR.
  160. The default value of fIdirectoryfR is the directory
  161. [fBconfigure -tmpdirfR].
  162. Returns an empty string.  Use this command to delete any directories
  163. created by [fBmakeDirectoryfR].  
  164. .TP
  165. fBviewFilefR fIfile ?directory?fR
  166. Returns the contents of fIfilefR, except for any
  167. final newline, just as [fBread -nonewlinefR] would return.
  168. This file name should be relative to fIdirectoryfR.   
  169. The default value of fIdirectoryfR is the directory
  170. [fBconfigure -tmpdirfR].  Use this command
  171. as a convenient way to turn the contents of a file generated
  172. by a test into the result of that test for matching against
  173. an expected result.  The contents of the file are read using
  174. the system encoding, so its usefulness is limited to text
  175. files.
  176. .TP
  177. fBcleanupTestsfR
  178. Intended to clean up and summarize after several tests have been
  179. run.  Typically called once per test file, at the end of the file
  180. after all tests have been completed.  For best effectiveness, be
  181. sure that the [fBcleanupTestsfR] is evaluated even if an error
  182. occurs earlier in the test file evaluation.  
  183. .sp
  184. Prints statistics about the tests run and removes files that were
  185. created by [fBmakeDirectoryfR] and [fBmakeFilefR] since the
  186. last [fBcleanupTestsfR].  Names of files and directories 
  187. in the directory [fBconfigure -tmpdirfR] created since
  188. the last [fBcleanupTestsfR], but not created by
  189. [fBmakeFilefR] or [fBmakeDirectoryfR] are printed
  190. to [fBoutputChannelfR].  This command also restores the original
  191. shell environment, as described by the ::env
  192. array. Returns an empty string.
  193. .TP
  194. fBrunAllTestsfR
  195. This is a master command meant to run an entire suite of tests,
  196. spanning multiple files and/or directories, as governed by
  197. the configurable options of fBtcltestfR.  See fBRUNNING ALL TESTSfR
  198. below for a complete description of the many variations possible
  199. with [fBrunAllTestsfR].
  200. .SH "CONFIGURATION COMMANDS"
  201. .TP
  202. fBconfigurefR
  203. Returns the list of configurable options supported by fBtcltestfR.
  204. See fBCONFIGURABLE OPTIONSfR below for the full list of options,
  205. their valid values, and their effect on fBtcltestfR operations.
  206. .TP
  207. fBconfigure fIoptionfR
  208. Returns the current value of the supported configurable option fIoptionfR.
  209. Raises an error if fIoptionfR is not a supported configurable option.
  210. .TP
  211. fBconfigure fIoption value ?option value ...?fR
  212. Sets the value of each configurable option fIoptionfR to the
  213. corresponding value fIvaluefR, in order.  Raises an error if
  214. an fIoptionfR is not a supported configurable option, or if
  215. fIvaluefR is not a valid value for the corresponding fIoptionfR,
  216. or if a fIvaluefR is not provided.  When an error is raised, the
  217. operation of [fBconfigurefR] is halted, and subsequent fIoption valuefR
  218. arguments are not processed.
  219. .sp
  220. If the environment variable fB::env(TCLTEST_OPTIONS)fR exists when
  221. the fBtcltestfR package is loaded (by [fBpackage require tcltestfR])
  222. then its value is taken as a list of arguments to pass to [fBconfigurefR].
  223. This allows the default values of the configuration options to be
  224. set by the environment.
  225. .TP
  226. fBcustomMatch fImode scriptfR
  227. Registers fImodefR as a new legal value of the fB-matchfR option
  228. to [fBtestfR].  When the fB-match fImodefR option is
  229. passed to [fBtestfR], the script fIscriptfR will be evaluated
  230. to compare the actual result of evaluating the body of the test
  231. to the expected result.
  232. To perform the match, the fIscriptfR is completed with two additional
  233. words, the expected result, and the actual result, and the completed script
  234. is evaluated in the global namespace.
  235. The completed script is expected to return a boolean value indicating
  236. whether or not the results match.  The built-in matching modes of
  237. [fBtestfR] are fBexactfR, fBglobfR, and fBregexpfR.
  238. .TP
  239. fBtestConstraint fIconstraint ?boolean?fR
  240. Sets or returns the boolean value associated with the named fIconstraintfR.
  241. See fBTEST CONSTRAINTSfR below for more information.
  242. .TP
  243. fBinterpreterfR fI?executableName?fR
  244. Sets or returns the name of the executable to be [fBexecfR]ed by
  245. [fBrunAllTestsfR] to run each test file when
  246. [fBconfigure -singleprocfR] is false.
  247. The default value for [fBinterpreterfR] is the name of the
  248. currently running program as returned by [fBinfo nameofexecutablefR].
  249. .TP
  250. fBoutputChannelfR fI?channelID?fR
  251. Sets or returns the output channel ID.  This defaults to stdout.
  252. Any test that prints test related output should send
  253. that output to [fBoutputChannelfR] rather than letting
  254. that output default to stdout.
  255. .TP
  256. fBerrorChannelfR fI?channelID?fR
  257. Sets or returns the error channel ID.  This defaults to stderr.
  258. Any test that prints error messages should send
  259. that output to [fBerrorChannelfR] rather than printing
  260. directly to stderr.
  261. .SH "SHORTCUT COMMANDS"
  262. .TP
  263. fBdebug fI?level?fR
  264. Same as [fBconfigure -debug fI?level?fR].
  265. .TP
  266. fBerrorFile fI?filename?fR
  267. Same as [fBconfigure -errfile fI?filename?fR].
  268. .TP
  269. fBlimitConstraints fI?boolean?fR
  270. Same as [fBconfigure -limitconstraints fI?boolean?fR].
  271. .TP
  272. fBloadFile fI?filename?fR
  273. Same as [fBconfigure -loadfile fI?filename?fR].
  274. .TP
  275. fBloadScript fI?script?fR
  276. Same as [fBconfigure -load fI?script?fR].
  277. .TP
  278. fBmatch fI?patternList?fR
  279. Same as [fBconfigure -match fI?patternList?fR].
  280. .TP
  281. fBmatchDirectories fI?patternList?fR
  282. Same as [fBconfigure -relateddir fI?patternList?fR].
  283. .TP
  284. fBmatchFiles fI?patternList?fR
  285. Same as [fBconfigure -file fI?patternList?fR].
  286. .TP
  287. fBoutputFile fI?filename?fR
  288. Same as [fBconfigure -outfile fI?filename?fR].
  289. .TP
  290. fBpreserveCore fI?level?fR
  291. Same as [fBconfigure -preservecore fI?level?fR].
  292. .TP
  293. fBsingleProcess fI?boolean?fR
  294. Same as [fBconfigure -singleproc fI?boolean?fR].
  295. .TP
  296. fBskip fI?patternList?fR
  297. Same as [fBconfigure -skip fI?patternList?fR].
  298. .TP
  299. fBskipDirectories fI?patternList?fR
  300. Same as [fBconfigure -asidefromdir fI?patternList?fR].
  301. .TP
  302. fBskipFiles fI?patternList?fR
  303. Same as [fBconfigure -notfile fI?patternList?fR].
  304. .TP
  305. fBtemporaryDirectory fI?directory?fR
  306. Same as [fBconfigure -tmpdir fI?directory?fR].
  307. .TP
  308. fBtestsDirectory fI?directory?fR
  309. Same as [fBconfigure -testdir fI?directory?fR].
  310. .TP
  311. fBverbose fI?level?fR
  312. Same as [fBconfigure -verbose fI?level?fR].
  313. .SH "OTHER COMMANDS"
  314. .PP
  315. The remaining commands provided by fBtcltestfR have better
  316. alternatives provided by fBtcltestfR or fBTclfR itself.  They
  317. are retained to support existing test suites, but should be avoided
  318. in new code.
  319. .TP
  320. fBtestfR fIname description optionListfR
  321. This form of [fBtestfR] was provided to enable passing many
  322. options spanning several lines to [fBtestfR] as a single
  323. argument quoted by braces, rather than needing to backslash quote
  324. the newlines between arguments to [fBtestfR].  The fIoptionListfR
  325. argument is expected to be a list with an even number of elements
  326. representing fIoptionfR and fIvaluefR arguments to pass
  327. to [fBtestfR].  However, these values are not passed directly, as
  328. in the alternate forms of [fBswitchfR].  Instead, this form makes
  329. an unfortunate attempt to overthrow Tcl's substitution rules by
  330. performing substitutions on some of the list elements as an attempt to
  331. implement a ``do what I mean'' interpretation of a brace-enclosed
  332. ``block''.  The result is nearly impossible to document clearly, and
  333. for that reason this form is not recommended.  See the examples in
  334. fBCREATING TEST SUITES WITH TCLTESTfR below to see that this
  335. form is really not necessary to avoid backslash-quoted newlines.
  336. If you insist on using this form, examine
  337. the source code of fBtcltestfR if you want to know the substitution
  338. details, or just enclose the third through last argument
  339. to [fBtestfR] in braces and hope for the best.
  340. .TP
  341. fBworkingDirectoryfR fI?directoryName?fR
  342. Sets or returns the current working directory when the test suite is
  343. running.  The default value for workingDirectory is the directory in
  344. which the test suite was launched.  The Tcl commands [fBcdfR] and
  345. [fBpwdfR] are sufficient replacements.
  346. .TP
  347. fBnormalizeMsgfR fImsgfR
  348. Returns the result of removing the ``extra'' newlines from fImsgfR,
  349. where ``extra'' is rather imprecise.  Tcl offers plenty of string
  350. processing commands to modify strings as you wish, and
  351. [fBcustomMatchfR] allows flexible matching of actual and expected
  352. results.
  353. .TP
  354. fBnormalizePathfR fIpathVarfR
  355. Resolves symlinks in a path, thus creating a path without internal
  356. redirection.  It is assumed that fIpathVarfR is absolute.
  357. fIpathVarfR is modified in place.  The Tcl command [fBfile normalizefR]
  358. is a sufficient replacement.
  359. .TP
  360. fBbytestringfR fIstringfR
  361. Construct a string that consists of the requested sequence of bytes,
  362. as opposed to a string of properly formed UTF-8 characters using the
  363. value supplied in fIstringfR.  This allows the tester to create
  364. denormalized or improperly formed strings to pass to C procedures that
  365. are supposed to accept strings with embedded NULL types and confirm
  366. that a string result has a certain pattern of bytes.  This is
  367. exactly equivalent to the Tcl command [fBencoding convertfrom identityfR].
  368. .SH TESTS
  369. .PP
  370. The [fBtestfR] command is the heart of the fBtcltestfR package.
  371. Its essential function is to evaluate a Tcl script and compare
  372. the result with an expected result.  The options of [fBtestfR]
  373. define the test script, the environment in which to evaluate it,
  374. the expected result, and how the compare the actual result to
  375. the expected result.  Some configuration options of fBtcltestfR
  376. also influence how [fBtestfR] operates.
  377. .PP
  378. The valid options for [fBtestfR] are summarized:
  379. .CS
  380. .ta 0.8i
  381. fBtestfR fInamefR fIdescriptionfR
  382. ?-constraints fIkeywordList|expressionfR?
  383. ?-setup fIsetupScriptfR?
  384. ?-body fItestScriptfR?
  385. ?-cleanup fIcleanupScriptfR?
  386. ?-result fIexpectedAnswerfR?
  387. ?-output fIexpectedOutputfR?
  388. ?-errorOutput fIexpectedErrorfR?
  389. ?-returnCodes fIcodeListfR?
  390. ?-match fImodefR?
  391. .CE
  392. The fInamefR may be any string.  It is conventional to choose
  393. a fInamefR according to the pattern:
  394. .CS
  395. fItargetfR-fImajorNumfR.fIminorNumfR
  396. .CE
  397. For white-box (regression) tests, the target should be the name of the
  398. C function or Tcl procedure being tested.  For black-box tests, the
  399. target should be the name of the feature being tested.  Some conventions
  400. call for the names of black-box tests to have the suffix fB_bbfR.
  401. Related tests should share a major number.  As a test suite evolves,
  402. it is best to have the same test name continue to correspond to the
  403. same test, so that it remains meaningful to say things like ``Test
  404. foo-1.3 passed in all releases up to 3.4, but began failing in
  405. release 3.5.''
  406. .PP
  407. During evaluation of [fBtestfR], the fInamefR will be compared
  408. to the lists of string matching patterns returned by
  409. [fBconfigure -matchfR], and [fBconfigure -skipfR].  The test
  410. will be run only if fInamefR matches any of the patterns from
  411. [fBconfigure -matchfR] and matches none of the patterns
  412. from [fBconfigure -skipfR].
  413. .PP
  414. The fIdescriptionfR should be a short textual description of the
  415. test.  The fIdescriptionfR is included in output produced by the
  416. test, typically test failure messages.  Good fIdescriptionfR values
  417. should briefly explain the purpose of the test to users of a test suite.
  418. The name of a Tcl or C function being tested should be included in the
  419. description for regression tests.  If the test case exists to reproduce
  420. a bug, include the bug ID in the description. 
  421. .PP
  422. Valid attributes and associated values are:
  423. .TP
  424. fB-constraints fIkeywordList|expressionfR
  425. The optional fB-constraintsfR attribute can be list of one or more
  426. keywords or an expression.  If the fB-constraintsfR value is a list of
  427. keywords, each of these keywords should be the name of a constraint
  428. defined by a call to [fBtestConstraintfR].  If any of the listed
  429. constraints is false or does not exist, the test is skipped.  If the
  430. fB-constraintsfR value is an expression, that expression
  431. is evaluated. If the expression evaluates to true, then the test is run.
  432. Note that the expression form of fB-constraintsfR may interfere with the
  433. operation of [fBconfigure -constraintsfR] and
  434. [fBconfigure -limitconstraintsfR], and is not recommended.
  435. Appropriate constraints should be added to any tests that should
  436. not always be run.  That is, conditional evaluation of a test
  437. should be accomplished by the fB-constraintsfR option, not by
  438. conditional evaluation of [fBtestfR].  In that way, the same
  439. number of tests are always reported by the test suite, though
  440. the number skipped may change based on the testing environment.
  441. The default value is an empty list.  
  442. See fBTEST CONSTRAINTSfR below for a list of built-in constraints 
  443. and information on how to add your own constraints.
  444. .TP
  445. fB-setup fIscriptfR
  446. The optional fB-setupfR attribute indicates a fIscriptfR that will be run
  447. before the script indicated by the fB-bodyfR attribute.  If evaluation
  448. of fIscriptfR raises an error, the test will fail.  The default value
  449. is an empty script.
  450. .TP
  451. fB-body fIscriptfR
  452. The fB-bodyfR attribute indicates the fIscriptfR to run to carry out the 
  453. test.  It must return a result that can be checked for correctness.
  454. If evaluation of fIscriptfR raises an error, the test will fail.
  455. The default value is an empty script.
  456. .TP
  457. fB-cleanup fIscriptfR
  458. The optional fB-cleanupfR attribute indicates a fIscriptfR that will be
  459. run after the script indicated by the fB-bodyfR attribute.
  460. If evaluation of fIscriptfR raises an error, the test will fail.
  461. The default value is an empty script.
  462. .TP
  463. fB-match fImodefR
  464. The fB-matchfR attribute determines how expected answers supplied by
  465. fB-resultfR, fB-outputfR, and fB-errorOutputfR are compared.  Valid
  466. values for fImodefR are fBregexpfR, fBglobfR, fBexactfR, and
  467. any value registered by a prior call to [fBcustomMatchfR].  The default
  468. value is fBexactfR.
  469. .TP
  470. fB-result fIexpectedValuefR
  471. The fB-resultfR attribute supplies the fIexpectedValuefR against which
  472. the return value from script will be compared. The default value is
  473. an empty string.
  474. .TP
  475. fB-output fIexpectedValuefR
  476. The fB-outputfR attribute supplies the fIexpectedValuefR against which
  477. any output sent to fBstdoutfR or [fBoutputChannelfR] during evaluation
  478. of the script(s) will be compared.  Note that only output printed using
  479. [fB::putsfR] is used for comparison.  If fB-outputfR is not specified,
  480. output sent to fBstdoutfR and [fBoutputChannelfR] is not processed for
  481. comparison.
  482. .TP
  483. fB-errorOutput fIexpectedValuefR
  484. The fB-errorOutputfR attribute supplies the fIexpectedValuefR against
  485. which any output sent to fBstderrfR or [fBerrorChannelfR] during 
  486. evaluation of the script(s) will be compared. Note that only output
  487. printed using [fB::putsfR] is used for comparison.  If fB-errorOutputfR
  488. is not specified, output sent to fBstderrfR and [fBerrorChannelfR] is
  489. not processed for comparison.
  490. .TP
  491. fB-returnCodes fIexpectedCodeListfR
  492. The optional fB-returnCodesfR attribute supplies fIexpectedCodeListfR,
  493. a list of return codes that may be accepted from evaluation of the
  494. fB-bodyfR script.  If evaluation of the fB-bodyfR script returns
  495. a code not in the fIexpectedCodeListfR, the test fails.  All
  496. return codes known to [fBreturnfR], in both numeric and symbolic
  497. form, including extended return codes, are acceptable elements in
  498. the fIexpectedCodeListfR.  Default value is fB{ok return}fR.
  499. .PP
  500. To pass, a test must successfully evaluate its fB-setupfR, fB-bodyfR,
  501. and fB-cleanupfR scripts.  The return code of the fB-bodyfR script and
  502. its result must match expected values, and if specified, output and error
  503. data from the test must match expected fB-outputfR and fB-errorOutputfR
  504. values.  If any of these conditions are not met, then the test fails.
  505. Note that all scripts are evaluated in the context of the caller
  506. of [fBtestfR].
  507. .PP
  508. As long as [fBtestfR] is called with valid syntax and legal
  509. values for all attributes, it will not raise an error.  Test
  510. failures are instead reported as output written to [fBoutputChannelfR].
  511. In default operation, a successful test produces no output.  The output
  512. messages produced by [fBtestfR] are controlled by the
  513. [fBconfigure -verbosefR] option as described in fBCONFIGURABLE OPTIONSfR
  514. below.  Any output produced by the test scripts themselves should be
  515. produced using [fB::putsfR] to [fBoutputChannelfR] or
  516. [fBerrorChannelfR], so that users of the test suite may
  517. easily capture output with the [fBconfigure -outfilefR] and
  518. [fBconfigure -errfilefR] options, and so that the fB-outputfR
  519. and fB-errorOutputfR attributes work properly.
  520. .SH "TEST CONSTRAINTS"
  521. .PP
  522. Constraints are used to determine whether or not a test should be skipped.
  523. Each constraint has a name, which may be any string, and a boolean
  524. value.  Each [fBtestfR] has a fB-constraintsfR value which is a
  525. list of constraint names.  There are two modes of constraint control.
  526. Most frequently, the default mode is used, indicated by a setting
  527. of [fBconfigure -limitconstraintsfR] to false.  The test will run
  528. only if all constraints in the list are true-valued.  Thus,
  529. the fB-constraintsfR option of [fBtestfR] is a convenient, symbolic
  530. way to define any conditions required for the test to be possible or
  531. meaningful.  For example, a [fBtestfR] with fB-constraints unixfR
  532. will only be run if the constraint fBunixfR is true, which indicates
  533. the test suite is being run on a Unix platform.
  534. .PP
  535. Each [fBtestfR] should include whatever fB-constraintsfR are
  536. required to constrain it to run only where appropriate.  Several
  537. constraints are pre-defined in the fBtcltestfR package, listed
  538. below.  The registration of user-defined constraints is performed
  539. by the [fBtestConstraintfR] command.  User-defined constraints
  540. may appear within a test file, or within the script specified
  541. by the [fBconfigure -loadfR] or [fBconfigure -loadfilefR]
  542. options.
  543. .PP
  544. The following is a list of constraints pre-defined by the
  545. fBtcltestfR package itself:
  546. .TP
  547. fIsingleTestInterpfR
  548. test can only be run if all test files are sourced into a single interpreter
  549. .TP
  550. fIunixfR
  551. test can only be run on any Unix platform
  552. .TP
  553. fIwinfR
  554. test can only be run on any Windows platform
  555. .TP
  556. fIntfR
  557. test can only be run on any Windows NT platform
  558. .TP
  559. fI95fR
  560. test can only be run on any Windows 95 platform
  561. .TP
  562. fI98fR
  563. test can only be run on any Windows 98 platform
  564. .TP
  565. fImacfR
  566. test can only be run on any Mac platform
  567. .TP
  568. fIunixOrWinfR
  569. test can only be run on a Unix or Windows platform
  570. .TP
  571. fImacOrWinfR
  572. test can only be run on a Mac or Windows platform
  573. .TP
  574. fImacOrUnixfR
  575. test can only be run on a Mac or Unix platform
  576. .TP
  577. fItempNotWinfR
  578. test can not be run on Windows.  This flag is used to temporarily
  579. disable a test. 
  580. .TP
  581. fItempNotMacfR
  582. test can not be run on a Mac.  This flag is used
  583. to temporarily disable a test.
  584. .TP
  585. fIunixCrashfR
  586. test crashes if it's run on Unix.  This flag is used to temporarily
  587. disable a test. 
  588. .TP
  589. fIwinCrashfR
  590. test crashes if it's run on Windows.  This flag is used to temporarily
  591. disable a test. 
  592. .TP
  593. fImacCrashfR
  594. test crashes if it's run on a Mac.  This flag is used to temporarily
  595. disable a test. 
  596. .TP
  597. fIemptyTestfR
  598. test is empty, and so not worth running, but it remains as a
  599. place-holder for a test to be written in the future.  This constraint
  600. has value false to cause tests to be skipped unless the user specifies
  601. otherwise.
  602. .TP
  603. fIknownBugfR
  604. test is known to fail and the bug is not yet fixed.  This constraint
  605. has value false to cause tests to be skipped unless the user specifies
  606. otherwise.
  607. .TP
  608. fInonPortablefR
  609. test can only be run in some known development environment.
  610. Some tests are inherently non-portable because they depend on things
  611. like word length, file system configuration, window manager, etc.
  612. This constraint has value false to cause tests to be skipped unless
  613. the user specifies otherwise.  
  614. .TP
  615. fIuserInteractionfR
  616. test requires interaction from the user.  This constraint has
  617. value false to causes tests to be skipped unless the user specifies
  618. otherwise.  
  619. .TP
  620. fIinteractivefR
  621. test can only be run in if the interpreter is in interactive mode 
  622. (when the global tcl_interactive variable is set to 1).
  623. .TP
  624. fInonBlockFilesfR
  625. test can only be run if platform supports setting files into
  626. nonblocking mode 
  627. .TP
  628. fIasyncPipeClosefR
  629. test can only be run if platform supports async flush and async close
  630. on a pipe 
  631. .TP
  632. fIunixExecsfR
  633. test can only be run if this machine has Unix-style commands
  634. fBcatfR, fBechofR, fBshfR, fBwcfR, fBrmfR, fBsleepfR,
  635. fBfgrepfR, fBpsfR, fBchmodfR, and fBmkdirfR available
  636. .TP
  637. fIhasIsoLocalefR
  638. test can only be run if can switch to an ISO locale
  639. .TP
  640. fIrootfR
  641. test can only run if Unix user is root
  642. .TP
  643. fInotRootfR
  644. test can only run if Unix user is not root
  645. .TP
  646. fIeformatfR
  647. test can only run if app has a working version of sprintf with respect
  648. to the "e" format of floating-point numbers.
  649. .TP
  650. fIstdiofR
  651. test can only be run if [fBinterpreterfR] can be [fBopenfR]ed
  652. as a pipe.
  653. .PP
  654. The alternative mode of constraint control is enabled by setting
  655. [fBconfigure -limitconstraintsfR] to true.  With that configuration
  656. setting, all existing constraints other than those in the constraint
  657. list returned by [fBconfigure -constraintsfR] are set to false.
  658. When the value of [fBconfigure -constraintsfR]
  659. is set, all those constraints are set to true.  The effect is that
  660. when both options [fBconfigure -constraintsfR] and
  661. [fBconfigure -limitconstraintsfR] are in use, only those tests including
  662. only constraints from the [fBconfigure -constraintsfR] list
  663. are run; all others are skipped.  For example, one might set
  664. up a configuration with
  665. .CS
  666. fBconfigurefR -constraints knownBug e
  667.           -limitconstraints true e
  668.           -verbose pass
  669. .CE
  670. to run exactly those tests that exercise known bugs, and discover
  671. whether any of them pass, indicating the bug had been fixed.  
  672. .SH "RUNNING ALL TESTS"
  673. .PP
  674. The single command [fBrunAllTestsfR] is evaluated to run an entire
  675. test suite, spanning many files and directories.  The configuration
  676. options of fBtcltestfR control the precise operations.  The
  677. [fBrunAllTestsfR] command begins by printing a summary of its
  678. configuration to [fBoutputChannelfR].
  679. .PP
  680. Test files to be evaluated are sought in the directory
  681. [fBconfigure -testdirfR].  The list of files in that directory
  682. that match any of the patterns in [fBconfigure -filefR] and
  683. match none of the patterns in [fBconfigure -notfilefR] is generated
  684. and sorted.  Then each file will be evaluated in turn.  If
  685. [fBconfigure -singleprocfR] is true, then each file will
  686. be [fBsourcefR]d in the caller's context.  If it is false,
  687. then a copy of [fBinterpreterfR] will be [fBexecfR]d to
  688. evaluate each file.  The multi-process operation is useful
  689. when testing can cause errors so severe that a process 
  690. terminates.  Although such an error may terminate a child
  691. process evaluating one file, the master process can continue
  692. with the rest of the test suite.  In multi-process operation,
  693. the configuration of fBtcltestfR in the master process is
  694. passed to the child processes as command line arguments,
  695. with the exception of [fBconfigure -outfilefR].  The
  696. [fBrunAllTestsfR] command in the
  697. master process collects all output from the child processes
  698. and collates their results into one master report.  Any
  699. reports of individual test failures, or messages requested
  700. by a [fBconfigure -verbosefR] setting are passed directly
  701. on to [fBoutputChannelfR] by the master process.
  702. .PP
  703. After evaluating all selected test files, a summary of the
  704. results is printed to [fBoutputChannelfR].  The summary
  705. includes the total number of [fBtestfR]s evaluated, broken
  706. down into those skipped, those passed, and those failed.
  707. The summary also notes the number of files evaluated, and the names
  708. of any files with failing tests or errors.  A list of
  709. the constraints that caused tests to be skipped, and the
  710. number of tests skipped for each is also printed.  Also,
  711. messages are printed if it appears that evaluation of
  712. a test file has caused any temporary files to be left
  713. behind in [fBconfigure -tmpdirfR].
  714. .PP
  715. Having completed and summarized all selected test files,
  716. [fBrunAllTestsfR] then recursively acts on subdirectories
  717. of [fBconfigure -testdirfR].  All subdirectories that
  718. match any of the patterns in [fBconfigure -relateddirfR]
  719. and do not match any of the patterns in
  720. [fBconfigure -asidefromdirfR] are examined.  If
  721. a file named fBall.tclfR is found in such a directory,
  722. it will be [fBsourcefR]d in the caller's context.
  723. Whether or not an examined directory contains an
  724. fBall.tclfR file, its subdirectories are also scanned
  725. against the [fBconfigure -relateddirfR] and
  726. [fBconfigure -asidefromdirfR] patterns.  In this way,
  727. many directories in a directory tree can have all their
  728. test files evaluated by a single [fBrunAllTestsfR]
  729. command.
  730. .SH "CONFIGURABLE OPTIONS"
  731. The [fBconfigurefR] command is used to set and query the configurable
  732. options of fBtcltestfR.  The valid options are:
  733. .TP
  734. fB-singleproc fIbooleanfR
  735. Controls whether or not [fBrunAllTestsfR] spawns a child process for
  736. each test file.  No spawning when fIbooleanfR is true.  Default
  737. value is false.
  738. .TP
  739. fB-debug fIlevelfR
  740. Sets the debug level to fIlevelfR, an integer value indicating how
  741. much debugging information should be printed to stdout.  Note that
  742. debug messages always go to stdout, independent of the value of
  743. [fBconfigure -outfilefR].  Default value is 0.  Levels are defined as:
  744. .RS
  745. .IP 0
  746. Do not display any debug information.
  747. .IP 1
  748. Display information regarding whether a test is skipped because it
  749. doesn't match any of the tests that were specified using by
  750. [fBconfigure -matchfR] (userSpecifiedNonMatch) or matches any of
  751. the tests specified by [fBconfigure -skipfR] (userSpecifiedSkip).  Also
  752. print warnings about possible lack of cleanup or balance in test files.
  753. Also print warnings about any re-use of test names.
  754. .IP 2
  755. Display the flag array parsed by the command line processor, the
  756. contents of the ::env array, and all user-defined variables that exist
  757. in the current namespace as they are used.
  758. .IP 3
  759. Display information regarding what individual procs in the test
  760. harness are doing.
  761. .RE
  762. .TP
  763. fB-verbose fIlevelfR
  764. Sets the type of output verbosity desired to fIlevelfR,
  765. a list of zero or more of the elements fBbodyfR, fBpassfR,
  766. fBskipfR, fBstartfR, and fBerrorfR.  Default value
  767. is fB{body error}fR.
  768. Levels are defined as: 
  769. .RS
  770. .IP "body (b)"
  771. Display the body of failed tests
  772. .IP "pass (p)"
  773. Print output when a test passes
  774. .IP "skip (s)"
  775. Print output when a test is skipped
  776. .IP "start (t)"
  777. Print output whenever a test starts
  778. .IP "error (e)"
  779. Print errorInfo and errorCode, if they exist, when a test return code
  780. does not match its expected return code
  781. .RE
  782. The single letter abbreviations noted above are also recognized
  783. so that [fBconfigure -verbose ptfR] is the same as
  784. [fBconfigure -verbose  {pass start}fR].
  785. .TP
  786. fB-preservecore fIlevelfR
  787. Sets the core preservation level to fIlevelfR.  This level
  788. determines how stringent checks for core files are.  Default
  789. value is 0.  Levels are defined as:
  790. .RS
  791. .IP 0
  792. No checking - do not check for core files at the end of each test
  793. command, but do check for them in [fBrunAllTestsfR] after all
  794. test files have been evaluated.
  795. .IP 1
  796. Also check for core files at the end of each [fBtestfR] command.
  797. .IP 2
  798. Check for core files at all times described above, and save a 
  799. copy of each core file produced in [fBconfigure -tmpdirfR].
  800. .RE
  801. .TP
  802. fB-limitconstraints fIbooleanfR
  803. Sets the mode by which [fBtestfR] honors constraints as described
  804. in fBTESTSfR above.  Default value is false.
  805. .TP
  806. fB-constraints fIlistfR
  807. Sets all the constraints in fIlistfR to true.  Also used in
  808. combination with [fBconfigure -limitconstraints truefR] to control an
  809. alternative constraint mode as described in fBTESTSfR above.
  810. Default value is an empty list.
  811. .TP
  812. fB-tmpdir fIdirectoryfR
  813. Sets the temporary directory to be used by [fBmakeFilefR],
  814. [fBmakeDirectoryfR], [fBviewFilefR], [fBremoveFilefR], 
  815. and [fBremoveDirectoryfR] as the default directory where
  816. temporary files and directories created by test files should
  817. be created.  Default value is [fBworkingDirectoryfR].
  818. .TP
  819. fB-testdir fIdirectoryfR
  820. Sets the directory searched by [fBrunAllTestsfR] for test files
  821. and subdirectories.  Default value is [fBworkingDirectoryfR].
  822. .TP
  823. fB-file fIpatternListfR
  824. Sets the list of patterns used by [fBrunAllTestsfR] to determine
  825. what test files to evaluate.  Default value is fB*.testfR.
  826. .TP
  827. fB-notfile fIpatternListfR
  828. Sets the list of patterns used by [fBrunAllTestsfR] to determine
  829. what test files to skip.  Default value is fBl.*.testfR, so
  830. that any SCCS lock files are skipped.
  831. .TP
  832. fB-relateddir fIpatternListfR
  833. Sets the list of patterns used by [fBrunAllTestsfR] to determine
  834. what subdirectories to search for an fBall.tclfR file.  Default
  835. value is fB*fR.
  836. .TP
  837. fB-asidefromdir fIpatternListfR
  838. Sets the list of patterns used by [fBrunAllTestsfR] to determine
  839. what subdirectories to skip when searching for an fBall.tclfR file.
  840. Default value is an empty list.
  841. .TP
  842. fB-match fIpatternListfR
  843. Set the list of patterns used by [fBtestfR] to determine whether
  844. a test should be run.  Default value is fB*fR.
  845. .TP
  846. fB-skip fIpatternListfR
  847. Set the list of patterns used by [fBtestfR] to determine whether
  848. a test should be skipped.  Default value is an empty list.
  849. .TP
  850. fB-load fIscriptfR
  851. Sets a script to be evaluated by [fBloadTestedCommandsfR].
  852. Default value is an empty script.
  853. .TP
  854. fB-loadfile fIfilenamefR
  855. Sets the filename from which to read a script to be evaluated
  856. by [fBloadTestedCommandsfR].  This is an alternative to
  857. fB-loadfR.  They cannot be used together.
  858. .TP
  859. fB-outfile fIfilenamefR 
  860. Sets the file to which all output produced by tcltest should be
  861. written.  A file named fIfilenamefR will be [fBopenfR]ed for writing,
  862. and the resulting channel will be set as the value of [fBoutputChannelfR].
  863. .TP
  864. fB-errfile fIfilenamefR
  865. Sets the file to which all error output produced by tcltest
  866. should be written.  A file named fIfilenamefR will be [fBopenfR]ed
  867. for writing, and the resulting channel will be set as the value
  868. of [fBerrorChannelfR].
  869. .SH "CREATING TEST SUITES WITH TCLTEST"
  870. .PP
  871. The fundamental element of a test suite is the individual [fBtestfR]
  872. command.  We begin with several examples.
  873. .IP [1]
  874. Test of a script that returns normally.
  875. .CS
  876. fBtestfR example-1.0 {normal return} {
  877.     format %s value
  878. } value
  879. .CE
  880. .IP [2]
  881. Test of a script that requires context setup and cleanup.  Note the
  882. bracing and indenting style that avoids any need for line continuation.
  883. .CS
  884. fBtestfR example-1.1 {test file existence} -setup {
  885.     set file [makeFile {} test]
  886. } -body {
  887.     file exists $file
  888. } -cleanup {
  889.     removeFile test
  890. } -result 1
  891. .CE
  892. .IP [3]
  893. Test of a script that raises an error.
  894. .CS
  895. fBtestfR example-1.2 {error return} -body {
  896.     error message
  897. } -returnCodes error -result message
  898. .CE
  899. .IP [4]
  900. Test with a constraint.
  901. .CS
  902. fBtestfR example-1.3 {user owns created files} -constraints {
  903.     unix
  904. } -setup {
  905.     set file [makeFile {} test]
  906. } -body {
  907.     file attributes $file -owner
  908. } -cleanup {
  909.     removeFile test
  910. } -result $::tcl_platform(user)
  911. .CE
  912. .PP
  913. At the next higher layer of organization, several [fBtestfR] commands
  914. are gathered together into a single test file.  Test files should have
  915. names with the fB.testfR extension, because that is the default pattern
  916. used by [fBrunAllTestsfR] to find test files.  It is a good rule of
  917. thumb to have one test file for each source code file of your project.
  918. It is good practice to edit the test file and the source code file
  919. together, keeping tests synchronized with code changes.
  920. .PP 
  921. Most of the code in the test file should be the [fBtestfR] commands.
  922. Use constraints to skip tests, rather than conditional evaluation
  923. of [fBtestfR].  That is, do this:
  924. .IP [5]
  925. .CS
  926. fBtestConstraintfR X [expr $myRequirement]
  927. fBtestfR goodConditionalTest {} X {
  928.     # body
  929. } result
  930. .CE
  931. and do not do this:
  932. .IP [6]
  933. .CS
  934. if $myRequirement {
  935.     test badConditionalTest {} {
  936. #body
  937.     } result
  938. }
  939. .CE
  940. .PP
  941. Use the fB-setupfR and fB-cleanupfR options to establish and release
  942. all context requirements of the test body.  Do not make tests depend on
  943. prior tests in the file.  Those prior tests might be skipped.  If several
  944. consecutive tests require the same context, the appropriate setup
  945. and cleanup scripts may be stored in variable for passing to each tests
  946. fB-setupfR and fB-cleanupfR options.  This is a better solution than
  947. performing setup outside of [fBtestfR] commands, because the setup will
  948. only be done if necessary, and any errors during setup will be reported,
  949. and not cause the test file to abort.
  950. .PP
  951. A test file should be able to be combined with other test files and not
  952. interfere with them, even when [fBconfigure -singleproc 1fR] causes
  953. all files to be evaluated in a common interpreter.  A simple way to
  954. achieve this is to have your tests define all their commands and variables
  955. in a namespace that is deleted when the test file evaluation is complete.
  956. A good namespace to use is a child namespace fBtestfR of the namespace
  957. of the module you are testing.
  958. .PP
  959. A test file should also be able to be evaluated directly as a script,
  960. not depending on being called by a master [fBrunAllTestsfR].  This
  961. means that each test file should process command line arguments to give
  962. the tester all the configuration control that fBtcltestfR provides.
  963. .PP
  964. After all [fBtestfR]s in a test file, the command [fBcleanupTestsfR]
  965. should be called.
  966. .IP [7]
  967. Here is a sketch of a sample test file illustrating those points:
  968. .CS
  969. package require tcltest 2.2
  970. eval fB::tcltest::configurefR $argv
  971. package require example
  972. namespace eval ::example::test {
  973.     namespace import ::tcltest::*
  974.     fBtestConstraintfR X [expr {...}]
  975.     variable SETUP {#common setup code}
  976.     variable CLEANUP {#common cleanup code}
  977.     fBtestfR example-1 {} -setup $SETUP -body {
  978. # First test
  979.     } -cleanup $CLEANUP -result {...}
  980.     fBtestfR example-2 {} -constraints X -setup $SETUP -body {
  981. # Second test; constrained
  982.     } -cleanup $CLEANUP -result {...}
  983.     fBtestfR example-3 {} {
  984. # Third test; no context required
  985.     } {...}
  986.     fBcleanupTestsfR
  987. }
  988. namespace delete ::example::test
  989. .CE
  990. .PP
  991. The next level of organization is a full test suite, made up of several
  992. test files.  One script is used to control the entire suite.  The
  993. basic function of this script is to call [fBrunAllTestsfR] after
  994. doing any necessary setup.  This script is usually named fBall.tclfR
  995. because that's the default name used by [fBrunAllTestsfR] when combining
  996. multiple test suites into one testing run.
  997. .IP [8]
  998. Here is a sketch of a sample test suite master script:
  999. .CS
  1000. package require Tcl 8.4
  1001. package require tcltest 2.2
  1002. package require example
  1003. fB::tcltest::configurefR -testdir 
  1004.         [file dirname [file normalize [info script]]]
  1005. eval fB::tcltest::configurefR $argv
  1006. fB::tcltest::runAllTestsfR
  1007. .CE
  1008. .SH COMPATIBILITY
  1009. .PP
  1010. A number of commands and variables in the fB::tcltestfR namespace
  1011. provided by earlier releases of fBtcltestfR have not been documented
  1012. here.  They are no longer part of the supported public interface of
  1013. fBtcltestfR and should not be used in new test suites.  However,
  1014. to continue to support existing test suites written to the older
  1015. interface specifications, many of those deprecated commands and
  1016. variables still work as before.  For example, in many circumstances,
  1017. [fBconfigurefR] will be automatically called shortly after
  1018. [fBpackage require tcltest 2.1fR] succeeds with arguments
  1019. from the variable fB::argvfR.  This is to support test suites
  1020. that depend on the old behavior that fBtcltestfR was automatically
  1021. configured from command line arguments.  New test files should not
  1022. depend on this, but should explicitly include
  1023. .CS
  1024. eval fB::tcltest::configurefR $::argv
  1025. .CE
  1026. to establish a configuration from command line arguments.
  1027. .SH "KNOWN ISSUES"
  1028. There are two known issues related to nested evaluations of [fBtestfR].  
  1029. The first issue relates to the stack level in which test scripts are
  1030. executed.  Tests nested within other tests may be executed at the same
  1031. stack level as the outermost test.  For example, in the following code: 
  1032. .CS
  1033. fBtestfR level-1.1 {level 1} {
  1034.     -body {
  1035.         fBtestfR level-2.1 {level 2} {
  1036.         }
  1037.     }
  1038. }
  1039. .CE
  1040. any script executed in level-2.1 may be executed at the same stack
  1041. level as the script defined for level-1.1.  
  1042. .PP
  1043. In addition, while two [fBtestfR]s have been run, results will only
  1044. be reported by [fBcleanupTestsfR] for tests at the same level as
  1045. test level-1.1.  However, test results for all tests run prior to
  1046. level-1.1 will be available when test level-2.1 runs.  What this
  1047. means is that if you try to access the test results for test level-2.1,
  1048. it will may say that 'm' tests have run, 'n' tests have
  1049. been skipped, 'o' tests have passed and 'p' tests have failed,
  1050. where 'm', 'n', 'o', and 'p' refer to tests that were run at the
  1051. same test level as test level-1.1. 
  1052. .PP
  1053. Implementation of output and error comparison in the test command
  1054. depends on usage of ::puts in your application code.  Output is
  1055. intercepted by redefining the ::puts command while the defined test
  1056. script is being run.  Errors thrown by C procedures or printed
  1057. directly from C applications will not be caught by the test command.
  1058. Therefore, usage of the fB-outputfR and fB-errorOutputfR
  1059. options to [fBtestfR] is useful only for pure Tcl applications
  1060. that use [fB::putsfR] to produce output. 
  1061. .SH KEYWORDS
  1062. test, test harness, test suite