]>
git.saurik.com Git - redis.git/blob - tests/support/test.tcl
   6 proc assert 
{condition
} { 
   7     if {![uplevel 1 expr $condition]} { 
   8         error "assertion:Expected '$value' to be true" 
  12 proc assert_match 
{pattern value
} { 
  13     if {![string match 
$pattern $value]} { 
  14         error "assertion:Expected '$value' to match '$pattern'" 
  18 proc assert_equal 
{expected value
} { 
  19     if {$expected ne 
$value} { 
  20         error "assertion:Expected '$value' to be equal to '$expected'" 
  24 proc assert_error 
{pattern code
} { 
  25     if {[catch {uplevel 1 $code} error]} { 
  26         assert_match 
$pattern $error 
  28         error "assertion:Expected an error but nothing was catched" 
  32 proc assert_encoding 
{enc key
} { 
  33     # Swapped out values don't have an encoding, so make sure that 
  34     # the value is swapped in before checking the encoding. 
  35     set dbg 
[r debug object 
$key] 
  36     while {[string match 
"* swapped at:*" $dbg]} { 
  38         set dbg 
[r debug object 
$key] 
  40     assert_match 
"* encoding:$enc *" $dbg 
  43 proc assert_type 
{type key
} { 
  44     assert_equal 
$type [r type 
$key] 
  47 # Test if TERM looks like to support colors 
  49     expr {[info exists 
::env(TERM
)] && [string match 
*xterm
* $::env(TERM
)]} 
  52 # This is called before starting the test 
  53 proc announce_test 
{s
} { 
  55         puts -nonewline "$s\033\[0K" 
  57         set ::backward_count [string length 
$s] 
  61 # This is called after the test finished 
  62 proc colored_dot 
{tags passed
} { 
  64         # Go backward and delete what announc_test function printed. 
  65         puts -nonewline "\033\[${::backward_count}D\033\[0K\033\[J" 
  67         # Print a coloured char, accordingly to test outcome and tags. 
  68         if {[lsearch $tags list] != -1} { 
  71         } elseif 
{[lsearch $tags hash
] != -1} { 
  74         } elseif 
{[lsearch $tags set] != -1} { 
  77         } elseif 
{[lsearch $tags zset
] != -1} { 
  80         } elseif 
{[lsearch $tags basic
] != -1} { 
  87         if {$colorcode ne 
{}} { 
  89                 puts -nonewline "\033\[0;${colorcode};40m" 
  91                 puts -nonewline "\033\[7;${colorcode};40m" 
  94             puts -nonewline "\033\[0m" 
 106 proc test 
{name code 
{okpattern undefined
}} { 
 107     # abort if tagged with a tag to deny 
 108     foreach tag 
$::denytags { 
 109         if {[lsearch $::tags $tag] >= 0} { 
 114     # check if tagged with at least 1 tag to allow when there *is* a list 
 115     # of tags to allow, because default policy is to run everything 
 116     if {[llength $::allowtags] > 0} { 
 118         foreach tag 
$::allowtags { 
 119             if {[lsearch $::tags $tag] >= 0} { 
 130     lappend details 
$::curfile 
 131     lappend details 
$::tags 
 132     lappend details 
$name 
 135         puts -nonewline [format "#%03d %-68s " $::num_tests $name] 
 141     if {[catch {set retval 
[uplevel 1 $code]} error]} { 
 142         if {[string match 
"assertion:*" $error]} { 
 143             set msg 
[string range 
$error 10 end
] 
 145             lappend ::tests_failed $details 
 152                 colored_dot 
$::tags 0 
 155             # Re-raise, let handler up the stack take care of this. 
 156             error $error $::errorInfo 
 159         if {$okpattern eq 
"undefined" || 
$okpattern eq 
$retval || 
[string match 
$okpattern $retval]} { 
 164                 colored_dot 
$::tags 1 
 167             set msg 
"Expected '$okpattern' to equal or match '$retval'" 
 169             lappend ::tests_failed $details 
 176                 colored_dot 
$::tags 0 
 183         set output 
[exec leaks redis-server
] 
 184         if {![string match 
{*0 leaks
*} $output]} { 
 185             puts "--- Test \"$name\" leaked! ---"