summaryrefslogtreecommitdiffstats
path: root/tests/msgcat.test
diff options
context:
space:
mode:
authorstanton <stanton>1999-04-16 00:46:29 (GMT)
committerstanton <stanton>1999-04-16 00:46:29 (GMT)
commit97464e6cba8eb0008cf2727c15718671992b913f (patch)
treece9959f2747257d98d52ec8d18bf3b0de99b9535 /tests/msgcat.test
parenta8c96ddb94d1483a9de5e340b740cb74ef6cafa7 (diff)
downloadtcl-97464e6cba8eb0008cf2727c15718671992b913f.zip
tcl-97464e6cba8eb0008cf2727c15718671992b913f.tar.gz
tcl-97464e6cba8eb0008cf2727c15718671992b913f.tar.bz2
merged tcl 8.1 branch back into the main trunk
Diffstat (limited to 'tests/msgcat.test')
-rw-r--r--tests/msgcat.test318
1 files changed, 318 insertions, 0 deletions
diff --git a/tests/msgcat.test b/tests/msgcat.test
new file mode 100644
index 0000000..b9410e2
--- /dev/null
+++ b/tests/msgcat.test
@@ -0,0 +1,318 @@
+# Commands covered: ::msgcat::mc ::msgcat::mclocale
+# ::msgcat::mcpreferences ::msgcat::mcload
+# ::msgcat::mcset ::msgcat::mcunknown
+#
+# This file contains a collection of tests for the msgcat script library.
+# Sourcing this file into Tcl runs the tests and
+# generates output for errors. No output means no errors were found.
+#
+# Copyright (c) 1998 Mark Harrison.
+# Copyright (c) 1998-1999 by Scriptics Corporation.
+#
+# See the file "license.terms" for information on usage and redistribution
+# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+#
+# RCS: @(#) $Id: msgcat.test,v 1.2 1999/04/16 00:47:31 stanton Exp $
+
+if {[lsearch [namespace children] ::tcltest] == -1} {
+ source [file join [pwd] [file dirname [info script]] defs.tcl]
+}
+
+if {[catch {package require msgcat 1.0}]} {
+ if {[info exist msgcat1]} {
+ catch {puts "Cannot load msgcat 1.0 package"}
+ return
+ } else {
+ catch {puts "Running msgcat 1.0 tests in slave interp"}
+ set interp [interp create msgcat1]
+ $interp eval [list set msgcat1 "running"]
+ $interp eval [list source [info script]]
+ interp delete $interp
+ return
+ }
+}
+
+set oldlocale [::msgcat::mclocale]
+
+#
+# Test the various permutations of mclocale
+# and mcpreferences.
+#
+
+test msgcat-1.1 {::msgcat::mclocale default} {
+ ::msgcat::mclocale
+} {c}
+test msgcat-1.2 {::msgcat::mcpreferences, single element} {
+ ::msgcat::mcpreferences
+} {c}
+test msgcat-1.3 {::msgcat::mclocale, single element} {
+ ::msgcat::mclocale en
+} {en}
+test msgcat-1.4 {::msgcat::mclocale, single element} {
+ ::msgcat::mclocale
+} {en}
+test msgcat-1.5 {::msgcat::mcpreferences, single element} {
+ ::msgcat::mcpreferences
+} {en}
+test msgcat-1.6 {::msgcat::mclocale, two elements} {
+ ::msgcat::mclocale en_US
+} {en_us}
+test msgcat-1.7 {::msgcat::mclocale, two elements} {
+ ::msgcat::mclocale en_US
+ ::msgcat::mclocale
+} {en_us}
+test msgcat-1.8 {::msgcat::mcpreferences, two elements} {
+ ::msgcat::mcpreferences
+} {en_us en}
+test msgcat-1.9 {::msgcat::mclocale, three elements} {
+ ::msgcat::mclocale en_US_funky
+} {en_us_funky}
+test msgcat-1.10 {::msgcat::mclocale, three elements} {
+ ::msgcat::mclocale
+} {en_us_funky}
+test msgcat-1.11 {::msgcat::mcpreferences, three elements} {
+ ::msgcat::mcpreferences
+} {en_us_funky en_us en}
+
+#
+# Test mcset and mcc, ensuring that namespace partitioning
+# is working.
+#
+
+test msgcat-2.1 {::msgcat::mcset, global scope} {
+ ::msgcat::mcset foo_BAR text1 text2
+} {text2}
+test msgcat-2.2 {::msgcat::mcset, global scope, default} {
+ ::msgcat::mcset foo_BAR text3
+} {text3}
+test msgcat-2.2 {::msgcat::mcset, namespace overlap} {
+ namespace eval bar {::msgcat::mcset foo_BAR con1 con1bar}
+ namespace eval baz {::msgcat::mcset foo_BAR con1 con1baz}
+} {con1baz}
+test msgcat-2.3 {::msgcat::mcset, namespace overlap} {
+ ::msgcat::mclocale foo_BAR
+ namespace eval bar {::msgcat::mc con1}
+} {con1bar}
+test msgcat-2.4 {::msgcat::mcset, namespace overlap} {
+ ::msgcat::mclocale foo_BAR
+ namespace eval baz {::msgcat::mc con1}
+} {con1baz}
+
+#
+# Test mcset and mc, ensuring that more specific locales
+# (e.g. "en_UK") will search less specific locales
+# (e.g. "en") for translation strings.
+#
+# Do this for the 12 permutations of
+# locales: {foo foo_BAR foo_BAR_baz}
+# strings: {ov1 ov2 ov3 ov4}
+# locale foo defines ov1, ov2, ov3
+# locale foo_BAR defines ov2, ov3
+# locale foo_BAR_BAZ defines ov3
+# (ov4 is defined in none)
+# So,
+# ov3 should be resolved in foo, foo_BAR, foo_BAR_baz
+# ov2 should be resolved in foo, foo_BAR
+# ov2 should resolve to foo_BAR in foo_BAR_baz
+# ov1 should be resolved in foo
+# ov1 should resolve to foo in foo_BAR, foo_BAR_baz
+# ov4 should be resolved in none, and call mcunknown
+#
+
+test msgcat-3.1 {::msgcat::mcset, overlap} {
+ ::msgcat::mcset foo ov1 ov1_foo
+ ::msgcat::mcset foo ov2 ov2_foo
+ ::msgcat::mcset foo ov3 ov3_foo
+ ::msgcat::mcset foo_BAR ov2 ov2_foo_BAR
+ ::msgcat::mcset foo_BAR ov3 ov3_foo_BAR
+ ::msgcat::mcset foo_BAR_baz ov3 ov3_foo_BAR_baz
+} {ov3_foo_BAR_baz}
+# top level, locale foo
+test msgcat-3.2 {::msgcat::mcset, overlap} {
+ ::msgcat::mclocale foo
+ ::msgcat::mc ov1
+} {ov1_foo}
+test msgcat-3.3 {::msgcat::mcset, overlap} {
+ ::msgcat::mclocale foo
+ ::msgcat::mc ov2
+} {ov2_foo}
+test msgcat-3.4 {::msgcat::mcset, overlap} {
+ ::msgcat::mclocale foo
+ ::msgcat::mc ov3
+} {ov3_foo}
+test msgcat-3.5 {::msgcat::mcset, overlap} {
+ ::msgcat::mclocale foo
+ ::msgcat::mc ov4
+} {ov4}
+# second level, locale foo_BAR
+test msgcat-3.6 {::msgcat::mcset, overlap} {
+ ::msgcat::mclocale foo_BAR
+ ::msgcat::mc ov1
+} {ov1_foo}
+test msgcat-3.7 {::msgcat::mcset, overlap} {
+ ::msgcat::mclocale foo_BAR
+ ::msgcat::mc ov2
+} {ov2_foo_BAR}
+test msgcat-3.8 {::msgcat::mcset, overlap} {
+ ::msgcat::mclocale foo_BAR
+ ::msgcat::mc ov3
+} {ov3_foo_BAR}
+test msgcat-3.9 {::msgcat::mcset, overlap} {
+ ::msgcat::mclocale foo_BAR
+ ::msgcat::mc ov4
+} {ov4}
+# third level, locale foo_BAR_baz
+test msgcat-3.10 {::msgcat::mcset, overlap} {
+ ::msgcat::mclocale foo_BAR_baz
+ ::msgcat::mc ov1
+} {ov1_foo}
+test msgcat-3.11 {::msgcat::mcset, overlap} {
+ ::msgcat::mclocale foo_BAR_baz
+ ::msgcat::mc ov2
+} {ov2_foo_BAR}
+test msgcat-3.12 {::msgcat::mcset, overlap} {
+ ::msgcat::mclocale foo_BAR_baz
+ ::msgcat::mc ov3
+} {ov3_foo_BAR_baz}
+test msgcat-3.13 {::msgcat::mcset, overlap} {
+ ::msgcat::mclocale foo_BAR_baz
+ ::msgcat::mc ov4
+} {ov4}
+
+#
+# Test mcunknown, first the default operation
+# and then with an overridden definition.
+#
+
+test msgcat-4.1 {::msgcat::mcunknown, default} {
+ ::msgcat::mcset foo unk1 "unknown 1"
+} {unknown 1}
+test msgcat-4.2 {::msgcat::mcunknown, default} {
+ ::msgcat::mclocale foo
+ ::msgcat::mc unk1
+} {unknown 1}
+test msgcat-4.3 {::msgcat::mcunknown, default} {
+ ::msgcat::mclocale foo
+ ::msgcat::mc unk2
+} {unk2}
+test msgcat-4.4 {::msgcat::mcunknown, overridden} {
+ rename ::msgcat::mcunknown oldproc
+ proc ::msgcat::mcunknown {dom s} {
+ return "unknown:$dom:$s"
+ }
+ ::msgcat::mclocale foo
+ set result [::msgcat::mc unk1]
+ rename ::msgcat::mcunknown {}
+ rename oldproc ::msgcat::mcunknown
+ set result
+} {unknown 1}
+test msgcat-4.5 {::msgcat::mcunknown, overridden} {
+ rename ::msgcat::mcunknown oldproc
+ proc ::msgcat::mcunknown {dom s} {
+ return "unknown:$dom:$s"
+ }
+ ::msgcat::mclocale foo
+ set result [::msgcat::mc unk2]
+ rename ::msgcat::mcunknown {}
+ rename oldproc ::msgcat::mcunknown
+ set result
+} {unknown:foo:unk2}
+test msgcat-4.6 {::msgcat::mcunknown, uplevel context} {
+ rename ::msgcat::mcunknown oldproc
+ proc ::msgcat::mcunknown {dom s} {
+ return "unknown:$dom:$s:[info level]"
+ }
+ ::msgcat::mclocale foo
+ set result [::msgcat::mc unk2]
+ rename ::msgcat::mcunknown {}
+ rename oldproc ::msgcat::mcunknown
+ set result
+} {unknown:foo:unk2:1}
+
+
+#
+# Test mcload. Need to set up an environment for
+# these tests by creating a temporary directory and
+# message files.
+#
+
+set locales {en en_US en_US_funky}
+
+catch {file mkdir msgdir}
+foreach l $locales {
+ set fd [open [string tolower [file join msgdir $l.msg]] w]
+ puts $fd "::msgcat::mcset $l abc abc-$l"
+ close $fd
+}
+
+test msgcat-5.1 {::msgcat::mcload} {
+ ::msgcat::mclocale en
+ ::msgcat::mcload msgdir
+} {1}
+test msgcat-5.2 {::msgcat::mcload} {
+ ::msgcat::mclocale en_US
+ ::msgcat::mcload msgdir
+} {2}
+test msgcat-5.3 {::msgcat::mcload} {
+ ::msgcat::mclocale en_US_funky
+ ::msgcat::mcload msgdir
+} {3}
+
+# Even though en_US_notexist does not exist,
+# en_US and en should be loaded.
+
+test msgcat-5.4 {::msgcat::mcload} {
+ ::msgcat::mclocale en_US_notexist
+ ::msgcat::mcload msgdir
+} {2}
+test msgcat-5.5 {::msgcat::mcload} {
+ ::msgcat::mclocale no_FI_notexist
+ ::msgcat::mcload msgdir
+} {0}
+test msgcat-5.6 {::msgcat::mcload} {
+ ::msgcat::mclocale en
+ ::msgcat::mc abc
+} {abc-en}
+test msgcat-5.7 {::msgcat::mcload} {
+ ::msgcat::mclocale en_US
+ ::msgcat::mc abc
+} {abc-en_US}
+test msgcat-5.8 {::msgcat::mcload} {
+ ::msgcat::mclocale en_US_funky
+ ::msgcat::mc abc
+} {abc-en_US_funky}
+test msgcat-5.9 {::msgcat::mcload} {
+ rename ::msgcat::mcunknown oldproc
+ proc ::msgcat::mcunknown {dom s} {
+ return "unknown:$dom:$s"
+ }
+ ::msgcat::mclocale no_FI_notexist
+ set result [::msgcat::mc abc]
+ rename ::msgcat::mcunknown {}
+ rename oldproc ::msgcat::mcunknown
+ set result
+} {unknown:no_fi_notexist:abc}
+
+# cleanup
+foreach l $locales {
+ file delete [string tolower [file join msgdir $l.msg]]
+}
+
+# Clean out the msg catalogs
+::msgcat::mclocale $oldlocale
+file delete msgdir
+
+::tcltest::cleanupTests
+return
+
+
+
+
+
+
+
+
+
+
+
+