summaryrefslogtreecommitdiffstats
path: root/tests/msgcat.test
diff options
context:
space:
mode:
Diffstat (limited to 'tests/msgcat.test')
-rw-r--r--tests/msgcat.test95
1 files changed, 80 insertions, 15 deletions
diff --git a/tests/msgcat.test b/tests/msgcat.test
index 2f37408..050b592 100644
--- a/tests/msgcat.test
+++ b/tests/msgcat.test
@@ -11,16 +11,14 @@
#
# Note that after running these tests, entries will be left behind in the
# message catalogs for locales foo, foo_BAR, and foo_BAR_baz.
-#
-# RCS: @(#) $Id: msgcat.test,v 1.14 2003/10/21 05:10:17 dgp Exp $
-package require Tcl 8.2
+package require Tcl 8.5
if {[catch {package require tcltest 2}]} {
puts stderr "Skipping tests in [info script]. tcltest 2 required."
return
}
-if {[catch {package require msgcat 1.4}]} {
- puts stderr "Skipping tests in [info script]. No msgcat 1.4 found to test."
+if {[catch {package require msgcat 1.5}]} {
+ puts stderr "Skipping tests in [info script]. No msgcat 1.5 found to test."
return
}
@@ -54,15 +52,27 @@ namespace eval ::msgcat::test {
foreach setVars [PowerSet $envVars] {
set result [string tolower [lindex $setVars 0]]
if {[string length $result] == 0} {
- set result c
+ if {[info exists ::tcl::mac::locale]} {
+ set result [string tolower \
+ [msgcat::ConvertLocale $::tcl::mac::locale]]
+ } else {
+ if {([info sharedlibextension] eq ".dll")
+ && ![catch {package require registry}]} {
+ # Windows and Cygwin have other ways to determine the
+ # locale when the environment variables are missing
+ # and the registry package is present
+ continue
+ }
+ set result c
+ }
}
- test msgcat-0.$count {
- locale initialization from environment variables
- } -setup {
+ test msgcat-0.$count [list \
+ locale initialization from environment variables $setVars \
+ ] -setup {
variable var
foreach var $envVars {
catch {variable $var $::env($var)}
- catch {unset ::env($var)}
+ unset -nocomplain ::env($var)
}
foreach var $setVars {
set ::env($var) $var
@@ -74,13 +84,13 @@ namespace eval ::msgcat::test {
} -cleanup {
interp delete [namespace current]::i
foreach var $envVars {
- catch {unset ::env($var)}
+ unset -nocomplain ::env($var)
catch {set ::env($var) [set [namespace current]::$var]}
}
} -body {i eval msgcat::mclocale} -result $result
incr count
}
- catch {unset result}
+ unset -nocomplain result
# Could add tests of initialization from Windows registry here.
# Use a fake registry package.
@@ -165,6 +175,22 @@ namespace eval ::msgcat::test {
mcpreferences
} -result {en_us_funky en_us en {}}
+ test msgcat-1.12 {mclocale set, reject evil input} -setup {
+ variable locale [mclocale]
+ } -cleanup {
+ mclocale $locale
+ } -body {
+ mclocale /path/to/evil/code
+ } -returnCodes error -match glob -result {invalid newLocale value *}
+
+ test msgcat-1.13 {mclocale set, reject evil input} -setup {
+ variable locale [mclocale]
+ } -cleanup {
+ mclocale $locale
+ } -body {
+ mclocale looks/ok/../../../../but/is/path/to/evil/code
+ } -returnCodes error -match glob -result {invalid newLocale value *}
+
# Tests msgcat-2.*: [mcset], [mcmset], namespace partitioning
test msgcat-2.1 {mcset, global scope} {
@@ -298,7 +324,7 @@ namespace eval ::msgcat::test {
incr count
}
}
- catch {unset result}
+ unset -nocomplain result
# Tests msgcat-4.*: [mcunknown]
@@ -380,7 +406,7 @@ namespace eval ::msgcat::test {
} else {
set msg [string tolower $loc]
}
- makeFile [list ::msgcat::mcset $loc abc abc-$loc] $msg.msg msgdir
+ makeFile [list ::msgcat::mcset $loc abc abc-$loc] $msg.msg $msgdir
}
variable count 1
foreach loc {foo foo_BAR foo_BAR_baz} {
@@ -477,7 +503,7 @@ namespace eval ::msgcat::test {
} else {
set msg [string tolower $loc]
}
- removeFile $msg.msg msgdir
+ removeFile $msg.msg $msgdir
}
removeDirectory msgdir
@@ -592,6 +618,45 @@ namespace eval ::msgcat::test {
mc "this is a %s" "good test"
} -result "this is a good test"
+ # Tests msgcat-8.*: [mcflset]
+
+ set msgdir1 [makeDirectory msgdir1]
+ makeFile {::msgcat::mcflset k1 v1} l1.msg $msgdir1
+
+ test msgcat-8.1 {mcflset} -setup {
+ variable locale [mclocale]
+ mclocale l1
+ mcload $msgdir1
+ } -cleanup {
+ mclocale $locale
+ } -body {
+ mc k1
+ } -result v1
+
+ removeFile l1.msg $msgdir1
+ removeDirectory msgdir1
+
+ set msgdir2 [makeDirectory msgdir2]
+ set msgdir3 [makeDirectory msgdir3]
+ makeFile "::msgcat::mcflset k2 v2 ; ::msgcat::mcload [list $msgdir3]"\
+ l2.msg $msgdir2
+ makeFile {::msgcat::mcflset k3 v3} l2.msg $msgdir3
+
+ # chained mcload
+ test msgcat-8.2 {mcflset} -setup {
+ variable locale [mclocale]
+ mclocale l2
+ mcload $msgdir2
+ } -cleanup {
+ mclocale $locale
+ } -body {
+ return [mc k2][mc k3]
+ } -result v2v3
+
+ removeFile l2.msg $msgdir2
+ removeDirectory msgdir2
+ removeDirectory msgdir3
+
cleanupTests
}
namespace delete ::msgcat::test