Commit | Line | Data |
458402ad |
1 | # json_write.test - Copyright (C) 2009 Andreas Kupries <andreas_kupries@sourceforge.net> |
2 | # |
3 | # Tests for the Tcllib json::write package |
4 | # |
5 | # ------------------------------------------------------------------------- |
6 | # See the file "license.terms" for information on usage and redistribution |
7 | # of this file, and for a DISCLAIMER OF ALL WARRANTIES. |
8 | # ------------------------------------------------------------------------- |
9 | # RCS: @(#) $Id: json_write.test,v 1.1 2009/11/25 04:41:01 andreas_kupries Exp $ |
10 | |
11 | # ------------------------------------------------------------------------- |
12 | |
13 | source [file join \ |
14 | [file dirname [file dirname [file join [pwd] [info script]]]] \ |
15 | devtools testutilities.tcl] |
16 | |
17 | testsNeedTcl 8.5 |
18 | testsNeedTcltest 2.0 |
19 | |
20 | testing { |
21 | useLocal json_write.tcl json::write |
22 | } |
23 | |
24 | # ------------------------------------------------------------------------- |
25 | |
26 | set data {grammar { |
27 | rules { |
28 | A {is {/ {t +} {t -}} mode value} |
29 | D {is {/ {t 0} {t 1} } mode value} |
30 | E {is {/ {x {t (} {n E} {t )}} {x {n F} {* {x {n M} {n F}}}}} mode value} |
31 | F {is {x {n T} {* {x {n A} {n T}}}} mode value} |
32 | M {is {/ {t *} {t /}} mode value} |
33 | N {is {x {? {n S}} {+ {n D}}} mode value} |
34 | S {is {/ {t +} {t -}} mode value} |
35 | T {is {n N} mode value} |
36 | } |
37 | start {n Expression} |
38 | }} |
39 | |
40 | proc gen {serial} { |
41 | array set g $serial |
42 | array set g $g(grammar) |
43 | unset g(grammar) |
44 | |
45 | # Assemble the rules ... |
46 | set rules {} |
47 | foreach {symbol def} $g(rules) { |
48 | lassign $def _ is _ mode |
49 | lappend rules $symbol \ |
50 | [json::write object \ |
51 | is [json::write string $is] \ |
52 | mode [json::write string $mode]] |
53 | } |
54 | |
55 | # Assemble the final result ... |
56 | return [json::write object grammar \ |
57 | [json::write object \ |
58 | rules [json::write object {*}$rules] \ |
59 | start [json::write string $g(start)]]] |
60 | } |
61 | |
62 | # ------------------------------------------------------------------------- |
63 | # Tests |
64 | # ------------------------------------------------------------------------- |
65 | |
66 | test json-write-1.0 {default configuration} -body { |
67 | list [json::write indented] [json::write aligned] |
68 | } -result {1 1} |
69 | |
70 | test json-write-1.1 {implied configurations} -body { |
71 | json::write indented 0 |
72 | list [json::write indented] [json::write aligned] |
73 | } -result {0 0} |
74 | |
75 | test json-write-1.2 {implied configurations} -body { |
76 | json::write indented 0 |
77 | json::write aligned 0 |
78 | json::write aligned 1 |
79 | list [json::write indented] [json::write aligned] |
80 | } -result {1 1} |
81 | |
82 | # ------------------------------------------------------------------------- |
83 | |
84 | test json-write-2.0 {argument errors} -body { |
85 | json::write indented X Y |
86 | } -returnCodes 1 -result {wrong # args: should be "json::write indented ?bool?"} |
87 | |
88 | test json-write-2.1 {argument errors} -body { |
89 | json::write aligned X Y |
90 | } -returnCodes 1 -result {wrong # args: should be "json::write aligned ?bool?"} |
91 | |
92 | test json-write-2.2 {argument errors} -body { |
93 | json::write string |
94 | } -returnCodes 1 -result {wrong # args: should be "json::write string s"} |
95 | |
96 | test json-write-2.3 {argument errors} -body { |
97 | json::write string A B |
98 | } -returnCodes 1 -result {wrong # args: should be "json::write string s"} |
99 | |
100 | test json-write-2.4 {argument errors} -body { |
101 | json::write object A |
102 | } -returnCodes 1 -result {wrong # args, expected an even number of arguments} |
103 | |
104 | # ------------------------------------------------------------------------- |
105 | |
106 | test json-write-3.0 {indented, aligned} -body { |
107 | json::write indented 1 |
108 | json::write aligned 1 |
109 | gen $data |
110 | } -result {{ |
111 | "grammar" : { |
112 | "rules" : { |
113 | "A" : { |
114 | "is" : "\/ {t +} {t -}", |
115 | "mode" : "value" |
116 | }, |
117 | "D" : { |
118 | "is" : "\/ {t 0} {t 1} ", |
119 | "mode" : "value" |
120 | }, |
121 | "E" : { |
122 | "is" : "\/ {x {t (} {n E} {t )}} {x {n F} {* {x {n M} {n F}}}}", |
123 | "mode" : "value" |
124 | }, |
125 | "F" : { |
126 | "is" : "x {n T} {* {x {n A} {n T}}}", |
127 | "mode" : "value" |
128 | }, |
129 | "M" : { |
130 | "is" : "\/ {t *} {t \/}", |
131 | "mode" : "value" |
132 | }, |
133 | "N" : { |
134 | "is" : "x {? {n S}} {+ {n D}}", |
135 | "mode" : "value" |
136 | }, |
137 | "S" : { |
138 | "is" : "\/ {t +} {t -}", |
139 | "mode" : "value" |
140 | }, |
141 | "T" : { |
142 | "is" : "n N", |
143 | "mode" : "value" |
144 | } |
145 | }, |
146 | "start" : "n Expression" |
147 | } |
148 | }} |
149 | |
150 | test json-write-3.1 {indented, !aligned} -body { |
151 | json::write indented 1 |
152 | json::write aligned 0 |
153 | gen $data |
154 | } -result {{ |
155 | "grammar" : { |
156 | "rules" : { |
157 | "A" : { |
158 | "is" : "\/ {t +} {t -}", |
159 | "mode" : "value" |
160 | }, |
161 | "D" : { |
162 | "is" : "\/ {t 0} {t 1} ", |
163 | "mode" : "value" |
164 | }, |
165 | "E" : { |
166 | "is" : "\/ {x {t (} {n E} {t )}} {x {n F} {* {x {n M} {n F}}}}", |
167 | "mode" : "value" |
168 | }, |
169 | "F" : { |
170 | "is" : "x {n T} {* {x {n A} {n T}}}", |
171 | "mode" : "value" |
172 | }, |
173 | "M" : { |
174 | "is" : "\/ {t *} {t \/}", |
175 | "mode" : "value" |
176 | }, |
177 | "N" : { |
178 | "is" : "x {? {n S}} {+ {n D}}", |
179 | "mode" : "value" |
180 | }, |
181 | "S" : { |
182 | "is" : "\/ {t +} {t -}", |
183 | "mode" : "value" |
184 | }, |
185 | "T" : { |
186 | "is" : "n N", |
187 | "mode" : "value" |
188 | } |
189 | }, |
190 | "start" : "n Expression" |
191 | } |
192 | }} |
193 | |
194 | test json-write-3.1 {!indented, !aligned} -body { |
195 | json::write indented 0 |
196 | json::write aligned 0 |
197 | gen $data |
198 | } -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"}}} |
199 | |
200 | # ------------------------------------------------------------------------- |
201 | unset data |
202 | rename gen {} |
203 | testsuiteCleanup |
204 | |
205 | # Local Variables: |
206 | # mode: tcl |
207 | # indent-tabs-mode: nil |
208 | # End: |