summaryrefslogtreecommitdiffstats
path: root/tcllib/modules/log/log.test
diff options
context:
space:
mode:
Diffstat (limited to 'tcllib/modules/log/log.test')
-rw-r--r--tcllib/modules/log/log.test393
1 files changed, 393 insertions, 0 deletions
diff --git a/tcllib/modules/log/log.test b/tcllib/modules/log/log.test
new file mode 100644
index 0000000..25eb4d3
--- /dev/null
+++ b/tcllib/modules/log/log.test
@@ -0,0 +1,393 @@
+# -*- tcl -*-
+# Tests for the log facility
+#
+# Sourcing this file into Tcl runs the tests and generates output for errors.
+# No output means no errors were found.
+#
+# Copyright (c) 2001 by ActiveState Tool Corp.
+# All rights reserved.
+#
+# RCS: @(#) $Id: log.test,v 1.10 2008/09/25 21:52:57 eee Exp $
+
+# -------------------------------------------------------------------------
+
+source [file join \
+ [file dirname [file dirname [file join [pwd] [info script]]]] \
+ devtools testutilities.tcl]
+
+testsNeedTcl 8.2
+testsNeedTcltest 1.0
+
+testing {
+ useLocal log.tcl log
+}
+
+# -------------------------------------------------------------------------
+
+test log-1.0 {levels} {
+ ::log::levels
+} {alert critical debug emergency error info notice warning}
+
+foreach {abbrev long} {
+ a alert d debug
+ al alert de debug
+ ale alert deb debug
+ aler alert debu debug
+ alert alert debug debug
+ c critical em emergency
+ cr critical eme emergency
+ cri critical emer emergency
+ crit critical emerg emergency
+ criti critical emerge emergency
+ critic critical emergen emergency
+ critica critical emergenc emergency
+ critical critical emergency emergency
+ er error i info
+ err error in info
+ erro error inf info
+ error error info info
+ n notice w warning
+ no notice wa warning
+ not notice war warning
+ noti notice warn warning
+ notic notice warni warning
+ notice notice warnin warning
+ warning warning
+} {
+ test log-2.0.$abbrev {level abbreviations} {
+ ::log::lv2longform $abbrev
+ } $long
+}
+
+test log-2.1 {abbreviation error} {
+ if {![catch {::log::lv2longform e} msg]} {
+ error "e is an unique abbreviation of a level name"
+ }
+ set msg
+} {bad level "e": must be alert, critical, debug, emergency, error, info, notice, or warning.}
+
+foreach {level color} {
+ emergency red warning yellow
+ alert red notice seagreen
+ critical red info {}
+ error red debug lightsteelblue
+} {
+ test log-3.0.$level {color conversion} {
+ ::log::lv2color $level
+ } $color
+}
+
+test log-3.1 {color conversion error} {
+ if {![catch {::log::lv2color foo} msg]} {
+ error "foo is an unique abbreviation of a level name"
+ }
+ set msg
+} {bad level "foo": must be alert, critical, debug, emergency, error, info, notice, or warning.}
+
+foreach {level priority} {
+ emergency 7 warning 3
+ alert 6 notice 2
+ critical 5 info 1
+ error 4 debug 0
+} {
+ test log-4.0.$level {priority conversion} {
+ ::log::lv2priority $level
+ } $priority
+}
+
+test log-4.1 {priority conversion error} {
+ if {![catch {::log::lv2priority foo} msg]} {
+ error "foo is an unique abbreviation of a level name"
+ }
+ set msg
+} {bad level "foo": must be alert, critical, debug, emergency, error, info, notice, or warning.}
+
+foreach level {alert critical debug error emergency info notice warning} {
+ test log-5.0.$level {cmd retrieval} {
+ ::log::lv2cmd $level
+ } ::log::Puts
+}
+
+test log-5.1 {cmd error} {
+ if {![catch {::log::lv2cmd foo} msg]} {
+ error "foo is an unique abbreviation of a level name"
+ }
+ set msg
+} {bad level "foo": must be alert, critical, debug, emergency, error, info, notice, or warning.}
+
+foreach {level chan} {
+ emergency stderr warning stdout
+ alert stderr notice stdout
+ critical stderr info stdout
+ error stderr debug stdout
+} {
+ test log-6.0.$level {channel retrieval} {
+ ::log::lv2channel $level
+ } $chan
+}
+
+test log-6.1 {channel error} {
+ if {![catch {::log::lv2channel foo} msg]} {
+ error "foo is an unique abbreviation of a level name"
+ }
+ set msg
+} {bad level "foo": must be alert, critical, debug, emergency, error, info, notice, or warning.}
+
+foreach level {alert critical error emergency} {
+ test log-7.0.$level {query suppression state} {
+ ::log::lvIsSuppressed $level
+ } 0
+}
+foreach level {debug info notice warning} {
+ test log-7.0.$level {query suppression state} {
+ ::log::lvIsSuppressed $level
+ } 1
+}
+
+test log-7.1 {error when querying suppression state} {
+ if {![catch {::log::lv2cmd foo} msg]} {
+ error "foo is an unique abbreviation of a level name"
+ }
+ set msg
+} {bad level "foo": must be alert, critical, debug, emergency, error, info, notice, or warning.}
+
+
+foreach {la lb res} {
+ emergency emergency 0 alert emergency -1 critical emergency -1 error emergency -1
+ emergency alert 1 alert alert 0 critical alert -1 error alert -1
+ emergency critical 1 alert critical 1 critical critical 0 error critical -1
+ emergency error 1 alert error 1 critical error 1 error error 0
+ emergency warning 1 alert warning 1 critical warning 1 error warning 1
+ emergency notice 1 alert notice 1 critical notice 1 error notice 1
+ emergency info 1 alert info 1 critical info 1 error info 1
+ emergency debug 1 alert debug 1 critical debug 1 error debug 1
+
+ warning emergency -1 notice emergency -1 info emergency -1 debug emergency -1
+ warning alert -1 notice alert -1 info alert -1 debug alert -1
+ warning critical -1 notice critical -1 info critical -1 debug critical -1
+ warning error -1 notice error -1 info error -1 debug error -1
+ warning warning 0 notice warning -1 info warning -1 debug warning -1
+ warning notice 1 notice notice 0 info notice -1 debug notice -1
+ warning info 1 notice info 1 info info 0 debug info -1
+ warning debug 1 notice debug 1 info debug 1 debug debug 0
+} {
+ test log-8.0.$la.$lb {level priority comparisons} {
+ list [::log::lvCompare $la $lb] $la $lb
+ } [list $res $la $lb]
+}
+
+test log-8.1 {comparison errors} {
+ if {![catch {::log::lvCompare foo error} msg]} {
+ error "foo is an unique abbreviation of a level name"
+ }
+ set msg
+} {bad level "foo": must be alert, critical, debug, emergency, error, info, notice, or warning.}
+
+test log-8.2 {comparison errors} {
+ if {![catch {::log::lvCompare error foo} msg]} {
+ error "foo is an unique abbreviation of a level name"
+ }
+ set msg
+} {bad level "foo": must be alert, critical, debug, emergency, error, info, notice, or warning.}
+
+
+foreach level {alert critical debug error emergency info notice warning} {
+ test log-9.0.$level {redefining colors} {
+ set old [::log::lv2color $level]
+ ::log::lvColor $level foo
+ set new [::log::lv2color $level]
+ ::log::lvColor $level $old
+ set new
+ } foo
+}
+
+test log-9.1 {redefining colors} {
+ ::log::lvColorForall fox
+ set res [list]
+ foreach level [::log::levels] {
+ lappend res [::log::lv2color $level]
+ }
+ set res
+} {fox fox fox fox fox fox fox fox}
+
+foreach level {alert critical debug error emergency info notice warning} {
+ test log-10.0.$level {redefining channels} {
+ set old [::log::lv2channel $level]
+ ::log::lvChannel $level foo
+ set new [::log::lv2channel $level]
+ ::log::lvChannel $level $old
+ set new
+ } foo
+}
+
+test log-10.1 {redefining channels} {
+ ::log::lvChannelForall fox
+ set res [list]
+ foreach level [::log::levels] {
+ lappend res [::log::lv2channel $level]
+ }
+ set res
+} {fox fox fox fox fox fox fox fox}
+
+foreach level {alert critical debug error emergency info notice warning} {
+ test log-11.0.$level {redefining cmds} {
+ set old [::log::lv2cmd $level]
+ ::log::lvCmd $level foo
+ set new [::log::lv2cmd $level]
+ ::log::lvCmd $level $old
+ set new
+ } foo
+}
+
+test log-11.1 {redefining cmds} {
+ ::log::lvCmdForall logMem
+ set res [list]
+ foreach level [::log::levels] {
+ lappend res [::log::lv2cmd $level]
+ }
+ set res
+} {logMem logMem logMem logMem logMem logMem logMem logMem}
+
+foreach level {alert critical debug error emergency info notice warning} {
+ test log-12.0.$level {change suppression state} {
+ set old [::log::lvIsSuppressed $level]
+ ::log::lvSuppress $level
+ set new [::log::lvIsSuppressed $level]
+ ::log::lvSuppress $level 0
+ lappend new [::log::lvIsSuppressed $level]
+ set new
+ } {1 0}
+}
+
+test log-12.1 {suppressor errors} {
+ if {![catch {::log::lvSuppress error foo} msg]} {
+ error "foo should be no boolean value"
+ }
+ set msg
+} {"foo" is not a member of {0, 1}}
+
+test log-12.2 {suppressor errors} {
+ if {![catch {::log::lvSuppressLE error foo} msg]} {
+ error "foo should be no boolean value"
+ }
+ set msg
+} {"foo" is not a member of {0, 1}}
+
+foreach {level range} {
+ emergency {1 1 1 1 1 1 1 1}
+ alert {1 1 1 0 1 1 1 1}
+ critical {0 1 1 0 1 1 1 1}
+ error {0 0 1 0 1 1 1 1}
+ warning {0 0 1 0 0 1 1 1}
+ notice {0 0 1 0 0 1 1 0}
+ info {0 0 1 0 0 1 0 0}
+ debug {0 0 1 0 0 0 0 0}
+} {
+ test log-12.3.$level {change suppression state, ranges} {
+ ::log::lvSuppressLE emergency 0 ; # initial full unsuppressed state
+ ::log::lvSuppressLE $level
+ set res [list]
+ foreach l [::log::levels] {
+ lappend res [::log::lvIsSuppressed $l]
+ }
+ set res
+ } $range
+}
+
+foreach {level range} {
+ debug {1 1 0 1 1 1 1 1}
+ info {1 1 0 1 1 0 1 1}
+ notice {1 1 0 1 1 0 0 1}
+ warning {1 1 0 1 1 0 0 0}
+ error {1 1 0 1 0 0 0 0}
+ critical {1 0 0 1 0 0 0 0}
+ alert {0 0 0 1 0 0 0 0}
+ emergency {0 0 0 0 0 0 0 0}
+} {
+ test log-12.4.$level {change suppression state, ranges} {
+ ::log::lvSuppressLE emergency ; # initial full supressed state
+ ::log::lvSuppressLE $level 0
+ set res [list]
+ foreach l [::log::levels] {
+ lappend res [::log::lvIsSuppressed $l]
+ }
+ set res
+ } $range
+}
+
+
+
+# Define our own logger command adding all messages to a global list
+# variable.
+
+global _log_
+set _log_ [list]
+proc logMem {level text} {
+ global _log_
+ lappend _log_ $level $text
+}
+
+# Setup some levels with different properties:
+# - Suppressed
+# - No command
+
+::log::lvCmdForall logMem
+::log::lvCmd alert {}
+::log::lvSuppress critical
+
+test log-13.0 {logging} {
+ set _log_ [list]
+ ::log::log emergency fofafraz
+ ::log::log alert fofafraz1
+ ::log::log critical fofafraz2
+ ::log::log error fofafraz3
+ ::log::log warning fofafraz4
+ set _log_
+} {emergency fofafraz error fofafraz3 warning fofafraz4}
+
+test log-13.1 {logging} {
+ set _log_ [list]
+ ::log::logMsg fobar
+ set _log_
+} {info fobar}
+
+test log-13.2 {logging} {
+ set _log_ [list]
+ ::log::logError buz
+ set _log_
+} {error buz}
+
+test log-13.3 {log error} {
+ if {![catch {::log::log e foobar} msg]} {
+ error "e is an unique abbreviation of a level name"
+ }
+ set msg
+} {bad level "e": must be alert, critical, debug, emergency, error, info, notice, or warning.}
+
+
+set lastlevel warning
+foreach level {alert critical debug error emergency info notice warning} {
+ test log-14.0.$level {log::Puts} {
+ makeFile {} test.log
+ ::log::lvCmdForall ::log::Puts
+ ::log::lvSuppressLE emergency 0
+
+ set old [::log::lv2channel $level]
+ ::log::lvChannelForall {}
+ ::log::lvChannel $level [open test.log w]
+
+ ::log::log $level __data__
+ ::log::log $lastlevel __NOT__
+
+ close [::log::lv2channel $level]
+ set lastlevel $level
+
+ set log [join [split [viewFile test.log] \n]]
+ removeFile test.log
+ list [string match *__data__* $log] [string match *__NOT__* $log]
+ } {1 0}
+}
+::log::lvChannelForall {}
+
+testsuiteCleanup
+return