/
TClyGenerateTestClass.trait.st
78 lines (70 loc) · 2.12 KB
/
TClyGenerateTestClass.trait.st
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
"
Description
--------------------
I am a trait containing the behavior or retrieving the test class of a class.
If the test class does not exists I am able to generate it.
"
Trait {
#name : #TClyGenerateTestClass,
#category : #'Calypso-SystemPlugins-SUnit-Browser-Traits'
}
{ #category : #action }
TClyGenerateTestClass >> addNewCommentForTestClass: aClass basedOn: baseClass [
aClass
comment:
(String
streamContents: [ :stream |
| name |
name := aClass name.
name first isVowel
ifTrue: [ stream nextPutAll: 'An ' ]
ifFalse: [ stream nextPutAll: 'A ' ].
stream
nextPutAll: name;
nextPutAll: ' is a test class for testing the behavior of ';
nextPutAll: baseClass name ])
]
{ #category : #testing }
TClyGenerateTestClass >> isValidClass: inputClass [
^ (inputClass isTestCase or: [ inputClass isMeta ]) not
]
{ #category : #action }
TClyGenerateTestClass >> newTestClassCategoryFor: aClass [
| tag |
tag := aClass package classTagForClass: aClass.
^ String
streamContents: [ :s |
s
nextPutAll: aClass package name;
nextPutAll: '-Tests'.
tag isRoot
ifFalse: [ s
nextPut: $-;
nextPutAll: tag name ] ]
]
{ #category : #accessing }
TClyGenerateTestClass >> systemEnvironment [
^ self explicitRequirement
]
{ #category : #accessing }
TClyGenerateTestClass >> testClassFor: inputClass [
| className resultClass |
className := self testClassNameFor: inputClass.
self systemEnvironment
classNamed: className
ifPresent: [ :class | resultClass := class ]
ifAbsent: [
(self isValidClass: inputClass) ifFalse: [ ClyInvalidClassForTestClassGeneration signalFor: inputClass ].
self systemEnvironment ensureExistAndRegisterPackageNamed: inputClass package name asString , '-Tests'.
resultClass := TestCase
subclass: className
instanceVariableNames: ''
classVariableNames: ''
package: (self newTestClassCategoryFor: inputClass).
self addNewCommentForTestClass: resultClass basedOn: inputClass ].
^ resultClass
]
{ #category : #accessing }
TClyGenerateTestClass >> testClassNameFor: inputClass [
^ (inputClass name , 'Test') asSymbol
]