1
# stubs_container.test -*- tcl -*-
3
# $Id: stubs::container.test,v 1.8 2010/07/06 19:39:00 andreas_kupries Exp $
5
# -------------------------------------------------------------------------
8
[file dirname [file join [pwd] [info script]]] \
15
useLocal lib/util84/lassign.tcl lassign84
16
useLocal lib/util84/dict.tcl dict84
19
useLocal lib/stubs/container.tcl stubs::container
22
# -------------------------------------------------------------------------
25
test stubs-container-1.0 {new, wrong\#args} -setup {
27
stubs::container::new X
29
} -returnCodes error -result {wrong # args: should be "stubs::container::new"}
31
test stubs-container-1.1 {new} -setup {
32
set T [stubs::container::new]
34
lappend R [stubs::container::library? $T]
35
lappend R [stubs::container::interfaces $T]
36
lappend R [stubs::container::scspec? $T]
37
lappend R [stubs::container::epoch? $T]
38
lappend R [stubs::container::revision? $T]
42
} -result {UNKNOWN {} EXTERN {} 0}
44
# -------------------------------------------------------------------------
47
test stubs-container-2.0 {library, wrong\#args} -setup {
49
stubs::container::library
51
} -returnCodes error -result {wrong # args: should be "stubs::container::library tablevar name"}
53
test stubs-container-2.1 {library, wrong\#args} -setup {
55
stubs::container::library T
57
} -returnCodes error -result {wrong # args: should be "stubs::container::library tablevar name"}
59
test stubs-container-2.2 {library, wrong\#args} -setup {
61
stubs::container::library T x y
63
} -returnCodes error -result {wrong # args: should be "stubs::container::library tablevar name"}
65
test stubs-container-2.3 {library?, wrong\#args} -setup {
67
stubs::container::library?
69
} -returnCodes error -result {wrong # args: should be "stubs::container::library? table"}
71
test stubs-container-2.4 {library?, wrong\#args} -setup {
73
stubs::container::library? T X
75
} -returnCodes error -result {wrong # args: should be "stubs::container::library? table"}
77
test stubs-container-2.5 {library, set/get} -setup {
78
set T [stubs::container::new]
80
lappend R [stubs::container::library? $T]
81
stubs::container::library T TEST
82
lappend R [stubs::container::library? $T]
86
} -result {UNKNOWN TEST}
88
# -------------------------------------------------------------------------
91
test stubs-container-3.0 {scspec, wrong\#args} -setup {
93
stubs::container::scspec
95
} -returnCodes error -result {wrong # args: should be "stubs::container::scspec tablevar value"}
97
test stubs-container-3.1 {scspec, wrong\#args} -setup {
99
stubs::container::scspec T
101
} -returnCodes error -result {wrong # args: should be "stubs::container::scspec tablevar value"}
103
test stubs-container-3.2 {scspec, wrong\#args} -setup {
105
stubs::container::scspec T x y
107
} -returnCodes error -result {wrong # args: should be "stubs::container::scspec tablevar value"}
109
test stubs-container-3.3 {scspec?, wrong\#args} -setup {
111
stubs::container::scspec?
113
} -returnCodes error -result {wrong # args: should be "stubs::container::scspec? table"}
115
test stubs-container-3.4 {scspec?, wrong\#args} -setup {
117
stubs::container::scspec? T X
119
} -returnCodes error -result {wrong # args: should be "stubs::container::scspec? table"}
121
test stubs-container-3.5 {scspec, set/get} -setup {
122
set T [stubs::container::new]
124
lappend R [stubs::container::scspec? $T]
125
stubs::container::scspec T TEST
126
lappend R [stubs::container::scspec? $T]
130
} -result {EXTERN TEST}
132
# -------------------------------------------------------------------------
135
test stubs-container-4.0 {epoch, wrong\#args} -setup {
137
stubs::container::epoch
139
} -returnCodes error -result {wrong # args: should be "stubs::container::epoch tablevar value"}
141
test stubs-container-4.1 {epoch, wrong\#args} -setup {
143
stubs::container::epoch T
145
} -returnCodes error -result {wrong # args: should be "stubs::container::epoch tablevar value"}
147
test stubs-container-4.2 {epoch, wrong\#args} -setup {
149
stubs::container::epoch T x y
151
} -returnCodes error -result {wrong # args: should be "stubs::container::epoch tablevar value"}
153
test stubs-container-4.3 {epoch?, wrong\#args} -setup {
155
stubs::container::epoch?
157
} -returnCodes error -result {wrong # args: should be "stubs::container::epoch? table"}
159
test stubs-container-4.4 {epoch?, wrong\#args} -setup {
161
stubs::container::epoch? T X
163
} -returnCodes error -result {wrong # args: should be "stubs::container::epoch? table"}
165
test stubs-container-4.5 {epoch, set/get, bad value, not integer} -setup {
166
set T [stubs::container::new]
168
stubs::container::epoch T TEST
171
} -returnCodes error -result {Expected integer for epoch, but got "TEST"}
173
test stubs-container-4.6 {epoch, set/get} -setup {
174
set T [stubs::container::new]
176
lappend R [stubs::container::epoch? $T]
177
stubs::container::epoch T 42
178
lappend R [stubs::container::epoch? $T]
184
# -------------------------------------------------------------------------
185
# interface, interfaces
187
test stubs-container-5.0 {interface, wrong\#args} -setup {
189
stubs::container::interface
191
} -returnCodes error -result {wrong # args: should be "stubs::container::interface tablevar name"}
193
test stubs-container-5.1 {interface, wrong\#args} -setup {
195
stubs::container::interface T
197
} -returnCodes error -result {wrong # args: should be "stubs::container::interface tablevar name"}
199
test stubs-container-5.2 {interface, wrong\#args} -setup {
201
stubs::container::interface T x y
203
} -returnCodes error -result {wrong # args: should be "stubs::container::interface tablevar name"}
205
test stubs-container-5.3 {interfaces, wrong\#args} -setup {
207
stubs::container::interfaces
209
} -returnCodes error -result {wrong # args: should be "stubs::container::interfaces table"}
211
test stubs-container-5.4 {interfaces, wrong\#args} -setup {
213
stubs::container::interfaces T X
215
} -returnCodes error -result {wrong # args: should be "stubs::container::interfaces table"}
217
test stubs-container-5.5 {interface(s), set/get} -setup {
218
set T [stubs::container::new]
220
lappend R [stubs::container::interfaces $T]
221
stubs::container::interface T TEST
222
lappend R [stubs::container::interfaces $T]
223
stubs::container::interface T FOO
224
lappend R [stubs::container::interfaces $T]
228
} -result {{} TEST {TEST FOO}}
230
test stubs-container-5.6 {interface, duplicate declaration} -setup {
231
set T [stubs::container::new]
232
stubs::container::interface T A
234
stubs::container::interface T A
237
} -returnCodes error -result {Duplicate declaration of interface "A"}
239
# -------------------------------------------------------------------------
240
# hooks, hooks?, hooksof
242
test stubs-container-6.0 {hooks, wrong\#args} -setup {
244
stubs::container::hooks
246
} -returnCodes error -result {wrong # args: should be "stubs::container::hooks tablevar interface names"}
248
test stubs-container-6.1 {hooks, wrong\#args} -setup {
250
stubs::container::hooks T
252
} -returnCodes error -result {wrong # args: should be "stubs::container::hooks tablevar interface names"}
254
test stubs-container-6.2 {hooks, wrong\#args} -setup {
256
stubs::container::hooks T x
258
} -returnCodes error -result {wrong # args: should be "stubs::container::hooks tablevar interface names"}
260
test stubs-container-6.3 {hooks, wrong\#args} -setup {
262
stubs::container::hooks T x y z
264
} -returnCodes error -result {wrong # args: should be "stubs::container::hooks tablevar interface names"}
266
test stubs-container-6.4 {hooksof, wrong\#args} -setup {
268
stubs::container::hooksof
270
} -returnCodes error -result {wrong # args: should be "stubs::container::hooksof table interface"}
272
test stubs-container-6.5 {hooksof, wrong\#args} -setup {
274
stubs::container::hooksof T
276
} -returnCodes error -result {wrong # args: should be "stubs::container::hooksof table interface"}
278
test stubs-container-6.6 {hooksof, wrong\#args} -setup {
280
stubs::container::hooksof T x y
282
} -returnCodes error -result {wrong # args: should be "stubs::container::hooksof table interface"}
284
test stubs-container-6.7 {hooks?, wrong\#args} -setup {
286
stubs::container::hooks?
288
} -returnCodes error -result {wrong # args: should be "stubs::container::hooks? table interface"}
290
test stubs-container-6.8 {hooks?, wrong\#args} -setup {
292
stubs::container::hooks? T
294
} -returnCodes error -result {wrong # args: should be "stubs::container::hooks? table interface"}
296
test stubs-container-6.9 {hooks?, wrong\#args} -setup {
298
stubs::container::hooks? T x y
300
} -returnCodes error -result {wrong # args: should be "stubs::container::hooks? table interface"}
302
test stubs-container-6.10 {hooks, hooksof, hooks?, set/get} -setup {
303
set T [stubs::container::new]
304
stubs::container::interface T A
305
stubs::container::interface T B
306
stubs::container::hooks T A {B C}
308
lappend R [stubs::container::hooks? $T A]
309
lappend R [stubs::container::hooks? $T B]
310
lappend R [stubs::container::hooksof $T A]
311
lappend R [stubs::container::hooksof $T B]
315
} -result {1 0 {B C} {}}
317
test stubs-container-6.11 {hooksof, unknown interface} -setup {
318
set T [stubs::container::new]
320
stubs::container::hooksof $T A
323
} -returnCodes error -result {Unknown interface "A"}
325
test stubs-container-6.12 {hooks?, unknown interface} -setup {
326
set T [stubs::container::new]
328
stubs::container::hooks? $T A
331
} -returnCodes error -result {Unknown interface "A"}
333
# -------------------------------------------------------------------------
336
test stubs-container-7.0 {platforms, wrong\#args} -setup {
338
stubs::container::platforms
340
} -returnCodes error -result {wrong # args: should be "stubs::container::platforms table interface"}
342
test stubs-container-7.1 {platforms, wrong\#args} -setup {
344
stubs::container::platforms T
346
} -returnCodes error -result {wrong # args: should be "stubs::container::platforms table interface"}
348
test stubs-container-7.2 {platforms, wrong\#args} -setup {
350
stubs::container::platforms T x y
352
} -returnCodes error -result {wrong # args: should be "stubs::container::platforms table interface"}
354
test stubs-container-7.3 {platforms} -setup {
355
set T [stubs::container::new]
356
stubs::container::interface T A
357
stubs::container::interface T B
358
stubs::container::declare T B 5 generic _foo_
360
lappend R [stubs::container::platforms $T A]
361
lappend R [stubs::container::platforms $T B]
365
} -result {{} generic}
367
test stubs-container-7.4 {platforms, unknown interface} -setup {
368
set T [stubs::container::new]
370
stubs::container::platforms $T A
373
} -returnCodes error -result {Unknown interface "A"}
375
# -------------------------------------------------------------------------
378
test stubs-container-8.0 {lastof, wrong\#args} -setup {
380
stubs::container::lastof
382
} -returnCodes error -result {wrong # args: should be "stubs::container::lastof table interface ?platform?"}
384
test stubs-container-8.1 {lastof, wrong\#args} -setup {
386
stubs::container::lastof T
388
} -returnCodes error -result {wrong # args: should be "stubs::container::lastof table interface ?platform?"}
390
test stubs-container-8.2 {lastof, wrong\#args} -setup {
392
stubs::container::lastof T x y z a
394
} -returnCodes error -result {wrong # args: should be "stubs::container::lastof table interface ?platform?"}
396
test stubs-container-8.3 {lastof, all} -setup {
397
set T [stubs::container::new]
398
stubs::container::interface T A
399
stubs::container::interface T B
400
stubs::container::declare T B 5 generic _foo_
402
lappend R [stubs::container::lastof $T A] ; # note empty list!
403
lappend R [stubs::container::lastof $T B] ; # note single element list!
409
test stubs-container-8.3.1 {lastof, all} -setup {
410
set T [stubs::container::new]
411
stubs::container::interface T A
412
stubs::container::interface T B
413
stubs::container::declare T B 5 generic _bogus_
414
stubs::container::declare T B 7 aqua _bogus_
416
lappend R [stubs::container::lastof $T A] ; # note empty list!
417
lappend R [lsort -dict [stubs::container::lastof $T B]] ; # note list!
423
test stubs-container-8.4 {lastof, by platform} -setup {
424
set T [stubs::container::new]
425
stubs::container::interface T A
426
stubs::container::interface T B
427
stubs::container::declare T B 5 generic _foo_
429
lappend R [stubs::container::lastof $T A generic]
430
lappend R [stubs::container::lastof $T B generic]
436
test stubs-container-8.5 {lastof, unknown interface} -setup {
437
set T [stubs::container::new]
439
stubs::container::lastof $T A
442
} -returnCodes error -result {Unknown interface "A"}
444
# -------------------------------------------------------------------------
447
test stubs-container-9.0 {slot?, wrong\#args} -setup {
449
stubs::container::slot?
451
} -returnCodes error -result {wrong # args: should be "stubs::container::slot? table interface platform at"}
453
test stubs-container-9.1 {slot?, wrong\#args} -setup {
455
stubs::container::slot? T
457
} -returnCodes error -result {wrong # args: should be "stubs::container::slot? table interface platform at"}
459
test stubs-container-9.2 {slot?, wrong\#args} -setup {
461
stubs::container::slot? T x
463
} -returnCodes error -result {wrong # args: should be "stubs::container::slot? table interface platform at"}
465
test stubs-container-9.3 {slot?, wrong\#args} -setup {
467
stubs::container::slot? T x y
469
} -returnCodes error -result {wrong # args: should be "stubs::container::slot? table interface platform at"}
471
test stubs-container-9.4 {slot?, wrong\#args} -setup {
473
stubs::container::slot? T x y z a
475
} -returnCodes error -result {wrong # args: should be "stubs::container::slot? table interface platform at"}
477
test stubs-container-9.5 {slot?, unknown interface} -setup {
478
set T [stubs::container::new]
480
stubs::container::slot? $T A y z
483
} -returnCodes error -result {Unknown interface "A"}
485
test stubs-container-9.6 {slot?, unknown platform, slot} -setup {
486
set T [stubs::container::new]
487
stubs::container::interface T A
489
stubs::container::slot? $T A y z
494
test stubs-container-9.7 {slot?} -setup {
495
set T [stubs::container::new]
496
stubs::container::interface T A
497
stubs::container::declare T A 5 generic _foo_
499
stubs::container::slot? $T A generic 5
504
# -------------------------------------------------------------------------
507
test stubs-container-10.0 {slot, wrong\#args} -setup {
509
stubs::container::slot
511
} -returnCodes error -result {wrong # args: should be "stubs::container::slot table interface platform at"}
513
test stubs-container-10.1 {slot, wrong\#args} -setup {
515
stubs::container::slot T
517
} -returnCodes error -result {wrong # args: should be "stubs::container::slot table interface platform at"}
519
test stubs-container-10.2 {slot, wrong\#args} -setup {
521
stubs::container::slot T x
523
} -returnCodes error -result {wrong # args: should be "stubs::container::slot table interface platform at"}
525
test stubs-container-10.3 {slot, wrong\#args} -setup {
527
stubs::container::slot T x y
529
} -returnCodes error -result {wrong # args: should be "stubs::container::slot table interface platform at"}
531
test stubs-container-10.4 {slot, wrong\#args} -setup {
533
stubs::container::slot T x y z a
535
} -returnCodes error -result {wrong # args: should be "stubs::container::slot table interface platform at"}
537
test stubs-container-10.5 {slot, unknown interface} -setup {
538
set T [stubs::container::new]
540
stubs::container::slot $T A y z
543
} -returnCodes error -result {Unknown interface "A"}
545
test stubs-container-10.6 {slot, unknown platform, slot} -setup {
546
set T [stubs::container::new]
547
stubs::container::interface T A
549
stubs::container::slot $T A y z
552
} -returnCodes error -result {Unknown slot "y,z"}
554
test stubs-container-10.7 {slot} -setup {
555
set T [stubs::container::new]
556
stubs::container::interface T A
557
stubs::container::declare T A 5 generic _foo_
559
stubs::container::slot $T A generic 5
564
# -------------------------------------------------------------------------
567
test stubs-container-11.0 {slotplatforms, wrong\#args} -setup {
569
stubs::container::slotplatforms
571
} -returnCodes error -result {wrong # args: should be "stubs::container::slotplatforms table interface at"}
573
test stubs-container-11.1 {slotplatforms, wrong\#args} -setup {
575
stubs::container::slotplatforms T
577
} -returnCodes error -result {wrong # args: should be "stubs::container::slotplatforms table interface at"}
579
test stubs-container-11.2 {slotplatforms, wrong\#args} -setup {
581
stubs::container::slotplatforms T x
583
} -returnCodes error -result {wrong # args: should be "stubs::container::slotplatforms table interface at"}
585
test stubs-container-11.3 {slotplatforms, wrong\#args} -setup {
587
stubs::container::slotplatforms T x y a
589
} -returnCodes error -result {wrong # args: should be "stubs::container::slotplatforms table interface at"}
591
test stubs-container-11.4 {slotplatforms, unknown interface} -setup {
592
set T [stubs::container::new]
594
stubs::container::slotplatforms $T A y
597
} -returnCodes error -result {Unknown interface "A"}
599
test stubs-container-11.5 {slotplatforms, unknown slot} -setup {
600
set T [stubs::container::new]
601
stubs::container::interface T A
602
stubs::container::declare T A 5 generic _foo_
604
stubs::container::slotplatforms $T A 4
609
test stubs-container-11.6 {slotplatforms} -setup {
610
set T [stubs::container::new]
611
stubs::container::interface T A
612
stubs::container::declare T A 5 generic _foo_
614
stubs::container::slotplatforms $T A 5
619
# -------------------------------------------------------------------------
620
## Representation overview, basics.
622
test stubs-container-12.0 {print, wrong\#args} -setup {
624
stubs::container::print
626
} -returnCodes error -result {wrong # args: should be "stubs::container::print table"}
628
test stubs-container-12.1 {print, wrong\#args} -setup {
630
stubs::container::print T x
632
} -returnCodes error -result {wrong # args: should be "stubs::container::print table"}
634
test stubs-container-12.2 {print, empty} -setup {
635
set T [stubs::container::new]
637
stubs::container::print $T
640
} -result {stubs UNKNOWN {
646
test stubs-container-12.3 {print, global settings} -setup {
647
set T [stubs::container::new]
648
stubs::container::library T TEST
649
stubs::container::scspec T ZEXTERN
650
stubs::container::epoch T 1
652
stubs::container::print $T
655
} -result {stubs TEST {
661
test stubs-container-12.4 {print, interface} -setup {
662
set T [stubs::container::new]
663
stubs::container::library T TEST
664
stubs::container::scspec T ZEXTERN
665
stubs::container::epoch T 1
666
stubs::container::interface T A
668
stubs::container::print $T
671
} -result {stubs TEST {
680
test stubs-container-12.5 {print, interface with hooks} -setup {
681
set T [stubs::container::new]
682
stubs::container::library T TEST
683
stubs::container::scspec T ZEXTERN
684
stubs::container::epoch T 1
685
stubs::container::interface T A
686
stubs::container::interface T B
687
stubs::container::interface T C
688
stubs::container::hooks T A {B C}
690
stubs::container::print $T
693
} -result {stubs TEST {
708
test stubs-container-12.6 {print, declarations} -setup {
709
set T [stubs::container::new]
710
stubs::container::library T TEST
711
stubs::container::scspec T ZEXTERN
712
stubs::container::epoch T 1
713
stubs::container::interface T A
714
stubs::container::declare T A 5 generic _bar_
715
stubs::container::declare T A 5 {x11 aqua} _foo_
717
stubs::container::print $T
720
} -result {stubs TEST {
730
declare 5 {aqua x11} {
737
# -------------------------------------------------------------------------
743
# indent-tabs-mode: nil