Pratt 1.5.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (283) hide show
  1. data/.exrc +61 -0
  2. data/.gitignore +4 -0
  3. data/History.txt +6 -0
  4. data/Manifest.txt +46 -0
  5. data/Pratt.gemspec +351 -0
  6. data/README.txt +66 -0
  7. data/Rakefile +85 -0
  8. data/TODO +54 -0
  9. data/VERSION +1 -0
  10. data/bin/pratt.rb +13 -0
  11. data/config.rb +34 -0
  12. data/lib/pratt.rb +527 -0
  13. data/lib/pratt/array.rb +11 -0
  14. data/lib/pratt/string.rb +18 -0
  15. data/models/app.rb +40 -0
  16. data/models/customer.rb +24 -0
  17. data/models/payment.rb +22 -0
  18. data/models/pratt.rb +19 -0
  19. data/models/project.rb +82 -0
  20. data/models/whence.rb +70 -0
  21. data/pkgs/tile-0.8.2.tar.gz +0 -0
  22. data/pkgs/tile-0.8.2/ANNOUNCE.txt +95 -0
  23. data/pkgs/tile-0.8.2/ChangeLog +4651 -0
  24. data/pkgs/tile-0.8.2/Makefile +250 -0
  25. data/pkgs/tile-0.8.2/Makefile.in +250 -0
  26. data/pkgs/tile-0.8.2/README.txt +86 -0
  27. data/pkgs/tile-0.8.2/aclocal.m4 +2 -0
  28. data/pkgs/tile-0.8.2/altTheme.o +0 -0
  29. data/pkgs/tile-0.8.2/blink.o +0 -0
  30. data/pkgs/tile-0.8.2/button.o +0 -0
  31. data/pkgs/tile-0.8.2/cache.o +0 -0
  32. data/pkgs/tile-0.8.2/clamTheme.o +0 -0
  33. data/pkgs/tile-0.8.2/classicTheme.o +0 -0
  34. data/pkgs/tile-0.8.2/config.log +1330 -0
  35. data/pkgs/tile-0.8.2/config.status +795 -0
  36. data/pkgs/tile-0.8.2/configure +15248 -0
  37. data/pkgs/tile-0.8.2/configure.in +89 -0
  38. data/pkgs/tile-0.8.2/demos/autocomplete.tcl +59 -0
  39. data/pkgs/tile-0.8.2/demos/demo.tcl +870 -0
  40. data/pkgs/tile-0.8.2/demos/dirbrowser.tcl +167 -0
  41. data/pkgs/tile-0.8.2/demos/dlgtest.tcl +97 -0
  42. data/pkgs/tile-0.8.2/demos/iconlib.tcl +110 -0
  43. data/pkgs/tile-0.8.2/demos/repeater.tcl +117 -0
  44. data/pkgs/tile-0.8.2/demos/toolbutton.tcl +101 -0
  45. data/pkgs/tile-0.8.2/doc/Geometry.3 +230 -0
  46. data/pkgs/tile-0.8.2/doc/INDEX.MAP +153 -0
  47. data/pkgs/tile-0.8.2/doc/Makefile +36 -0
  48. data/pkgs/tile-0.8.2/doc/TILE.XML +45 -0
  49. data/pkgs/tile-0.8.2/doc/Theme.3 +34 -0
  50. data/pkgs/tile-0.8.2/doc/button.n +75 -0
  51. data/pkgs/tile-0.8.2/doc/checkbutton.n +61 -0
  52. data/pkgs/tile-0.8.2/doc/combobox.n +98 -0
  53. data/pkgs/tile-0.8.2/doc/converting.txt +97 -0
  54. data/pkgs/tile-0.8.2/doc/dialog.n +122 -0
  55. data/pkgs/tile-0.8.2/doc/entry.n +438 -0
  56. data/pkgs/tile-0.8.2/doc/frame.n +43 -0
  57. data/pkgs/tile-0.8.2/doc/html/Geometry.html +304 -0
  58. data/pkgs/tile-0.8.2/doc/html/Theme.html +48 -0
  59. data/pkgs/tile-0.8.2/doc/html/button.html +120 -0
  60. data/pkgs/tile-0.8.2/doc/html/category-index.html +18 -0
  61. data/pkgs/tile-0.8.2/doc/html/checkbutton.html +94 -0
  62. data/pkgs/tile-0.8.2/doc/html/combobox.html +164 -0
  63. data/pkgs/tile-0.8.2/doc/html/converting.txt +97 -0
  64. data/pkgs/tile-0.8.2/doc/html/dialog.html +159 -0
  65. data/pkgs/tile-0.8.2/doc/html/entry.html +613 -0
  66. data/pkgs/tile-0.8.2/doc/html/frame.html +76 -0
  67. data/pkgs/tile-0.8.2/doc/html/image.html +100 -0
  68. data/pkgs/tile-0.8.2/doc/html/index.html +25 -0
  69. data/pkgs/tile-0.8.2/doc/html/keyword-index.html +228 -0
  70. data/pkgs/tile-0.8.2/doc/html/label.html +133 -0
  71. data/pkgs/tile-0.8.2/doc/html/labelframe.html +91 -0
  72. data/pkgs/tile-0.8.2/doc/html/manpage.css +212 -0
  73. data/pkgs/tile-0.8.2/doc/html/menubutton.html +63 -0
  74. data/pkgs/tile-0.8.2/doc/html/notebook.html +280 -0
  75. data/pkgs/tile-0.8.2/doc/html/paned.html +149 -0
  76. data/pkgs/tile-0.8.2/doc/html/progressbar.html +138 -0
  77. data/pkgs/tile-0.8.2/doc/html/radiobutton.html +89 -0
  78. data/pkgs/tile-0.8.2/doc/html/scrollbar.html +221 -0
  79. data/pkgs/tile-0.8.2/doc/html/separator.html +48 -0
  80. data/pkgs/tile-0.8.2/doc/html/sizegrip.html +62 -0
  81. data/pkgs/tile-0.8.2/doc/html/style.html +172 -0
  82. data/pkgs/tile-0.8.2/doc/html/tile-intro.html +164 -0
  83. data/pkgs/tile-0.8.2/doc/html/treeview.html +634 -0
  84. data/pkgs/tile-0.8.2/doc/html/widget.html +342 -0
  85. data/pkgs/tile-0.8.2/doc/image.n +81 -0
  86. data/pkgs/tile-0.8.2/doc/internals.txt +409 -0
  87. data/pkgs/tile-0.8.2/doc/label.n +75 -0
  88. data/pkgs/tile-0.8.2/doc/labelframe.n +64 -0
  89. data/pkgs/tile-0.8.2/doc/man.macros +239 -0
  90. data/pkgs/tile-0.8.2/doc/menubutton.n +41 -0
  91. data/pkgs/tile-0.8.2/doc/notebook.n +188 -0
  92. data/pkgs/tile-0.8.2/doc/paned.n +95 -0
  93. data/pkgs/tile-0.8.2/doc/progressbar.n +79 -0
  94. data/pkgs/tile-0.8.2/doc/radiobutton.n +57 -0
  95. data/pkgs/tile-0.8.2/doc/scrollbar.n +160 -0
  96. data/pkgs/tile-0.8.2/doc/separator.n +30 -0
  97. data/pkgs/tile-0.8.2/doc/sizegrip.n +53 -0
  98. data/pkgs/tile-0.8.2/doc/style.n +119 -0
  99. data/pkgs/tile-0.8.2/doc/tile-intro.n +165 -0
  100. data/pkgs/tile-0.8.2/doc/tmml.options +4 -0
  101. data/pkgs/tile-0.8.2/doc/treeview.n +415 -0
  102. data/pkgs/tile-0.8.2/doc/widget.n +227 -0
  103. data/pkgs/tile-0.8.2/doc/xml/Geometry.tmml +379 -0
  104. data/pkgs/tile-0.8.2/doc/xml/INDEX.MAP +153 -0
  105. data/pkgs/tile-0.8.2/doc/xml/Theme.tmml +63 -0
  106. data/pkgs/tile-0.8.2/doc/xml/button.tmml +134 -0
  107. data/pkgs/tile-0.8.2/doc/xml/checkbutton.tmml +119 -0
  108. data/pkgs/tile-0.8.2/doc/xml/combobox.tmml +184 -0
  109. data/pkgs/tile-0.8.2/doc/xml/dialog.tmml +195 -0
  110. data/pkgs/tile-0.8.2/doc/xml/entry.tmml +630 -0
  111. data/pkgs/tile-0.8.2/doc/xml/frame.tmml +98 -0
  112. data/pkgs/tile-0.8.2/doc/xml/image.tmml +101 -0
  113. data/pkgs/tile-0.8.2/doc/xml/label.tmml +154 -0
  114. data/pkgs/tile-0.8.2/doc/xml/labelframe.tmml +116 -0
  115. data/pkgs/tile-0.8.2/doc/xml/menubutton.tmml +80 -0
  116. data/pkgs/tile-0.8.2/doc/xml/notebook.tmml +306 -0
  117. data/pkgs/tile-0.8.2/doc/xml/paned.tmml +154 -0
  118. data/pkgs/tile-0.8.2/doc/xml/progressbar.tmml +151 -0
  119. data/pkgs/tile-0.8.2/doc/xml/radiobutton.tmml +109 -0
  120. data/pkgs/tile-0.8.2/doc/xml/scrollbar.tmml +233 -0
  121. data/pkgs/tile-0.8.2/doc/xml/separator.tmml +59 -0
  122. data/pkgs/tile-0.8.2/doc/xml/sizegrip.tmml +82 -0
  123. data/pkgs/tile-0.8.2/doc/xml/style.tmml +171 -0
  124. data/pkgs/tile-0.8.2/doc/xml/tile-intro.tmml +192 -0
  125. data/pkgs/tile-0.8.2/doc/xml/treeview.tmml +604 -0
  126. data/pkgs/tile-0.8.2/doc/xml/widget.tmml +372 -0
  127. data/pkgs/tile-0.8.2/entry.o +0 -0
  128. data/pkgs/tile-0.8.2/frame.o +0 -0
  129. data/pkgs/tile-0.8.2/generic/Makefile.in +221 -0
  130. data/pkgs/tile-0.8.2/generic/TODO +493 -0
  131. data/pkgs/tile-0.8.2/generic/altTheme.c +1172 -0
  132. data/pkgs/tile-0.8.2/generic/blink.c +168 -0
  133. data/pkgs/tile-0.8.2/generic/button.c +858 -0
  134. data/pkgs/tile-0.8.2/generic/cache.c +354 -0
  135. data/pkgs/tile-0.8.2/generic/clamTheme.c +974 -0
  136. data/pkgs/tile-0.8.2/generic/classicTheme.c +518 -0
  137. data/pkgs/tile-0.8.2/generic/configure +10334 -0
  138. data/pkgs/tile-0.8.2/generic/configure.in +100 -0
  139. data/pkgs/tile-0.8.2/generic/entry.c +1922 -0
  140. data/pkgs/tile-0.8.2/generic/frame.c +648 -0
  141. data/pkgs/tile-0.8.2/generic/gunk.h +44 -0
  142. data/pkgs/tile-0.8.2/generic/image.c +416 -0
  143. data/pkgs/tile-0.8.2/generic/label.c +663 -0
  144. data/pkgs/tile-0.8.2/generic/layout.c +1215 -0
  145. data/pkgs/tile-0.8.2/generic/manager.c +554 -0
  146. data/pkgs/tile-0.8.2/generic/manager.h +91 -0
  147. data/pkgs/tile-0.8.2/generic/notebook.c +1380 -0
  148. data/pkgs/tile-0.8.2/generic/paned.c +958 -0
  149. data/pkgs/tile-0.8.2/generic/pkgIndex.tcl.in +7 -0
  150. data/pkgs/tile-0.8.2/generic/progress.c +549 -0
  151. data/pkgs/tile-0.8.2/generic/scale.c +526 -0
  152. data/pkgs/tile-0.8.2/generic/scroll.c +253 -0
  153. data/pkgs/tile-0.8.2/generic/scrollbar.c +346 -0
  154. data/pkgs/tile-0.8.2/generic/separator.c +132 -0
  155. data/pkgs/tile-0.8.2/generic/square.c +306 -0
  156. data/pkgs/tile-0.8.2/generic/tagset.c +147 -0
  157. data/pkgs/tile-0.8.2/generic/tile.c +296 -0
  158. data/pkgs/tile-0.8.2/generic/tkElements.c +1280 -0
  159. data/pkgs/tile-0.8.2/generic/tkTheme.c +1708 -0
  160. data/pkgs/tile-0.8.2/generic/tkTheme.h +419 -0
  161. data/pkgs/tile-0.8.2/generic/tkThemeInt.h +45 -0
  162. data/pkgs/tile-0.8.2/generic/tkstate.c +268 -0
  163. data/pkgs/tile-0.8.2/generic/trace.c +145 -0
  164. data/pkgs/tile-0.8.2/generic/track.c +174 -0
  165. data/pkgs/tile-0.8.2/generic/treeview.c +3211 -0
  166. data/pkgs/tile-0.8.2/generic/ttk.decls +154 -0
  167. data/pkgs/tile-0.8.2/generic/ttkDecls.h +340 -0
  168. data/pkgs/tile-0.8.2/generic/ttkStubInit.c +61 -0
  169. data/pkgs/tile-0.8.2/generic/ttkStubLib.c +70 -0
  170. data/pkgs/tile-0.8.2/generic/widget.c +785 -0
  171. data/pkgs/tile-0.8.2/generic/widget.h +263 -0
  172. data/pkgs/tile-0.8.2/image.o +0 -0
  173. data/pkgs/tile-0.8.2/label.o +0 -0
  174. data/pkgs/tile-0.8.2/layout.o +0 -0
  175. data/pkgs/tile-0.8.2/library/altTheme.tcl +101 -0
  176. data/pkgs/tile-0.8.2/library/aquaTheme.tcl +62 -0
  177. data/pkgs/tile-0.8.2/library/button.tcl +85 -0
  178. data/pkgs/tile-0.8.2/library/clamTheme.tcl +139 -0
  179. data/pkgs/tile-0.8.2/library/classicTheme.tcl +108 -0
  180. data/pkgs/tile-0.8.2/library/combobox.tcl +439 -0
  181. data/pkgs/tile-0.8.2/library/cursors.tcl +36 -0
  182. data/pkgs/tile-0.8.2/library/defaults.tcl +118 -0
  183. data/pkgs/tile-0.8.2/library/dialog.tcl +274 -0
  184. data/pkgs/tile-0.8.2/library/entry.tcl +580 -0
  185. data/pkgs/tile-0.8.2/library/fonts.tcl +153 -0
  186. data/pkgs/tile-0.8.2/library/icons.tcl +105 -0
  187. data/pkgs/tile-0.8.2/library/keynav.tcl +192 -0
  188. data/pkgs/tile-0.8.2/library/menubutton.tcl +171 -0
  189. data/pkgs/tile-0.8.2/library/notebook.tcl +193 -0
  190. data/pkgs/tile-0.8.2/library/paned.tcl +87 -0
  191. data/pkgs/tile-0.8.2/library/progress.tcl +51 -0
  192. data/pkgs/tile-0.8.2/library/scale.tcl +54 -0
  193. data/pkgs/tile-0.8.2/library/scrollbar.tcl +125 -0
  194. data/pkgs/tile-0.8.2/library/sizegrip.tcl +77 -0
  195. data/pkgs/tile-0.8.2/library/tile.tcl +211 -0
  196. data/pkgs/tile-0.8.2/library/treeview.tcl +382 -0
  197. data/pkgs/tile-0.8.2/library/utils.tcl +254 -0
  198. data/pkgs/tile-0.8.2/library/winTheme.tcl +77 -0
  199. data/pkgs/tile-0.8.2/library/xpTheme.tcl +63 -0
  200. data/pkgs/tile-0.8.2/libtile0.8.2.so +0 -0
  201. data/pkgs/tile-0.8.2/libttkstub.a +0 -0
  202. data/pkgs/tile-0.8.2/license.terms +24 -0
  203. data/pkgs/tile-0.8.2/macosx/aquaTheme.c +1076 -0
  204. data/pkgs/tile-0.8.2/manager.o +0 -0
  205. data/pkgs/tile-0.8.2/notebook.o +0 -0
  206. data/pkgs/tile-0.8.2/paned.o +0 -0
  207. data/pkgs/tile-0.8.2/pkgIndex.tcl +3 -0
  208. data/pkgs/tile-0.8.2/progress.o +0 -0
  209. data/pkgs/tile-0.8.2/scale.o +0 -0
  210. data/pkgs/tile-0.8.2/scroll.o +0 -0
  211. data/pkgs/tile-0.8.2/scrollbar.o +0 -0
  212. data/pkgs/tile-0.8.2/separator.o +0 -0
  213. data/pkgs/tile-0.8.2/tagset.o +0 -0
  214. data/pkgs/tile-0.8.2/tclconfig/install-sh +119 -0
  215. data/pkgs/tile-0.8.2/tclconfig/tcl.m4 +4069 -0
  216. data/pkgs/tile-0.8.2/tclconfig/teax.m4 +109 -0
  217. data/pkgs/tile-0.8.2/tests/all.tcl +18 -0
  218. data/pkgs/tile-0.8.2/tests/bwidget.test +103 -0
  219. data/pkgs/tile-0.8.2/tests/cbtest.tcl +125 -0
  220. data/pkgs/tile-0.8.2/tests/combobox.test +51 -0
  221. data/pkgs/tile-0.8.2/tests/compound.tcl +92 -0
  222. data/pkgs/tile-0.8.2/tests/entry.test +285 -0
  223. data/pkgs/tile-0.8.2/tests/entrytest.tcl +78 -0
  224. data/pkgs/tile-0.8.2/tests/image.test +94 -0
  225. data/pkgs/tile-0.8.2/tests/labelframe.tcl +41 -0
  226. data/pkgs/tile-0.8.2/tests/labelframe.test +137 -0
  227. data/pkgs/tile-0.8.2/tests/layout.test +33 -0
  228. data/pkgs/tile-0.8.2/tests/misc.test +35 -0
  229. data/pkgs/tile-0.8.2/tests/nbtest.tcl +66 -0
  230. data/pkgs/tile-0.8.2/tests/notebook.test +500 -0
  231. data/pkgs/tile-0.8.2/tests/paned.test +298 -0
  232. data/pkgs/tile-0.8.2/tests/progress.test +92 -0
  233. data/pkgs/tile-0.8.2/tests/pwtest.tcl +90 -0
  234. data/pkgs/tile-0.8.2/tests/sbtest.tcl +79 -0
  235. data/pkgs/tile-0.8.2/tests/scrollbar.test +77 -0
  236. data/pkgs/tile-0.8.2/tests/sgtest.tcl +52 -0
  237. data/pkgs/tile-0.8.2/tests/testutils.tcl +20 -0
  238. data/pkgs/tile-0.8.2/tests/tile.test +674 -0
  239. data/pkgs/tile-0.8.2/tests/treetags.test +78 -0
  240. data/pkgs/tile-0.8.2/tests/treeview.test +563 -0
  241. data/pkgs/tile-0.8.2/tests/tvtest.tcl +332 -0
  242. data/pkgs/tile-0.8.2/tests/validate.test +278 -0
  243. data/pkgs/tile-0.8.2/tile.o +0 -0
  244. data/pkgs/tile-0.8.2/tkElements.o +0 -0
  245. data/pkgs/tile-0.8.2/tkTheme.o +0 -0
  246. data/pkgs/tile-0.8.2/tkstate.o +0 -0
  247. data/pkgs/tile-0.8.2/tools/genStubs.tcl +861 -0
  248. data/pkgs/tile-0.8.2/trace.o +0 -0
  249. data/pkgs/tile-0.8.2/track.o +0 -0
  250. data/pkgs/tile-0.8.2/treeview.o +0 -0
  251. data/pkgs/tile-0.8.2/ttkStubInit.o +0 -0
  252. data/pkgs/tile-0.8.2/ttkStubLib.o +0 -0
  253. data/pkgs/tile-0.8.2/widget.o +0 -0
  254. data/pkgs/tile-0.8.2/win/Tile.dsp +261 -0
  255. data/pkgs/tile-0.8.2/win/makefile.vc +527 -0
  256. data/pkgs/tile-0.8.2/win/monitor.c +164 -0
  257. data/pkgs/tile-0.8.2/win/nmakehlp.c +483 -0
  258. data/pkgs/tile-0.8.2/win/rules.vc +512 -0
  259. data/pkgs/tile-0.8.2/win/tile.rc +40 -0
  260. data/pkgs/tile-0.8.2/win/winTheme.c +734 -0
  261. data/pkgs/tile-0.8.2/win/xpTheme.c +1029 -0
  262. data/spec/app_spec.rb +48 -0
  263. data/spec/customer_spec.rb +31 -0
  264. data/spec/fixtures/graph.expectation +18 -0
  265. data/spec/payment_spec.rb +19 -0
  266. data/spec/pratt_spec.rb +148 -0
  267. data/spec/project_spec.rb +163 -0
  268. data/spec/rcov.opts +0 -0
  269. data/spec/spec.opts +1 -0
  270. data/spec/spec_helper.rb +21 -0
  271. data/spec/whence_spec.rb +54 -0
  272. data/tasks/pratt.rb +84 -0
  273. data/templates/model.eruby +12 -0
  274. data/templates/spec.eruby +8 -0
  275. data/views/env.rb +22 -0
  276. data/views/graph.eruby +20 -0
  277. data/views/invoice.eruby +148 -0
  278. data/views/main.rb +92 -0
  279. data/views/pid.eruby +3 -0
  280. data/views/pop.rb +94 -0
  281. data/views/pop2.rb +75 -0
  282. data/views/raw.eruby +11 -0
  283. metadata +390 -0
@@ -0,0 +1,78 @@
1
+ #
2
+ # treetags.test,v 1.2 2007/05/21 22:28:18 jenglish Exp
3
+ #
4
+ package require Tk
5
+ package require tcltest ; namespace import -force tcltest::*
6
+ loadTestedCommands
7
+ tk useinputmethods 0
8
+
9
+ set auto_path [linsert $auto_path 0 .] ; package require tile
10
+
11
+ testConstraint nyi 0
12
+
13
+ test treetags-1.0 "Setup" -body {
14
+ set tv [ttk::treeview .tv]
15
+ .tv insert {} end -id item1 -text "Item 1"
16
+ pack .tv
17
+ }
18
+
19
+ test treetags-1.1 "Bad tag list" -body {
20
+ $tv item item1 -tags {bad {list}here bad}
21
+ } -returnCodes error -result "list element in braces *" -match glob
22
+
23
+ test treetags-1.2 "Good tag list" -body {
24
+ $tv item item1 -tags tag1
25
+ $tv item item1 -tags
26
+ } -result [list tag1]
27
+
28
+ test treetags-1.3 "Bad events" -body {
29
+ $tv tag bind bad <Enter> { puts "Entered!" }
30
+ } -returnCodes 1 -result "unsupported event <Enter>*" -match glob
31
+
32
+ test treetags-2.0 "tag bind" -body {
33
+ $tv tag bind tag1 <KeyPress> {set ::KEY %A}
34
+ $tv tag bind tag1 <KeyPress>
35
+ } -result {set ::KEY %A}
36
+
37
+ test treetags-2.1 "Events delivered to tags" -body {
38
+ focus -force $tv ; update ;# needed so [event generate] delivers KeyPress
39
+ $tv focus item1
40
+ event generate .tv <KeyPress-a>
41
+ set ::KEY
42
+ } -result a
43
+
44
+ test treetags-2.2 "Events delivered to correct tags" -body {
45
+ $tv insert {} end -id item2 -tags tag2
46
+ $tv tag bind tag2 <KeyPress> [list set ::KEY2 %A]
47
+
48
+ $tv focus item1
49
+ event generate $tv <KeyPress-b>
50
+ $tv focus item2
51
+ event generate $tv <KeyPress-c>
52
+
53
+ list $::KEY $::KEY2
54
+ } -result [list b c]
55
+
56
+ test treetags-2.3 "Virtual events delivered to focus item" -body {
57
+ set ::bong 0
58
+ $tv tag bind tag2 <<Bing>> { incr bong }
59
+ $tv focus item2
60
+ event generate $tv <<Bing>>
61
+ $tv focus item1
62
+ event generate $tv <<Bing>>
63
+ set bong
64
+ } -result 1
65
+
66
+
67
+ test treetags-3.0 "tag configure" -body {
68
+ $tv tag configure tag1 -foreground blue -background red
69
+ } -result {}
70
+
71
+ test treetags-3.1 "tag configure" -body {
72
+ $tv tag configure tag1 -foreground
73
+ } -result [list blue]
74
+
75
+
76
+ test treetags-end "Cleanup" -body { destroy .tv }
77
+
78
+ tcltest::cleanupTests
@@ -0,0 +1,563 @@
1
+ #
2
+ # treeview.test,v 1.9 2006/12/18 19:03:33 jenglish Exp
3
+ #
4
+ # [7Jun2005] TO CHECK: [$tv see {}] -- shouldn't work (at least, shouldn't do
5
+ # what it currently does)
6
+ #
7
+
8
+ package require Tk
9
+ package require tcltest ; namespace import -force tcltest::*
10
+ loadTestedCommands
11
+
12
+ lappend auto_path .
13
+ package require tile
14
+
15
+ # consistencyCheck --
16
+ # Traverse the tree to make sure the item data structures
17
+ # are properly linked.
18
+ #
19
+ # Since [$tv children] follows ->next links and [$tv index]
20
+ # follows ->prev links, this should cover all invariants.
21
+ #
22
+ proc consistencyCheck {tv {item {}}} {
23
+ set i 0;
24
+ foreach child [$tv children $item] {
25
+ assert {[$tv parent $child] == $item} "parent $child = $item"
26
+ assert {[$tv index $child] == $i} "index $child [$tv index $child]=$i"
27
+ incr i
28
+ consistencyCheck $tv $child
29
+ }
30
+ }
31
+
32
+ proc assert {expr {message ""}} {
33
+ if {![uplevel 1 [list expr $expr]]} {
34
+ set error "PANIC! PANIC! PANIC: $message ($expr failed)"
35
+ puts stderr $error
36
+ error $error
37
+ }
38
+ }
39
+
40
+ test treeview-0 "treeview test - setup" -body {
41
+ ttk::treeview .tv -columns {a b c}
42
+ pack .tv -expand true -fill both
43
+ update
44
+ }
45
+
46
+ test treeview-1.1 "columns" -body {
47
+ .tv configure -columns {a b c}
48
+ }
49
+
50
+ test treeview-1.2 "Bad columns" -body {
51
+ #.tv configure -columns {illegal "list"value}
52
+ ttk::treeview .badtv -columns {illegal "list"value}
53
+ } -returnCodes 1 -result "list element in quotes followed by*" -match glob
54
+
55
+ test treeview-1.3 "bad displaycolumns" -body {
56
+ .tv configure -displaycolumns {a b d}
57
+ } -returnCodes 1 -result "Invalid column index d"
58
+
59
+ test treeview-1.4 "more bad displaycolumns" -body {
60
+ .tv configure -displaycolumns {1 2 3}
61
+ } -returnCodes 1 -result "Column index 3 out of bounds"
62
+
63
+ test treeview-1.5 "Don't forget to check negative numbers" -body {
64
+ .tv configure -displaycolumns {1 -2 3}
65
+ } -returnCodes 1 -result "Column index -2 out of bounds"
66
+
67
+ # Item creation.
68
+ #
69
+ test treeview-2.1 "insert -- not enough args" -body {
70
+ .tv insert
71
+ } -returnCodes 1 -result "wrong # args: *" -match glob
72
+
73
+ test treeview-2.3 "insert -- bad integer index" -body {
74
+ .tv insert {} badindex
75
+ } -returnCodes 1 -result "expected integer *" -match glob
76
+
77
+ test treeview-2.4 "insert -- bad parent node" -body {
78
+ .tv insert badparent end
79
+ } -returnCodes 1 -result "Item badparent not found" -match glob
80
+
81
+ test treeview-2.5 "insert -- finaly insert a node" -body {
82
+ .tv insert {} end -id newnode -text "New node"
83
+ } -result newnode
84
+
85
+ test treeview-2.6 "insert -- make sure node was inserted" -body {
86
+ .tv children {}
87
+ } -result [list newnode]
88
+
89
+ test treeview-2.7 "insert -- prevent duplicate node names" -body {
90
+ .tv insert {} end -id newnode
91
+ } -returnCodes 1 -result "Item newnode already exists"
92
+
93
+ test treeview-2.8 "insert -- new node at end" -body {
94
+ .tv insert {} end -id lastnode
95
+ consistencyCheck .tv
96
+ .tv children {}
97
+ } -result [list newnode lastnode]
98
+
99
+ consistencyCheck .tv
100
+
101
+ test treeview-2.9 "insert -- new node at beginning" -body {
102
+ .tv insert {} 0 -id firstnode
103
+ consistencyCheck .tv
104
+ .tv children {}
105
+ } -result [list firstnode newnode lastnode]
106
+
107
+ test treeview-2.10 "insert -- one more node" -body {
108
+ .tv insert {} 2 -id onemore
109
+ consistencyCheck .tv
110
+ .tv children {}
111
+ } -result [list firstnode newnode onemore lastnode]
112
+
113
+ test treeview-2.11 "insert -- and another one" -body {
114
+ .tv insert {} 2 -id anotherone
115
+ consistencyCheck .tv
116
+ .tv children {}
117
+ } -result [list firstnode newnode anotherone onemore lastnode]
118
+
119
+ test treeview-2.12 "insert -- one more at end" -body {
120
+ .tv insert {} end -id newlastone
121
+ consistencyCheck .tv
122
+ .tv children {}
123
+ } -result [list firstnode newnode anotherone onemore lastnode newlastone]
124
+
125
+ test treeview-2.13 "insert -- one more at beginning" -body {
126
+ .tv insert {} 0 -id newfirstone
127
+ consistencyCheck .tv
128
+ .tv children {}
129
+ } -result [list newfirstone firstnode newnode anotherone onemore lastnode newlastone]
130
+
131
+ test treeview-2.14 "insert -- bad options" -body {
132
+ .tv insert {} end -badoption foo
133
+ } -returnCodes 1 -result {unknown option "-badoption"}
134
+
135
+ test treeview-2.15 "insert -- at position 0 w/no children" -body {
136
+ .tv insert newnode 0 -id newnode.n2 -text "Foo"
137
+ .tv children newnode
138
+ } -result newnode.n2 ;# don't crash
139
+
140
+ test treeview-2.16 "insert -- insert way past end" -body {
141
+ .tv insert newnode 99 -id newnode.n3 -text "Foo"
142
+ consistencyCheck .tv
143
+ .tv children newnode
144
+ } -result [list newnode.n2 newnode.n3]
145
+
146
+ test treeview-2.17 "insert -- insert before beginning" -body {
147
+ .tv insert newnode -1 -id newnode.n1 -text "Foo"
148
+ consistencyCheck .tv
149
+ .tv children newnode
150
+ } -result [list newnode.n1 newnode.n2 newnode.n3]
151
+
152
+ ###
153
+ #
154
+ test treeview-3.1 "parent" -body {
155
+ .tv parent newnode.n1
156
+ } -result newnode
157
+ test treeview-3.2 "parent - top-level node" -body {
158
+ .tv parent newnode
159
+ } -result {}
160
+ test treeview-3.3 "parent - root node" -body {
161
+ .tv parent {}
162
+ } -result {}
163
+ test treeview-3.4 "index" -body {
164
+ list [.tv index newnode.n3] [.tv index newnode.n2] [.tv index newnode.n1]
165
+ } -result [list 2 1 0]
166
+ test treeview-3.5 "index - exhaustive test" -body {
167
+ set result [list]
168
+ foreach item [.tv children {}] {
169
+ lappend result [.tv index $item]
170
+ }
171
+ set result
172
+ } -result [list 0 1 2 3 4 5 6]
173
+
174
+ test treeview-3.6 "detach" -body {
175
+ .tv detach newnode
176
+ consistencyCheck .tv
177
+ .tv children {}
178
+ } -result [list newfirstone firstnode anotherone onemore lastnode newlastone]
179
+ # XREF: treeview-2.13
180
+
181
+ test treeview-3.7 "detach didn't screw up internal links" -body {
182
+ consistencyCheck .tv
183
+ set result [list]
184
+ foreach item [.tv children {}] {
185
+ lappend result [.tv index $item]
186
+ }
187
+ set result
188
+ } -result [list 0 1 2 3 4 5]
189
+
190
+ test treeview-3.8 "detached node has no parent, index 0" -body {
191
+ list [.tv parent newnode] [.tv index newnode]
192
+ } -result [list {} 0]
193
+ # @@@ Can't distinguish detached nodes from first root node
194
+
195
+ test treeview-3.9 "detached node's children undisturbed" -body {
196
+ .tv children newnode
197
+ } -result [list newnode.n1 newnode.n2 newnode.n3]
198
+
199
+ test treeview-3.10 "detach is idempotent" -body {
200
+ .tv detach newnode
201
+ consistencyCheck .tv
202
+ .tv children {}
203
+ } -result [list newfirstone firstnode anotherone onemore lastnode newlastone]
204
+
205
+ test treeview-3.11 "Can't detach root item" -body {
206
+ .tv detach [list {}]
207
+ update
208
+ consistencyCheck .tv
209
+ } -returnCodes 1 -result "Cannot detach root item"
210
+ consistencyCheck .tv
211
+
212
+ test treeview-3.12 "Reattach" -body {
213
+ .tv move newnode {} end
214
+ consistencyCheck .tv
215
+ .tv children {}
216
+ } -result [list newfirstone firstnode anotherone onemore lastnode newlastone newnode]
217
+
218
+ # Bug # ?????
219
+ test treeview-3.13 "Re-reattach" -body {
220
+ .tv move newnode {} end
221
+ consistencyCheck .tv
222
+ .tv children {}
223
+ } -result [list newfirstone firstnode anotherone onemore lastnode newlastone newnode]
224
+
225
+ .tv insert newfirstone end -id x1
226
+ .tv insert newfirstone end -id x2
227
+ .tv insert newfirstone end -id x3
228
+
229
+ test treeview-3.14 "Duplicated entry in children list" -body {
230
+ .tv children newfirstone [list x3 x1 x2 x3]
231
+ # ??? Maybe this should raise an error?
232
+ consistencyCheck .tv
233
+ .tv children newfirstone
234
+ } -result [list x3 x1 x2]
235
+
236
+ test treeview-3.14.1 "Duplicated entry in children list" -body {
237
+ .tv children newfirstone [list x1 x2 x3 x3 x2 x1]
238
+ consistencyCheck .tv
239
+ .tv children newfirstone
240
+ } -result [list x1 x2 x3]
241
+
242
+ test treeview-3.15 "Consecutive duplicate entries in children list" -body {
243
+ .tv children newfirstone [list x1 x2 x2 x3]
244
+ consistencyCheck .tv
245
+ .tv children newfirstone
246
+ } -result [list x1 x2 x3]
247
+
248
+ test treeview-3.16 "Insert child after self" -body {
249
+ .tv move x2 newfirstone 1
250
+ consistencyCheck .tv
251
+ .tv children newfirstone
252
+ } -result [list x1 x2 x3]
253
+
254
+ test treeview-3.17 "Insert last child after self" -body {
255
+ .tv move x3 newfirstone 2
256
+ consistencyCheck .tv
257
+ .tv children newfirstone
258
+ } -result [list x1 x2 x3]
259
+
260
+ test treeview-3.18 "Insert last child after end" -body {
261
+ .tv move x3 newfirstone 3
262
+ consistencyCheck .tv
263
+ .tv children newfirstone
264
+ } -result [list x1 x2 x3]
265
+
266
+
267
+ test treeview-4.1 "opened - initial state" -body {
268
+ .tv item newnode -open
269
+ } -result 0
270
+ test treeview-4.2 "opened - open node" -body {
271
+ .tv item newnode -open 1
272
+ .tv item newnode -open
273
+ } -result 1
274
+ test treeview-4.3 "opened - closed node" -body {
275
+ .tv item newnode -open 0
276
+ .tv item newnode -open
277
+ } -result 0
278
+
279
+ test treeview-5.1 "item -- error checks" -body {
280
+ .tv item newnode -text "Bad values" -values "{bad}list"
281
+ } -returnCodes 1 -result "list element in braces followed by*" -match glob
282
+
283
+ test treeview-5.2 "item -- error leaves options unchanged " -body {
284
+ .tv item newnode -text
285
+ } -result "New node"
286
+
287
+ test treeview-5.3 "Heading" -body {
288
+ .tv heading #0 -text "Heading"
289
+ }
290
+
291
+ test treeview-5.4 "get cell" -body {
292
+ set l [list a b c]
293
+ .tv item newnode -values $l
294
+ .tv set newnode 1
295
+ } -result b
296
+
297
+ test treeview-5.5 "set cell" -body {
298
+ .tv set newnode 1 XXX
299
+ .tv item newnode -values
300
+ } -result [list a XXX c]
301
+
302
+ test treeview-5.6 "set illegal cell" -body {
303
+ .tv set newnode #0 YYY
304
+ } -returnCodes 1 -result "Display column #0 cannot be set"
305
+
306
+ test treeview-5.7 "set illegal cell" -body {
307
+ .tv set newnode 3 YY ;# 3 == current #columns
308
+ } -returnCodes 1 -result "Column index 3 out of bounds"
309
+
310
+ test treeview-5.8 "set display columns" -body {
311
+ .tv configure -displaycolumns [list 2 1 0]
312
+ .tv set newnode #1 X
313
+ .tv set newnode #2 Y
314
+ .tv set newnode #3 Z
315
+ .tv item newnode -values
316
+ } -result [list Z Y X]
317
+
318
+ test treeview-5.9 "display columns part 2" -body {
319
+ list [.tv column #1 -id] [.tv column #2 -id] [.tv column #3 -id]
320
+ } -result [list c b a]
321
+
322
+ test treeview-5.10 "cannot set column -id" -body {
323
+ .tv column #1 -id X
324
+ } -returnCodes 1 -result "Attempt to change read-only option"
325
+
326
+ test treeview-5.11 "get" -body {
327
+ .tv set newnode #1
328
+ } -result X
329
+
330
+ test treeview-5.12 "get dictionary" -body {
331
+ .tv set newnode
332
+ } -result [list a Z b Y c X]
333
+
334
+ test treeview-5.13 "get, no value" -body {
335
+ set newitem [.tv insert {} end]
336
+ set result [.tv set $newitem #1]
337
+ .tv delete $newitem
338
+ set result
339
+ } -result {}
340
+
341
+ test treeview-5.14 "-displaycolumns #all" -body {
342
+ .tv configure -displaycolumns "#all"
343
+ list [.tv column #1 -id] [.tv column #2 -id] [.tv column #3 -id]
344
+ } -result [.tv cget -columns]
345
+
346
+ test treeview-5.15 "-displaycolumns empty" -body {
347
+ .tv configure -displaycolumns [list]
348
+ list [.tv column #1 -id] [.tv column #2 -id] [.tv column #3 -id]
349
+ } -returnCodes error -result "Column #1 out of range"
350
+
351
+ test treeview-6.1 "deletion - setup" -body {
352
+ .tv insert {} end -id dtest
353
+ foreach id [list a b c d e] {
354
+ .tv insert dtest end -id $id
355
+ }
356
+ .tv children dtest
357
+ } -result [list a b c d e]
358
+
359
+ test treeview-6.1 "delete" -body {
360
+ .tv delete b
361
+ consistencyCheck .tv
362
+ list [.tv exists b] [.tv children dtest]
363
+ } -result [list 0 [list a c d e]]
364
+
365
+ consistencyCheck .tv
366
+
367
+ test treeview-6.2 "delete - duplicate items in list" -body {
368
+ .tv delete [list a e a e]
369
+ consistencyCheck .tv
370
+ .tv children dtest
371
+ } -result [list c d]
372
+
373
+ test treeview-6.3 "delete - descendants removed" -body {
374
+ .tv insert c end -id c1
375
+ .tv insert c end -id c2
376
+ .tv insert c1 end -id c11
377
+ consistencyCheck .tv
378
+ .tv delete c
379
+ consistencyCheck .tv
380
+ list [.tv exists c] [.tv exists c1] [.tv exists c2] [.tv exists c11]
381
+ } -result [list 0 0 0 0]
382
+
383
+ test treeview-6.4 "delete - delete parent and descendants" -body {
384
+ .tv insert dtest end -id c
385
+ .tv insert c end -id c1
386
+ .tv insert c end -id c2
387
+ .tv insert c1 end -id c11
388
+ consistencyCheck .tv
389
+ .tv delete [list c c1 c2 c11]
390
+ consistencyCheck .tv
391
+ list [.tv exists c] [.tv exists c1] [.tv exists c2] [.tv exists c11]
392
+ } -result [list 0 0 0 0]
393
+
394
+ test treeview-6.5 "delete - delete descendants and parent" -body {
395
+ .tv insert dtest end -id c
396
+ .tv insert c end -id c1
397
+ .tv insert c end -id c2
398
+ .tv insert c1 end -id c11
399
+ consistencyCheck .tv
400
+ .tv delete [list c11 c1 c2 c]
401
+ consistencyCheck .tv
402
+ list [.tv exists c] [.tv exists c1] [.tv exists c2] [.tv exists c11]
403
+ } -result [list 0 0 0 0]
404
+
405
+ test treeview-6.6 "delete - end" -body {
406
+ consistencyCheck .tv
407
+ .tv children dtest
408
+ } -result [list d]
409
+
410
+ test treeview-7.1 "move" -body {
411
+ .tv insert d end -id d1
412
+ .tv insert d end -id d2
413
+ .tv insert d end -id d3
414
+ .tv move d3 d 0
415
+ consistencyCheck .tv
416
+ .tv children d
417
+ } -result [list d3 d1 d2]
418
+
419
+ test treeview-7.2 "illegal move" -body {
420
+ .tv move d d2 end
421
+ } -returnCodes 1 -result "Cannot insert d as a descendant of d2"
422
+
423
+ test treeview-7.3 "illegal move has no effect" -body {
424
+ consistencyCheck .tv
425
+ .tv children d
426
+ } -result [list d3 d1 d2]
427
+
428
+ test treeview-7.4 "Replace children" -body {
429
+ .tv children d [list d3 d2 d1]
430
+ consistencyCheck .tv
431
+ .tv children d
432
+ } -result [list d3 d2 d1]
433
+
434
+ test treeview-7.5 "replace children - precondition" -body {
435
+ # Just check to make sure the test suite so far has left
436
+ # us in the state we expect to be in:
437
+ list [.tv parent newnode] [.tv children newnode]
438
+ } -result [list {} [list newnode.n1 newnode.n2 newnode.n3]]
439
+
440
+ test treeview-7.6 "Replace children - illegal move" -body {
441
+ .tv children newnode.n1 [list newnode.n1 newnode.n2 newnode.n3]
442
+ } -returnCodes 1 -result "Cannot insert newnode.n1 as a descendant of newnode.n1"
443
+
444
+ proc lmove {l from to} {
445
+ linsert [lreplace $l $from $from] $to [lindex $l $from]
446
+ }
447
+
448
+ test treeview-7.7 "Exhaustive moves" -setup {
449
+ set r [.tv insert newnode 0]
450
+ set l [list m1 m2 m3 m4 m5]
451
+ foreach c $l {
452
+ .tv insert $r end -id $c
453
+ }
454
+ } -cleanup {
455
+ .tv delete $r
456
+ } -body {
457
+ set n [llength $l]
458
+ set errors [list]
459
+ for {set i 0} {$i < $n} {incr i} {
460
+ for {set j 0} {$j < $n} {incr j} {
461
+
462
+ .tv children $r $l ; consistencyCheck .tv
463
+ .tv move [lindex $l $i] $r $j ; consistencyCheck .tv
464
+
465
+ set expect [lmove $l $i $j]
466
+ set result [.tv children $r]
467
+ foreach x $expect y $result {
468
+ if {$x ne $y} {
469
+ lappend errors \
470
+ "move $i -> $j: got '$result', expected '$expect'"
471
+ break;
472
+ }
473
+ }
474
+ }
475
+ }
476
+ join $errors \n
477
+ } -result ""
478
+
479
+ test treeview-7.8 "Exhaustive inserts" -setup {
480
+ set r [.tv insert newnode 0]
481
+ set l [list i1 i2 i3 i4]
482
+ foreach c $l {
483
+ .tv insert $r end -id $c
484
+ }
485
+ } -cleanup {
486
+ .tv delete $r
487
+ } -body {
488
+ set n [llength $l]
489
+ set errors [list]
490
+ for {set i -1} {$i <= $n+1} {incr i} {
491
+ consistencyCheck .tv
492
+
493
+ .tv insert $r $i -id X ; consistencyCheck .tv
494
+ set expect [linsert $l $i X]
495
+ set result [.tv children $r]
496
+ foreach x $expect y $result {
497
+ if {$x ne $y} {
498
+ lappend errors "insert $i: got '$result', expected '$expect'"
499
+ break;
500
+ }
501
+ }
502
+ .tv delete X ; consistencyCheck .tv
503
+ }
504
+ join $errors \n
505
+ } -result ""
506
+ consistencyCheck .tv
507
+
508
+ test treeview-8.0 "Selection set" -body {
509
+ .tv selection set [list newnode.n1 newnode.n3 newnode.n2]
510
+ .tv selection
511
+ } -result [list newnode.n1 newnode.n2 newnode.n3]
512
+
513
+ test treeview-8.1 "Selection add" -body {
514
+ .tv selection add [list newnode]
515
+ .tv selection
516
+ } -result [list newnode newnode.n1 newnode.n2 newnode.n3]
517
+
518
+ test treeview-8.2 "Selection toggle" -body {
519
+ .tv selection toggle [list newnode.n2 d3]
520
+ .tv selection
521
+ } -result [list newnode newnode.n1 newnode.n3 d3]
522
+
523
+ test treeview-8.3 "Selection remove" -body {
524
+ .tv selection remove [list newnode.n2 d3]
525
+ .tv selection
526
+ } -result [list newnode newnode.n1 newnode.n3]
527
+
528
+ test treeview-8.4 "Selection - clear" -body {
529
+ .tv selection set {}
530
+ .tv selection
531
+ } -result {}
532
+
533
+ test treeview-8.5 "Selection - bad operation" -body {
534
+ .tv selection badop foo
535
+ } -returnCodes 1 -match glob -result {bad selection operation "badop": must be *}
536
+
537
+ ### NEED: more tests for see/yview/scrolling
538
+
539
+ proc scrollcallback {args} {
540
+ set ::scrolldata $args
541
+ }
542
+ test treeview-9.0 "scroll callback - empty tree" -body {
543
+ .tv configure -yscrollcommand scrollcallback
544
+ .tv delete [.tv children {}]
545
+ update
546
+ set ::scrolldata
547
+ } -result [list 0 1]
548
+
549
+ ### NEED: tests for focus item, selection
550
+
551
+
552
+ ### Misc. tests:
553
+
554
+ destroy .tv
555
+ test treeview-10.1 "Root node properly initialized (#1541739)" -setup {
556
+ ttk::treeview .tv
557
+ .tv insert {} end -id a
558
+ .tv see a
559
+ } -cleanup {
560
+ destroy .tv
561
+ }
562
+
563
+ tcltest::cleanupTests