|
1 "{ Package: 'stx:goodies/monticello' }" |
|
2 |
|
3 MCTestCase subclass:#MCClassDefinitionTest |
|
4 instanceVariableNames:'previousChangeSet' |
|
5 classVariableNames:'' |
|
6 poolDictionaries:'' |
|
7 category:'Monticello-Tests' |
|
8 ! |
|
9 |
|
10 |
|
11 !MCClassDefinitionTest class methodsFor:'as yet unclassified'! |
|
12 |
|
13 classAComment |
|
14 ^ 'This is a mock class. The Monticello tests manipulated it to simulate a developer modifying code in the image.' |
|
15 ! |
|
16 |
|
17 classACommentStamp |
|
18 ^ 'cwp 8/10/2003 16:43' |
|
19 ! |
|
20 |
|
21 restoreClassAComment |
|
22 Smalltalk |
|
23 at: #MCMockClassA |
|
24 ifPresent: [:a | a classComment: self classAComment stamp: self classACommentStamp] |
|
25 ! ! |
|
26 |
|
27 !MCClassDefinitionTest methodsFor:'as yet unclassified'! |
|
28 |
|
29 classAComment |
|
30 ^ self class classAComment |
|
31 ! |
|
32 |
|
33 creationMessage |
|
34 ^ MessageSend |
|
35 receiver: MCClassDefinition |
|
36 selector: #name:superclassName:category:instVarNames:classVarNames:poolDictionaryNames:classInstVarNames:type:comment:commentStamp: |
|
37 ! |
|
38 |
|
39 tearDown |
|
40 Smalltalk at: #'MCMockClassC' ifPresent: [:c | c removeFromSystem] |
|
41 |
|
42 "Modified: / 09-09-2010 / 15:23:10 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
43 ! |
|
44 |
|
45 testCannotLoad |
|
46 | d | |
|
47 d := self mockClass: 'MCMockClassC' super: 'NotAnObject'. |
|
48 self should: [d load] raise: Error. |
|
49 self deny: (Smalltalk hasClassNamed: 'MCMockClassC'). |
|
50 ! |
|
51 |
|
52 testComparison |
|
53 | d1 d2 d3 d4 | |
|
54 d1 := self mockClass: 'A' super: 'X'. |
|
55 d2 := self mockClass: 'A' super: 'Y'. |
|
56 d3 := self mockClass: 'B' super: 'X'. |
|
57 d4 := self mockClass: 'B' super: 'X'. |
|
58 |
|
59 self assert: (d1 isRevisionOf: d2). |
|
60 self deny: (d1 isSameRevisionAs: d2). |
|
61 |
|
62 self assert: (d3 isRevisionOf: d4). |
|
63 self assert: (d3 isSameRevisionAs: d4). |
|
64 |
|
65 self deny: (d1 isRevisionOf: d3). |
|
66 self deny: (d4 isRevisionOf: d2). |
|
67 ! |
|
68 |
|
69 testCreation |
|
70 | d | |
|
71 d := self mockClassA asClassDefinition. |
|
72 self assert: d className = #MCMockClassA. |
|
73 self assert: d superclassName = #MCMock. |
|
74 self assert: d type = #normal. |
|
75 self assert: d category = self mockCategoryName. |
|
76 self assert: d instVarNames asArray = #('ivar'). |
|
77 self assert: d classVarNames asArray = #('CVar'). |
|
78 self assert: d classInstVarNames asArray = #(). |
|
79 self assert: d comment isString. |
|
80 self assert: d comment = self classAComment. |
|
81 "/TODO: Fix it later |
|
82 "/self assert: d commentStamp = self mockClassA organization commentStamp |
|
83 |
|
84 "Modified: / 11-09-2010 / 18:24:17 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
85 ! |
|
86 |
|
87 testDefinitionString |
|
88 | d | |
|
89 d := self mockClassA asClassDefinition. |
|
90 self assert: d definitionString = self mockClassA mcDefinition. |
|
91 |
|
92 "Modified: / 11-09-2010 / 18:04:06 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
93 ! |
|
94 |
|
95 testEquals |
|
96 | a b | |
|
97 a := self mockClass: 'ClassA' super: 'SuperA'. |
|
98 b := self mockClass: 'ClassA' super: 'SuperA'. |
|
99 self assert: a = b |
|
100 ! |
|
101 |
|
102 testEqualsSensitivity |
|
103 | message a b defA args defB | |
|
104 message := self creationMessage. |
|
105 a := #(ClassA SuperA CategoryA #(iVarA) #(CVarA) #(PoolA) #(ciVarA) |
|
106 typeA 'A comment' 'A'). |
|
107 b := #(ClassB SuperB CategoryB #(iVarB) #(CVarB) #(PoolB) #(ciVarB) |
|
108 typeB 'B comment' 'B'). |
|
109 |
|
110 defA := message valueWithArguments: a. |
|
111 1 to: 8 do: [:index | |
|
112 args := a copy. |
|
113 args at: index put: (b at: index). |
|
114 defB := message valueWithArguments: args. |
|
115 self deny: defA = defB.] |
|
116 ! |
|
117 |
|
118 testKindOfSubclass |
|
119 | classes d | |
|
120 classes := Array |
|
121 with: self mockClassA |
|
122 with: String |
|
123 with: Context |
|
124 with: WeakArray |
|
125 with: Float. |
|
126 classes do: [:c | |
|
127 d := c asClassDefinition. |
|
128 self assert: d kindOfSubclass = c kindOfSubclass. |
|
129 ]. |
|
130 |
|
131 "Modified: / 28-08-2010 / 23:03:03 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
132 ! |
|
133 |
|
134 testLoadAndUnload |
|
135 |
|
136 |
|
137 | d c | |
|
138 d := self mockClass: 'MCMockClassC' super: 'Object'. |
|
139 d load. |
|
140 self assert: (Smalltalk hasClassNamed: 'MCMockClassC'). |
|
141 c := (Smalltalk classNamed: 'MCMockClassC'). |
|
142 self assert: (c isKindOf: Class). |
|
143 self assert: c superclass = Object. |
|
144 self assert: c instVarNames isEmpty. |
|
145 self assert: c classVarNames isEmpty. |
|
146 self assert: c sharedPools isEmpty. |
|
147 self assert: c category = self mockCategoryName. |
|
148 self assert: c organization classComment = (self commentForClass: 'MCMockClassC'). |
|
149 "/Fix it later |
|
150 "/self assert: c organization commentStamp = (self commentStampForClass: 'MCMockClassC'). |
|
151 d unload. |
|
152 self deny: (Smalltalk hasClassNamed: 'MCMockClassC'). |
|
153 |
|
154 "Modified: / 11-09-2010 / 17:54:22 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
155 ! ! |
|
156 |
|
157 !MCClassDefinitionTest class methodsFor:'documentation'! |
|
158 |
|
159 version |
|
160 ^ '$Header: /cvs/stx/stx/goodies/monticello/MCClassDefinitionTest.st,v 1.1 2011-08-20 12:03:37 cg Exp $' |
|
161 ! |
|
162 |
|
163 version_CVS |
|
164 ^ '$Header: /cvs/stx/stx/goodies/monticello/MCClassDefinitionTest.st,v 1.1 2011-08-20 12:03:37 cg Exp $' |
|
165 ! |
|
166 |
|
167 version_SVN |
|
168 ^ '§Id: MCClassDefinitionTest.st 7 2010-09-12 07:18:55Z vranyj1 §' |
|
169 ! ! |