source: tol/tolbaseBLT/lib/notebookdb/notebookdb.test @ 56ade3b

1941-docker-image-to-testdevel
Last change on this file since 56ade3b was 56ade3b, checked in by Jorge Pérez <josp.jorge@…>, 10 years ago

fixes #1932, se ha creado la rama trunk/tolbaseBLT copia de trunk/tolbase

git-svn-id: ​https://www.tol-project.org/svn/tolp/trunk@7330 be4846ae-f051-483a-831f-b64e7d08527f

  • Property mode set to 100644
File size: 12.5 KB
RevLine 
[56ade3b]1# -*-Tcl-*-
2#---------------------------------------------------------------------
3# TITLE:
4#       notebookdb.test
5#
6# AUTHOR:
7#       Will Duquette
8#
9# DESCRIPTION:
10#       Test cases for notebookdb.tcl.  Uses the ::tcltest:: harness.
11
12
13#---------------------------------------------------------------------
14# Load the tcltest package
15
16if {[lsearch [namespace children] ::tcltest] == -1} {
17    package require tcltest
18    namespace import ::tcltest::*
19}
20
21#---------------------------------------------------------------------
22# Load the snit package.
23
24lappend auto_path ..
25source notebookdb.tcl
26namespace import ::notebookdb::notebookdb
27
28# Handle notifications
29
30proc Notify {op name} {
31    global notifyList
32
33    lappend notifyList $op $name
34}
35
36# Cleanup before each test.
37
38proc cleanup {} {
39    global notifyList
40
41    set notifyList {}
42
43    if {[file exists pages.dat]} {
44        file delete pages.dat
45    }
46
47    if {[file exists pages.bak]} {
48        file delete pages.bak
49    }
50
51    if {[info command ::db] != ""} {
52        ::db destroy
53    }
54}
55
56
57#-----------------------------------------------------------------------
58# Database creation
59
60test creation-1.1 {creation but no -dbfile} {} {
61    cleanup
62
63    set result ""
64    catch {notebookdb create db} result
65    set result
66} {Error in constructor: required option -dbfile is missing.}
67
68test creation-1.2 {creation with new -dbfile} {} {
69    cleanup
70
71    notebookdb create db -dbfile pages.dat
72    list [db cget -dbfile] [file exists [db cget -dbfile]]
73} {pages.dat 0}
74
75test creation-1.3 {-dbfile cannot be changed} {} {
76    cleanup
77
78    notebookdb create db -dbfile pages.dat
79    set result {}
80    catch {db configure -dbfile newfile.dat} result
81    set result
82} {-dbfile cannot be changed after the notebookdb is created}
83
84test creation-1.4 {contents of new -dbfile} {} {
85    cleanup
86
87    notebookdb create db -dbfile pages.dat
88    db pages
89} {}
90
91#-----------------------------------------------------------------------
92# exists
93
94test exists-1.1 {page existence/nonexistence} {} {
95    cleanup
96
97    notebookdb create db -dbfile pages.dat
98    db set Home "Where the heart is!"
99    list [db exists Home] [db exists Office]
100} {1 0}
101
102#-----------------------------------------------------------------------
103# pageids
104
105test pageids-1.1 {get pageids} {} {
106    cleanup
107
108    notebookdb create db -dbfile pages.dat
109    db set Home {}
110    db set "Recent Changes" {}
111    db pageids
112} {home {recent changes}}
113
114#-----------------------------------------------------------------------
115# get
116
117test get-1.1 {get page text} {} {
118    cleanup
119
120    notebookdb create db -dbfile pages.dat
121    db set One "My First Page"
122    db set Two "My Second Page"
123    list [db get One] [db get Two]
124} {{My First Page
125} {My Second Page
126}}
127
128#-----------------------------------------------------------------------
129# lock/unlock/locked
130
131test locks-1.1 {pages are not locked by default} {} {
132    cleanup
133
134    notebookdb create db -dbfile pages.dat
135    db set Home {}
136    db locked Home
137} {0}
138
139test locks-1.2 {pages can be locked and unlocked} {} {
140    cleanup
141
142    notebookdb create db -dbfile pages.dat
143    db set Home {}
144    set a [db locked Home]
145    db lock Home
146    set b [db locked Home]
147    db unlock Home
148    set c [db locked Home]
149    list $a $b $c
150} {0 1 0}
151
152#-----------------------------------------------------------------------
153# set
154
155test set-1.1 {set creates page} {} {
156    cleanup
157
158    notebookdb create db -dbfile pages.dat
159    db set Foo Bar
160    list [db exists Foo] [db get Foo]
161} {1 {Bar
162}}
163
164test set-1.2 {set changes page} {} {
165    cleanup
166
167    notebookdb create db -dbfile pages.dat
168    db set Home Bar
169    db get Home
170} {Bar
171}
172
173test set-1.3 {can't set locked page} {} {
174    cleanup
175
176    notebookdb create db -dbfile pages.dat
177    db set Home ""
178    db lock Home
179    set result ""
180    catch {db set Home Bar} result
181    set result
182} {Error, 'Home' is locked.}
183
184#-----------------------------------------------------------------------
185# name
186
187test name-1.1 {get canonical name} {} {
188    cleanup
189
190    notebookdb create db -dbfile pages.dat
191    db set Home {}
192    list [db name home] [db name hOmE]
193} {Home Home}
194
195#-----------------------------------------------------------------------
196# pagetime
197
198test pagetime-1.1 {page time is current for new pages} {} {
199    cleanup
200
201    set t1 [clock seconds]
202    notebookdb create db -dbfile pages.dat
203    after 2000
204    db set Home {}
205    set t2 [db pagetime Home]
206
207    expr {$t1 <= $t2}
208} {1}
209
210test pagetime-1.2 {page time formats} {} {
211    cleanup
212
213    set d1 [clock format [clock seconds] -format "%D"]
214    notebookdb create db -dbfile pages.dat
215    db set Home {}
216    set d2 [db pagetime Home "%D"]
217
218    string equal $d1 $d2
219} {1}
220
221#-----------------------------------------------------------------------
222# prevpage/nextpage
223
224test prevnext-1.1 {get next page when there is one} {} {
225    cleanup
226
227    notebookdb create db -dbfile pages.dat
228    db set A ""
229    db set B ""
230    db nextpage A
231} {B}
232
233test prevnext-1.2 {get next page when there isn't one} {} {
234    cleanup
235
236    notebookdb create db -dbfile pages.dat
237    db set A ""
238    db nextpage A
239} {}
240
241test prevnext-1.3 {get prev page when there is one} {} {
242    cleanup
243
244    notebookdb create db -dbfile pages.dat
245    db set A ""
246    db set B ""
247    db prevpage B
248} {A}
249
250test prevnext-1.4 {get prev page when there isn't one} {} {
251    cleanup
252
253    notebookdb create db -dbfile pages.dat
254    db set A ""
255    db prevpage {A}
256} {}
257
258
259
260#-----------------------------------------------------------------------
261# pagesbytime
262
263test pagesbytime-1.1 {pagesbytime} {} {
264    cleanup
265
266    notebookdb create db -dbfile pages.dat
267    db set A foo
268    after 1000
269    db set B foo
270    after 1000
271    db set C foo
272    after 1000
273    db set D foo
274    after 1000
275    db set E foo
276
277    db pagesbytime
278} {E D C B A}
279
280#-----------------------------------------------------------------------
281# search
282
283test search-1.1 {searching: successful} {} {
284    cleanup
285
286    notebookdb create db -dbfile pages.dat
287    db set A {John Doe}
288    db set "John Jones" {}
289    db set C {Sue Jones}
290    db search John
291} {A {John Jones}}
292
293test search-1.2 {searching: unsuccessful} {} {
294    cleanup
295
296    notebookdb create db -dbfile pages.dat
297    db set A {John Doe}
298    db set "John Jones" {}
299    db set C {Sue Jones}
300    db search xyzzy
301} {}
302
303#-----------------------------------------------------------------------
304# destroy
305
306test destroy-1.1 {destroy gets rid of self} {} {
307    cleanup
308
309    notebookdb create db -dbfile pages.dat
310    set a [info commands "::db"]
311    db destroy
312    set b [info commands "::db"]
313
314    list $a $b
315} {::db {}}
316
317test destroy-1.2 {destroy gets rid of interpreter} {} {
318    cleanup
319
320    notebookdb create db -dbfile pages.dat
321    set a [info commands "::db.interp"]
322    db destroy
323    set b [info commands "::db.interp"]
324
325    list $a $b
326} {::db.interp {}}
327
328#-----------------------------------------------------------------------
329# save
330
331test save-1.1 {saving works} {} {
332    cleanup
333
334    notebookdb create db -dbfile pages.dat
335
336    db set Foo Bar
337    db save
338    db destroy
339
340    notebookdb create db -dbfile pages.dat
341    db get Foo
342} {Bar}
343
344
345#-----------------------------------------------------------------------
346# eval
347
348test eval-1.1 {eval evaluates} {} {
349    cleanup
350
351    notebookdb create db -dbfile pages.dat
352    db eval {expr {2 + 2}}
353} {4}
354
355test eval-1.2 {eval evaluates} {} {
356    cleanup
357
358    notebookdb create db -dbfile pages.dat
359    db eval expr {2 + 2}
360} {4}
361
362#-----------------------------------------------------------------------
363# alias
364
365test alias-1.1 {alias aliases} {} {
366    cleanup
367
368    proc procToAlias {value} {
369        return $value
370    }
371
372    notebookdb create db -dbfile pages.dat
373    db alias howdy procToAlias Howdy
374    db eval howdy
375} {Howdy}
376
377#-----------------------------------------------------------------------
378# expand
379
380test expand-1.1 {expand expands} {} {
381    cleanup
382
383    notebookdb create db -dbfile pages.dat
384    db expand {*[@expr 2 + 2@]*}
385} {*4*}
386
387#-----------------------------------------------------------------------
388# pageexpand
389
390test pageexpand-1.1 {pageexpand expands pages} {} {
391    cleanup
392
393    notebookdb create db -dbfile pages.dat
394    db set Foo {*[@expr 2 + 2@]*}
395    db pageexpand Foo
396} {*4*
397}
398
399#-----------------------------------------------------------------------
400# delete
401
402test delete-1.1 {delete page} {} {
403    cleanup
404
405    notebookdb create db -dbfile pages.dat
406    db set Home ""
407    set a [db exists Home]
408    db delete Home
409    set b [db exists Home]
410    list $a $b
411} {1 0}
412
413test delete-1.2 {can't delete locked page} {} {
414    cleanup
415
416    notebookdb create db -dbfile pages.dat
417    db set Home ""
418    db lock Home
419    set result {}
420    catch {db delete Home} result
421    set result
422} {Error, 'Home' is locked.}
423
424
425#-----------------------------------------------------------------------
426# rename
427
428test rename-1.1 {rename page} {} {
429    cleanup
430
431    notebookdb create db -dbfile pages.dat
432    db set Foo {*[Foo]*}
433    db set Bar {+[Foo]+}
434    db rename Foo Quux
435    list \
436        [db exists Foo] \
437        [db exists Quux] \
438        [string trim [db get Quux]] \
439        [string trim [db get Bar]]
440} {0 1 {*[Quux]*} {+[Quux]+}}
441
442test rename-1.2 {can't rename locked page} {} {
443    cleanup
444
445    notebookdb create db -dbfile pages.dat
446    db set Home ""
447    db lock Home
448
449    catch {db rename Home Office} result
450    set result
451} {Error, 'Home' is locked.}
452
453test rename-1.3 {can't rename nonexistent page} {} {
454    cleanup
455
456    notebookdb create db -dbfile pages.dat
457    set result {}
458    catch {db rename Office Study} result
459    set result
460} {Cannot rename 'Office'; no such page.}
461
462test rename-1.4 {can't rename to existing page} {} {
463    cleanup
464
465    notebookdb create db -dbfile pages.dat
466    db set Index ""
467    db set Home ""
468
469    catch {db rename Index Home} result
470    set result
471} {The name 'Home' is already in use.}
472
473#-----------------------------------------------------------------------
474# standard aliases
475
476test aliases-1.1 {pageexists} {} {
477    cleanup
478
479    notebookdb create db -dbfile pages.dat
480    db set Home ""
481    db eval pageexists Home
482} {1}
483
484test aliases-1.2 {pagename} {} {
485    cleanup
486
487    notebookdb create db -dbfile pages.dat
488    db set Home ""
489    db eval pagename hOmE
490} {Home}
491
492test aliases-1.3 {pageget} {} {
493    cleanup
494
495    notebookdb create db -dbfile pages.dat
496    db set Foo Bar
497    db eval pageget Foo
498} {Bar
499}
500
501test aliases-1.4 {expand} {} {
502    cleanup
503
504    notebookdb create db -dbfile pages.dat
505    db eval {expand {*[@expr 2 + 2@]*}}
506} {*4*}
507
508test aliases-1.5 {pageexpand} {} {
509    cleanup
510
511    notebookdb create db -dbfile pages.dat
512    db set Foo {*[@expr 2 + 2@]*}
513    db eval pageexpand Foo
514} {*4*
515}
516
517test aliases-1.6 {pages} {} {
518    cleanup
519
520    notebookdb create db -dbfile pages.dat
521    db set Home ""
522    db set Office ""
523    db eval pages
524} {Home Office}
525
526test aliases-1.7 {dbfile} {} {
527    cleanup
528
529    notebookdb create db -dbfile pages.dat
530    db eval dbfile
531} {pages.dat}
532
533test aliases-1.8 {existence of remaining aliases} {} {
534    cleanup
535
536    notebookdb create db -dbfile pages.dat
537
538    set aliases {pagesbytime pagetime pagesearch}
539 
540    set result {}
541
542    foreach alias $aliases {
543        lappend result [db eval info command $alias]
544    }
545
546    set result
547} {pagesbytime pagetime pagesearch}
548
549#-----------------------------------------------------------------------
550# notifycommand
551
552test notify-1.1 {notify on set} {} {
553    cleanup
554
555    notebookdb create db -dbfile pages.dat
556    db register Me Notify
557    db set Foo Bar
558
559    set notifyList
560} {set Foo}
561
562test notify-1.2 {notify on delete} {} {
563    cleanup
564
565    notebookdb create db -dbfile pages.dat
566    db register Me Notify
567    db set Foo Bar
568    db delete Foo
569
570    set notifyList
571} {set Foo delete Foo}
572
573test notify-1.3 {notify on rename to change case} {} {
574    cleanup
575
576    notebookdb create db -dbfile pages.dat
577    db register Me Notify
578    db set foo Bar
579    db rename foo Foo
580
581    set notifyList
582} {set foo set Foo}
583
584test notify-1.4 {notify on normal rename} {} {
585    cleanup
586
587    notebookdb create db -dbfile pages.dat
588    db register Me Notify
589    db set One xyz
590    db set Two {[One]}
591    db rename One Uno
592
593    set notifyList
594} {set One set Two set One set Two set Uno delete One}
595
596test notify-1.5 {register and unregister notify} {} {
597    cleanup
598
599    notebookdb create db -dbfile pages.dat
600    db register Me Notify
601    db set One xyz
602    db unregister Me
603    db delete One
604
605    set notifyList
606} {set One}
607
608test notify-1.6 {multiple observers} {} {
609    cleanup
610
611    notebookdb create db -dbfile pages.dat
612    db register Me Notify
613    db register You Notify
614    db set One xyz
615
616    set notifyList
617} {set One set One}
618
619
620#---------------------------------------------------------------------
621# Clean up
622
623cleanup
624
625::tcltest::cleanupTests
626return
627
628
629
Note: See TracBrowser for help on using the repository browser.