| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 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
 |