# json_write.test - Copyright (C) 2009 Andreas Kupries # # Tests for the Tcllib json::write package # # ------------------------------------------------------------------------- # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # ------------------------------------------------------------------------- # RCS: @(#) $Id: json_write.test,v 1.1 2009/11/25 04:41:01 andreas_kupries Exp $ # ------------------------------------------------------------------------- source [file join \ [file dirname [file dirname [file join [pwd] [info script]]]] \ devtools testutilities.tcl] testsNeedTcl 8.5 testsNeedTcltest 2.0 testing { useLocal json_write.tcl json::write } # ------------------------------------------------------------------------- set data {grammar { rules { A {is {/ {t +} {t -}} mode value} D {is {/ {t 0} {t 1} } mode value} E {is {/ {x {t (} {n E} {t )}} {x {n F} {* {x {n M} {n F}}}}} mode value} F {is {x {n T} {* {x {n A} {n T}}}} mode value} M {is {/ {t *} {t /}} mode value} N {is {x {? {n S}} {+ {n D}}} mode value} S {is {/ {t +} {t -}} mode value} T {is {n N} mode value} } start {n Expression} }} proc gen {serial} { array set g $serial array set g $g(grammar) unset g(grammar) # Assemble the rules ... set rules {} foreach {symbol def} $g(rules) { lassign $def _ is _ mode lappend rules $symbol \ [json::write object \ is [json::write string $is] \ mode [json::write string $mode]] } # Assemble the final result ... return [json::write object grammar \ [json::write object \ rules [json::write object {*}$rules] \ start [json::write string $g(start)]]] } # ------------------------------------------------------------------------- # Tests # ------------------------------------------------------------------------- test json-write-1.0 {default configuration} -body { list [json::write indented] [json::write aligned] } -result {1 1} test json-write-1.1 {implied configurations} -body { json::write indented 0 list [json::write indented] [json::write aligned] } -result {0 0} test json-write-1.2 {implied configurations} -body { json::write indented 0 json::write aligned 0 json::write aligned 1 list [json::write indented] [json::write aligned] } -result {1 1} # ------------------------------------------------------------------------- test json-write-2.0 {argument errors} -body { json::write indented X Y } -returnCodes 1 -result {wrong # args: should be "json::write indented ?bool?"} test json-write-2.1 {argument errors} -body { json::write aligned X Y } -returnCodes 1 -result {wrong # args: should be "json::write aligned ?bool?"} test json-write-2.2 {argument errors} -body { json::write string } -returnCodes 1 -result {wrong # args: should be "json::write string s"} test json-write-2.3 {argument errors} -body { json::write string A B } -returnCodes 1 -result {wrong # args: should be "json::write string s"} test json-write-2.4 {argument errors} -body { json::write object A } -returnCodes 1 -result {wrong # args, expected an even number of arguments} # ------------------------------------------------------------------------- test json-write-3.0 {indented, aligned} -body { json::write indented 1 json::write aligned 1 gen $data } -result {{ "grammar" : { "rules" : { "A" : { "is" : "\/ {t +} {t -}", "mode" : "value" }, "D" : { "is" : "\/ {t 0} {t 1} ", "mode" : "value" }, "E" : { "is" : "\/ {x {t (} {n E} {t )}} {x {n F} {* {x {n M} {n F}}}}", "mode" : "value" }, "F" : { "is" : "x {n T} {* {x {n A} {n T}}}", "mode" : "value" }, "M" : { "is" : "\/ {t *} {t \/}", "mode" : "value" }, "N" : { "is" : "x {? {n S}} {+ {n D}}", "mode" : "value" }, "S" : { "is" : "\/ {t +} {t -}", "mode" : "value" }, "T" : { "is" : "n N", "mode" : "value" } }, "start" : "n Expression" } }} test json-write-3.1 {indented, !aligned} -body { json::write indented 1 json::write aligned 0 gen $data } -result {{ "grammar" : { "rules" : { "A" : { "is" : "\/ {t +} {t -}", "mode" : "value" }, "D" : { "is" : "\/ {t 0} {t 1} ", "mode" : "value" }, "E" : { "is" : "\/ {x {t (} {n E} {t )}} {x {n F} {* {x {n M} {n F}}}}", "mode" : "value" }, "F" : { "is" : "x {n T} {* {x {n A} {n T}}}", "mode" : "value" }, "M" : { "is" : "\/ {t *} {t \/}", "mode" : "value" }, "N" : { "is" : "x {? {n S}} {+ {n D}}", "mode" : "value" }, "S" : { "is" : "\/ {t +} {t -}", "mode" : "value" }, "T" : { "is" : "n N", "mode" : "value" } }, "start" : "n Expression" } }} test json-write-3.1 {!indented, !aligned} -body { json::write indented 0 json::write aligned 0 gen $data } -result {{"grammar":{"rules":{"A":{"is":"\/ {t +} {t -}","mode":"value"},"D":{"is":"\/ {t 0} {t 1} ","mode":"value"},"E":{"is":"\/ {x {t (} {n E} {t )}} {x {n F} {* {x {n M} {n F}}}}","mode":"value"},"F":{"is":"x {n T} {* {x {n A} {n T}}}","mode":"value"},"M":{"is":"\/ {t *} {t \/}","mode":"value"},"N":{"is":"x {? {n S}} {+ {n D}}","mode":"value"},"S":{"is":"\/ {t +} {t -}","mode":"value"},"T":{"is":"n N","mode":"value"}},"start":"n Expression"}}} # ------------------------------------------------------------------------- unset data rename gen {} testsuiteCleanup # Local Variables: # mode: tcl # indent-tabs-mode: nil # End: