summaryrefslogtreecommitdiffstats
path: root/tcllib/modules/doctools2idx/import_json.test
diff options
context:
space:
mode:
Diffstat (limited to 'tcllib/modules/doctools2idx/import_json.test')
-rw-r--r--tcllib/modules/doctools2idx/import_json.test115
1 files changed, 115 insertions, 0 deletions
diff --git a/tcllib/modules/doctools2idx/import_json.test b/tcllib/modules/doctools2idx/import_json.test
new file mode 100644
index 0000000..e5d4760
--- /dev/null
+++ b/tcllib/modules/doctools2idx/import_json.test
@@ -0,0 +1,115 @@
+# -*- tcl -*-
+# idx_import_json.test: tests for the doctools::idx::import::json package/plugin.
+#
+# Copyright (c) 2009 by Andreas Kupries <andreas_kupries@users.sourceforge.net>
+# All rights reserved.
+#
+# RCS: @(#) $Id: import_json.test,v 1.1 2009/04/01 04:28:37 andreas_kupries Exp $
+
+# -------------------------------------------------------------------------
+
+source [file join \
+ [file dirname [file dirname [file join [pwd] [info script]]]] \
+ devtools testutilities.tcl]
+
+testsNeedTcl 8.4
+testsNeedTcltest 2.0
+
+support {
+ use fileutil/fileutil.tcl fileutil
+ use struct/list.tcl struct::list
+
+ # Copy of code from idx_import_json.tcl, to define dict support
+ # even where dict is not really present on the system.
+
+ if {[package vcompare [package present Tcl] 8.5] < 0} {
+ if {[catch {
+ package require dict
+ }]} {
+ # Create a pure Tcl implementation of the dict methods
+ # required by json, and fake the presence of the dict package.
+ proc dict {cmd args} { return [uplevel 1 [linsert $args 0 dict/$cmd]] }
+ proc dict/create {} { return {} }
+ proc dict/set {var key val} {
+ upvar 1 $var a
+ array set x $a
+ set x($key) $val
+ set a [array get x]
+ return
+ }
+ package provide dict 1
+ }
+ }
+ use json/json.tcl json
+
+ useLocal structure.tcl doctools::idx::structure
+
+ #msgcat::mclocale C
+}
+testing {
+ package provide doctools::idx::import::plugin 1
+ # The above fakes plugin environment. Well, not completely. By
+ # leaving out a definition for the 'include' alias the plugin is
+ # signaled that there is no need to overwrite the GetFile command
+ # of doctools::idx::parse with a version calling out to the plugin
+ # manager, i.e. that it can still use the regular file operations.
+
+ useLocal import_json.tcl doctools::idx::import::json
+}
+
+source [tcllibPath doctools2base/tests/common]
+set mytestdir tests/data
+
+# -------------------------------------------------------------------------
+
+# General set of error cases regarding the number of arguments.
+
+test doctools-idx-import-json-1.0 {import, wrong#args} -body {
+ import
+} -returnCodes error -result {wrong # args: should be "import text configuration"}
+
+test doctools-idx-import-json-1.1 {import, wrong#args} -body {
+ import T
+} -returnCodes error -result {wrong # args: should be "import text configuration"}
+
+test doctools-idx-import-json-1.2 {import, wrong#args} -body {
+ import T C XXX
+} -returnCodes error -result {wrong # args: should be "import text configuration"}
+
+# idx_import_json tests, numbering starts at 2
+# -------------------------------------------------------------------------
+
+# We are checking that the various forms of json markup, as can be
+# generated by doctools::idx(::export(::json)) are valid input to the
+# json parser.
+#
+# section {} holds the non-canonical input we have to accept and make
+# canonical to higher layers.
+
+foreach {k section} {
+ 0 {}
+ 1 -ultracompact
+ 2 -indented
+ 3 -indalign
+} {
+ TestFilesProcess $mytestdir ok json$section serial-print -> n label input data expected {
+ test doctools-idx-import-json-2.$k.$n "doctools::idx::import::json, $label$section, ok" -body {
+ doctools::idx::structure print [import $data {}]
+ } -result $expected
+ }
+}
+
+# -------------------------------------------------------------------------
+
+# We test the error messages and codes thrown by the parser for a
+# variety of failure possibilities.
+
+TestFilesProcess $mytestdir fail json json-emsg -> n label input data expected {
+ test doctools-idx-import-json-3.$n "doctools::idx::import::json, $label, error message" -body {
+ import $data {}
+ } -returnCodes error -result $expected
+}
+
+#----------------------------------------------------------------------
+testsuiteCleanup
+return