TestSuite.st
author boris
Thu, 31 Aug 2006 11:23:00 +0200
changeset 137 b6e0d451b091
parent 122 61e456491017
child 140 d61c515f8a58
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
9365d5753f11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"{ Package: 'stx:goodies/sunit' }"
9365d5753f11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
9365d5753f11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
Object subclass:#TestSuite
103
ad6897ce99e0 Merge SUnit 3.1 changes
Stefan Vogel <sv@exept.de>
parents: 94
diff changeset
     4
	instanceVariableNames:'tests resources name'
0
9365d5753f11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
	classVariableNames:''
9365d5753f11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
	poolDictionaries:''
6
78bb1397e43d added rerun-defect tests; fixed button enable bug
Claus Gittinger <cg@exept.de>
parents: 0
diff changeset
     7
	category:'SUnit-Base'
0
9365d5753f11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
!
9365d5753f11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
103
ad6897ce99e0 Merge SUnit 3.1 changes
Stefan Vogel <sv@exept.de>
parents: 94
diff changeset
    10
TestSuite comment:'This is a Composite of Tests, either TestCases or other TestSuites. The common protocol is #run: aTestResult and the dependencies protocol'
ad6897ce99e0 Merge SUnit 3.1 changes
Stefan Vogel <sv@exept.de>
parents: 94
diff changeset
    11
!
14
a4a5478621e3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6
diff changeset
    12
103
ad6897ce99e0 Merge SUnit 3.1 changes
Stefan Vogel <sv@exept.de>
parents: 94
diff changeset
    13
ad6897ce99e0 Merge SUnit 3.1 changes
Stefan Vogel <sv@exept.de>
parents: 94
diff changeset
    14
!TestSuite class methodsFor:'Creation'!
56
Claus Gittinger <cg@exept.de>
parents: 49
diff changeset
    15
Claus Gittinger <cg@exept.de>
parents: 49
diff changeset
    16
named: aString
103
ad6897ce99e0 Merge SUnit 3.1 changes
Stefan Vogel <sv@exept.de>
parents: 94
diff changeset
    17
ad6897ce99e0 Merge SUnit 3.1 changes
Stefan Vogel <sv@exept.de>
parents: 94
diff changeset
    18
	^self new
ad6897ce99e0 Merge SUnit 3.1 changes
Stefan Vogel <sv@exept.de>
parents: 94
diff changeset
    19
		name: aString;
ad6897ce99e0 Merge SUnit 3.1 changes
Stefan Vogel <sv@exept.de>
parents: 94
diff changeset
    20
		yourself
ad6897ce99e0 Merge SUnit 3.1 changes
Stefan Vogel <sv@exept.de>
parents: 94
diff changeset
    21
			
56
Claus Gittinger <cg@exept.de>
parents: 49
diff changeset
    22
! !
Claus Gittinger <cg@exept.de>
parents: 49
diff changeset
    23
68
9fd111438d60 category renames (lower case)
Claus Gittinger <cg@exept.de>
parents: 62
diff changeset
    24
!TestSuite methodsFor:'accessing'!
0
9365d5753f11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
9365d5753f11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
addTest: aTest
6
78bb1397e43d added rerun-defect tests; fixed button enable bug
Claus Gittinger <cg@exept.de>
parents: 0
diff changeset
    27
	self tests add: aTest
103
ad6897ce99e0 Merge SUnit 3.1 changes
Stefan Vogel <sv@exept.de>
parents: 94
diff changeset
    28
			
6
78bb1397e43d added rerun-defect tests; fixed button enable bug
Claus Gittinger <cg@exept.de>
parents: 0
diff changeset
    29
!
0
9365d5753f11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
9365d5753f11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
addTests: aCollection 
6
78bb1397e43d added rerun-defect tests; fixed button enable bug
Claus Gittinger <cg@exept.de>
parents: 0
diff changeset
    32
	aCollection do: [:eachTest | self addTest: eachTest]
103
ad6897ce99e0 Merge SUnit 3.1 changes
Stefan Vogel <sv@exept.de>
parents: 94
diff changeset
    33
			
6
78bb1397e43d added rerun-defect tests; fixed button enable bug
Claus Gittinger <cg@exept.de>
parents: 0
diff changeset
    34
!
0
9365d5753f11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
47
7ea89e89bad3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    36
defaultResources
7ea89e89bad3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    37
	^self tests 
7ea89e89bad3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    38
		inject: Set new
103
ad6897ce99e0 Merge SUnit 3.1 changes
Stefan Vogel <sv@exept.de>
parents: 94
diff changeset
    39
		into: [:coll :testCase | 
47
7ea89e89bad3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    40
			coll
7ea89e89bad3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    41
				addAll: testCase resources;
7ea89e89bad3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    42
				yourself]
103
ad6897ce99e0 Merge SUnit 3.1 changes
Stefan Vogel <sv@exept.de>
parents: 94
diff changeset
    43
			
47
7ea89e89bad3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    44
!
7ea89e89bad3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    45
37
6da5b7e8e3ab better update (name)
Claus Gittinger <cg@exept.de>
parents: 32
diff changeset
    46
name
103
ad6897ce99e0 Merge SUnit 3.1 changes
Stefan Vogel <sv@exept.de>
parents: 94
diff changeset
    47
37
6da5b7e8e3ab better update (name)
Claus Gittinger <cg@exept.de>
parents: 32
diff changeset
    48
        ^ name ? 'a TestSuite'.
6da5b7e8e3ab better update (name)
Claus Gittinger <cg@exept.de>
parents: 32
diff changeset
    49
!
6da5b7e8e3ab better update (name)
Claus Gittinger <cg@exept.de>
parents: 32
diff changeset
    50
103
ad6897ce99e0 Merge SUnit 3.1 changes
Stefan Vogel <sv@exept.de>
parents: 94
diff changeset
    51
name: aString
ad6897ce99e0 Merge SUnit 3.1 changes
Stefan Vogel <sv@exept.de>
parents: 94
diff changeset
    52
ad6897ce99e0 Merge SUnit 3.1 changes
Stefan Vogel <sv@exept.de>
parents: 94
diff changeset
    53
	name := aString
ad6897ce99e0 Merge SUnit 3.1 changes
Stefan Vogel <sv@exept.de>
parents: 94
diff changeset
    54
			
37
6da5b7e8e3ab better update (name)
Claus Gittinger <cg@exept.de>
parents: 32
diff changeset
    55
!
6da5b7e8e3ab better update (name)
Claus Gittinger <cg@exept.de>
parents: 32
diff changeset
    56
137
b6e0d451b091 *** empty log message ***
boris
parents: 122
diff changeset
    57
nameOfTest
b6e0d451b091 *** empty log message ***
boris
parents: 122
diff changeset
    58
    ^ self name
b6e0d451b091 *** empty log message ***
boris
parents: 122
diff changeset
    59
!
b6e0d451b091 *** empty log message ***
boris
parents: 122
diff changeset
    60
47
7ea89e89bad3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    61
resources
7ea89e89bad3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    62
	resources isNil ifTrue: [resources := self defaultResources].
7ea89e89bad3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    63
	^resources
103
ad6897ce99e0 Merge SUnit 3.1 changes
Stefan Vogel <sv@exept.de>
parents: 94
diff changeset
    64
			
47
7ea89e89bad3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    65
!
7ea89e89bad3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    66
7ea89e89bad3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    67
resources: anObject
7ea89e89bad3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    68
	resources := anObject
103
ad6897ce99e0 Merge SUnit 3.1 changes
Stefan Vogel <sv@exept.de>
parents: 94
diff changeset
    69
			
47
7ea89e89bad3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    70
!
7ea89e89bad3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    71
0
9365d5753f11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
tests
9365d5753f11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
	tests isNil ifTrue: [tests := OrderedCollection new].
6
78bb1397e43d added rerun-defect tests; fixed button enable bug
Claus Gittinger <cg@exept.de>
parents: 0
diff changeset
    74
	^tests
103
ad6897ce99e0 Merge SUnit 3.1 changes
Stefan Vogel <sv@exept.de>
parents: 94
diff changeset
    75
			
6
78bb1397e43d added rerun-defect tests; fixed button enable bug
Claus Gittinger <cg@exept.de>
parents: 0
diff changeset
    76
! !
0
9365d5753f11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
68
9fd111438d60 category renames (lower case)
Claus Gittinger <cg@exept.de>
parents: 62
diff changeset
    78
!TestSuite methodsFor:'dependencies'!
0
9365d5753f11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
9365d5753f11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
addDependentToHierachy: anObject
32
77f76ea3a7ef *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14
diff changeset
    81
        self addDependent: anObject.
103
ad6897ce99e0 Merge SUnit 3.1 changes
Stefan Vogel <sv@exept.de>
parents: 94
diff changeset
    82
        self tests do: [ :each | each addDependentToHierachy: anObject]
0
9365d5753f11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
!
9365d5753f11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
9365d5753f11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
removeDependentFromHierachy: anObject
32
77f76ea3a7ef *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14
diff changeset
    86
        self removeDependent: anObject.
103
ad6897ce99e0 Merge SUnit 3.1 changes
Stefan Vogel <sv@exept.de>
parents: 94
diff changeset
    87
        self tests do: [ :each | each removeDependentFromHierachy: anObject]
0
9365d5753f11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
! !
9365d5753f11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
122
61e456491017 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 103
diff changeset
    90
!TestSuite methodsFor:'queries'!
61e456491017 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 103
diff changeset
    91
61e456491017 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 103
diff changeset
    92
isTestCase
61e456491017 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 103
diff changeset
    93
    ^ false
61e456491017 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 103
diff changeset
    94
!
61e456491017 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 103
diff changeset
    95
61e456491017 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 103
diff changeset
    96
isTestSuite
61e456491017 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 103
diff changeset
    97
    ^ true
61e456491017 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 103
diff changeset
    98
! !
61e456491017 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 103
diff changeset
    99
68
9fd111438d60 category renames (lower case)
Claus Gittinger <cg@exept.de>
parents: 62
diff changeset
   100
!TestSuite methodsFor:'running'!
0
9365d5753f11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
9365d5753f11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
run
49
91ba780c656f resource allocation from 3.0
Claus Gittinger <cg@exept.de>
parents: 47
diff changeset
   103
        | result |
103
ad6897ce99e0 Merge SUnit 3.1 changes
Stefan Vogel <sv@exept.de>
parents: 94
diff changeset
   104
ad6897ce99e0 Merge SUnit 3.1 changes
Stefan Vogel <sv@exept.de>
parents: 94
diff changeset
   105
        self signalUnavailableResources.
ad6897ce99e0 Merge SUnit 3.1 changes
Stefan Vogel <sv@exept.de>
parents: 94
diff changeset
   106
49
91ba780c656f resource allocation from 3.0
Claus Gittinger <cg@exept.de>
parents: 47
diff changeset
   107
        result := TestResult new.
91ba780c656f resource allocation from 3.0
Claus Gittinger <cg@exept.de>
parents: 47
diff changeset
   108
        [self run: result] ensure: [self resources do: [:each | each reset]].
91ba780c656f resource allocation from 3.0
Claus Gittinger <cg@exept.de>
parents: 47
diff changeset
   109
        ^result
6
78bb1397e43d added rerun-defect tests; fixed button enable bug
Claus Gittinger <cg@exept.de>
parents: 0
diff changeset
   110
!
0
9365d5753f11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
9365d5753f11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
run: aResult 
103
ad6897ce99e0 Merge SUnit 3.1 changes
Stefan Vogel <sv@exept.de>
parents: 94
diff changeset
   113
        self tests do: [:each | 
32
77f76ea3a7ef *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14
diff changeset
   114
                self changed: each.
77f76ea3a7ef *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 14
diff changeset
   115
                each run: aResult]
40
b27893ae4b99 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 37
diff changeset
   116
!
b27893ae4b99 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 37
diff changeset
   117
b27893ae4b99 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 37
diff changeset
   118
run: aResult afterEachDo:block2
b27893ae4b99 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 37
diff changeset
   119
        self tests do: 
b27893ae4b99 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 37
diff changeset
   120
                [:each | 
b27893ae4b99 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 37
diff changeset
   121
                self changed: each.
122
61e456491017 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 103
diff changeset
   122
                each run: aResult afterEachDo:block2.
61e456491017 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 103
diff changeset
   123
"/                block2 value:each value:aResult
40
b27893ae4b99 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 37
diff changeset
   124
                ]
b27893ae4b99 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 37
diff changeset
   125
b27893ae4b99 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 37
diff changeset
   126
    "Modified: / 21.6.2000 / 10:14:01 / Sames"
62
a6dbf54a4242 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 56
diff changeset
   127
!
a6dbf54a4242 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 56
diff changeset
   128
a6dbf54a4242 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 56
diff changeset
   129
run: aResult beforeEachDo:block1 afterEachDo:block2
a6dbf54a4242 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 56
diff changeset
   130
        self tests do: 
a6dbf54a4242 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 56
diff changeset
   131
                [:each | 
a6dbf54a4242 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 56
diff changeset
   132
                self changed: each.
a6dbf54a4242 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 56
diff changeset
   133
                block1 value:each value:aResult.
a6dbf54a4242 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 56
diff changeset
   134
                each run: aResult beforeEachDo:block1 afterEachDo:block2.
a6dbf54a4242 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 56
diff changeset
   135
                "/ each run: aResult.
a6dbf54a4242 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 56
diff changeset
   136
                block2 value:each value:aResult.
a6dbf54a4242 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 56
diff changeset
   137
                ]
122
61e456491017 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 103
diff changeset
   138
!
61e456491017 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 103
diff changeset
   139
61e456491017 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 103
diff changeset
   140
run: aResult beforeEachTestCaseDo:block1 afterEachTestCaseDo:block2
61e456491017 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 103
diff changeset
   141
        self tests do: 
61e456491017 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 103
diff changeset
   142
                [:each | 
61e456491017 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 103
diff changeset
   143
                self changed: each.
61e456491017 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 103
diff changeset
   144
                each run: aResult beforeEachTestCaseDo:block1 afterEachTestCaseDo:block2.
61e456491017 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 103
diff changeset
   145
                ]
0
9365d5753f11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   146
! !
9365d5753f11 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   147
68
9fd111438d60 category renames (lower case)
Claus Gittinger <cg@exept.de>
parents: 62
diff changeset
   148
!TestSuite methodsFor:'testing'!
49
91ba780c656f resource allocation from 3.0
Claus Gittinger <cg@exept.de>
parents: 47
diff changeset
   149
91ba780c656f resource allocation from 3.0
Claus Gittinger <cg@exept.de>
parents: 47
diff changeset
   150
areAllResourcesAvailable
91ba780c656f resource allocation from 3.0
Claus Gittinger <cg@exept.de>
parents: 47
diff changeset
   151
	^self resources 
91ba780c656f resource allocation from 3.0
Claus Gittinger <cg@exept.de>
parents: 47
diff changeset
   152
		inject: true
91ba780c656f resource allocation from 3.0
Claus Gittinger <cg@exept.de>
parents: 47
diff changeset
   153
		into: [:total :each | each isAvailable & total]
103
ad6897ce99e0 Merge SUnit 3.1 changes
Stefan Vogel <sv@exept.de>
parents: 94
diff changeset
   154
!
ad6897ce99e0 Merge SUnit 3.1 changes
Stefan Vogel <sv@exept.de>
parents: 94
diff changeset
   155
ad6897ce99e0 Merge SUnit 3.1 changes
Stefan Vogel <sv@exept.de>
parents: 94
diff changeset
   156
signalUnavailableResources
ad6897ce99e0 Merge SUnit 3.1 changes
Stefan Vogel <sv@exept.de>
parents: 94
diff changeset
   157
ad6897ce99e0 Merge SUnit 3.1 changes
Stefan Vogel <sv@exept.de>
parents: 94
diff changeset
   158
    self resources do:[:res | 
ad6897ce99e0 Merge SUnit 3.1 changes
Stefan Vogel <sv@exept.de>
parents: 94
diff changeset
   159
        res isAvailable ifFalse:[
ad6897ce99e0 Merge SUnit 3.1 changes
Stefan Vogel <sv@exept.de>
parents: 94
diff changeset
   160
            ^ res signalInitializationError
ad6897ce99e0 Merge SUnit 3.1 changes
Stefan Vogel <sv@exept.de>
parents: 94
diff changeset
   161
        ]
ad6897ce99e0 Merge SUnit 3.1 changes
Stefan Vogel <sv@exept.de>
parents: 94
diff changeset
   162
    ].
49
91ba780c656f resource allocation from 3.0
Claus Gittinger <cg@exept.de>
parents: 47
diff changeset
   163
! !
91ba780c656f resource allocation from 3.0
Claus Gittinger <cg@exept.de>
parents: 47
diff changeset
   164
14
a4a5478621e3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6
diff changeset
   165
!TestSuite class methodsFor:'documentation'!
a4a5478621e3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6
diff changeset
   166
a4a5478621e3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6
diff changeset
   167
version
137
b6e0d451b091 *** empty log message ***
boris
parents: 122
diff changeset
   168
    ^ '$Header: /cvs/stx/stx/goodies/sunit/TestSuite.st,v 1.15 2006-08-31 09:23:00 boris Exp $'
14
a4a5478621e3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6
diff changeset
   169
! !